/ Hex Artifact Content
Login

Artifact 1137559f2e6f4e55d26ec83ce94ef57aa3748c8f:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 57  E 1.#endif../* W
0ee0: 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 47  hat version of G
0ef0: 43 43 20 69 73 20 62 65 69 6e 67 20 75 73 65 64  CC is being used
0f00: 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43 20 69  .  0 means GCC i
0f10: 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73 65 64  s not being used
0f20: 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47 4e 55   */.#ifdef __GNU
0f30: 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47 43 43  C__.# define GCC
0f40: 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e 55 43  _VERSION (__GNUC
0f50: 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47 4e 55  __*1000000+__GNU
0f60: 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30 2b 5f  C_MINOR__*1000+_
0f70: 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56 45 4c  _GNUC_PATCHLEVEL
0f80: 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  __).#else.# defi
0f90: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 30  ne GCC_VERSION 0
0fa0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64  .#endif../* Need
0fb0: 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64  ed for various d
0fc0: 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f  efinitions... */
0fd0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47  .#if defined(__G
0fe0: 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e  NUC__) && !defin
0ff0: 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45 29 0a  ed(_GNU_SOURCE).
1000: 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f  # define _GNU_SO
1010: 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66  URCE.#endif..#if
1020: 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42   defined(__OpenB
1030: 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  SD__) && !define
1040: 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23  d(_BSD_SOURCE).#
1050: 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55   define _BSD_SOU
1060: 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  RCE.#endif../*.*
1070: 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63 68 65  * For MinGW, che
1080: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
1090: 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68 65 20  can include the 
10a0: 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f 6e 74  header file cont
10b0: 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20 76 65  aining its.** ve
10c0: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
10d0: 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72 20 74  n, among other t
10e0: 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c 6c 79  hings.  Normally
10f0: 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20  , this internal 
1100: 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65 72 20  MinGW.** header 
1110: 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e 6c 79  file would [only
1120: 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20 61 75  ] be included au
1130: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 6f  tomatically by o
1140: 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61 64 65  ther MinGW heade
1150: 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f 77 65  r.** files; howe
1160: 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61 69 6e  ver, the contain
1170: 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72  ed version infor
1180: 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20 72 65  mation is now re
1190: 71 75 69 72 65 64 20 62 79 20 74 68 69 73 0a 2a  quired by this.*
11a0: 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20 74 6f  * header file to
11b0: 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62 69 6e   work around bin
11c0: 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  ary compatibilit
11d0: 79 20 69 73 73 75 65 73 20 28 73 65 65 20 62 65  y issues (see be
11e0: 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68 69 73  low) and.** this
11f0: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b 6e 6f   is the only kno
1200: 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69 61 62  wn way to reliab
1210: 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20 20 54  ly obtain it.  T
1220: 68 69 73 20 65 6e 74 69 72 65 20 23 69 66 20 62  his entire #if b
1230: 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20 62 65  lock.** would be
1240: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 6e 65   completely unne
1250: 63 65 73 73 61 72 79 20 69 66 20 74 68 65 72 65  cessary if there
1260: 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72 20 77   was any other w
1270: 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e 67 0a  ay of detecting.
1280: 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74 68 65  ** MinGW via the
1290: 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20  ir preprocessor 
12a0: 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20 63 75  (e.g. if they cu
12b0: 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72 20 47  stomized their G
12c0: 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a 20  CC to define.** 
12d0: 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65 63 69  some MinGW-speci
12e0: 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20 57 68  fic macros).  Wh
12f0: 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  en compiling for
1300: 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72 20 74   MinGW, either t
1310: 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49 4e 47  he.** _HAVE_MING
1320: 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f 4d 49  W_H or _HAVE__MI
1330: 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68 65 20  NGW_H (note the 
1340: 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f 72 65  extra underscore
1350: 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 0a  ) macro must be.
1360: 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74 68 65  ** defined; othe
1370: 72 77 69 73 65 2c 20 64 65 74 65 63 74 69 6f 6e  rwise, detection
1380: 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 73   of conditions s
1390: 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e 47 57  pecific to MinGW
13a0: 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69 73 61   will be.** disa
13b0: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  bled..*/.#if def
13c0: 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e 47 57  ined(_HAVE_MINGW
13d0: 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 6d  _H).# include "m
13e0: 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20 64 65  ingw.h".#elif de
13f0: 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d 49 4e  fined(_HAVE__MIN
1400: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1410: 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e 64 69  "_mingw.h".#endi
1420: 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e  f../*.** For Min
1430: 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78 20 28  GW version 4.x (
1440: 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63 68 65  and higher), che
1450: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ck to see if the
1460: 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45   _USE_32BIT_TIME
1470: 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69 73 20  _T.** define is 
1480: 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61 69 6e  required to main
1490: 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f 6d 70  tain binary comp
14a0: 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 74  atibility with t
14b0: 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d 65 0a  he MSVC runtime.
14c0: 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20 75 73  ** library in us
14d0: 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69 6e 64  e (e.g. for Wind
14e0: 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69 66 20  ows XP)..*/.#if 
14f0: 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 33 32  !defined(_USE_32
1500: 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 21  BIT_TIME_T) && !
1510: 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36 34 42  defined(_USE_64B
1520: 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 5c 0a  IT_TIME_T) && \.
1530: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57 49 4e      defined(_WIN
1540: 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  32) && !defined(
1550: 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20 20 20  _WIN64) && \.   
1560: 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57   defined(__MINGW
1570: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 29 20  _MAJOR_VERSION) 
1580: 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52  && __MINGW_MAJOR
1590: 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20 26 26  _VERSION >= 4 &&
15a0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
15b0: 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64 65 66  _MSVCRT__).# def
15c0: 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54  ine _USE_32BIT_T
15d0: 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IME_T.#endif../*
15e0: 20 54 68 65 20 70 75 62 6c 69 63 20 53 51 4c 69   The public SQLi
15f0: 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54  te interface.  T
1600: 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  he _FILE_OFFSET_
1610: 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73 74 20  BITS macro must 
1620: 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73 74 20  appear.** first 
1630: 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c 20 74  in QNX.  Also, t
1640: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1650: 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73 74 20  ME_T macro must 
1660: 61 70 70 65 61 72 20 66 69 72 73 74 20 66 6f 72  appear first for
1670: 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a 23 69  .** MinGW..*/.#i
1680: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e  nclude "sqlite3.
1690: 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64  h"../*.** Includ
16a0: 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  e the configurat
16b0: 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70 75  ion header outpu
16c0: 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65 27  t by 'configure'
16d0: 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67 20   if we're using 
16e0: 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66 2d  the.** autoconf-
16f0: 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a 23  based build.*/.#
1700: 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c 49  ifdef _HAVE_SQLI
1710: 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e 63  TE_CONFIG_H.#inc
1720: 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a  lude "config.h".
1730: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65  #endif..#include
1740: 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22   "sqliteLimit.h"
1750: 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75 69  ../* Disable nui
1760: 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20 6f  sance warnings o
1770: 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c  n Borland compil
1780: 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ers */.#if defin
1790: 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29  ed(__BORLANDC__)
17a0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 72  .#pragma warn -r
17b0: 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c  ch /* unreachabl
17c0: 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d  e code */.#pragm
17d0: 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43  a warn -ccc /* C
17e0: 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77 61  ondition is alwa
17f0: 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ys true or false
1800: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
1810: 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e 65   -aus /* Assigne
1820: 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65 72  d value is never
1830: 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61   used */.#pragma
1840: 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f   warn -csu /* Co
1850: 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20 61  mparing signed a
1860: 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23  nd unsigned */.#
1870: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70 61  pragma warn -spa
1880: 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20 70   /* Suspicious p
1890: 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74 69  ointer arithmeti
18a0: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
18b0: 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64  ** Include stand
18c0: 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65 73  ard header files
18d0: 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f   as necessary.*/
18e0: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54 44  .#ifdef HAVE_STD
18f0: 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  INT_H.#include <
1900: 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66  stdint.h>.#endif
1910: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  .#ifdef HAVE_INT
1920: 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65  TYPES_H.#include
1930: 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65   <inttypes.h>.#e
1940: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1950: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1960: 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61 73   are used to cas
1970: 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  t pointers to in
1980: 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e  tegers and.** in
1990: 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65  tegers to pointe
19a0: 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75  rs.  The way you
19b0: 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73 20   do this varies 
19c0: 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65  from one compile
19d0: 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74  r.** to the next
19e0: 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65 76  , so we have dev
19f0: 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f  eloped the follo
1a00: 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20  wing set of #if 
1a10: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f  statements.** to
1a20: 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70   generate approp
1a30: 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72  riate macros for
1a40: 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66   a wide range of
1a50: 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a   compilers..**.*
1a60: 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22 41  * The correct "A
1a70: 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74  NSI" way to do t
1a80: 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74 68  his is to use th
1a90: 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e  e intptr_t type.
1aa0: 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c  .** Unfortunatel
1ab0: 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20  y, that typedef 
1ac0: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
1ad0: 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72   on all compiler
1ae0: 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69  s, or.** if it i
1af0: 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20  s available, it 
1b00: 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63  requires an #inc
1b10: 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63  lude of specific
1b20: 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74   headers.** that
1b30: 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d   vary from one m
1b40: 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65  achine to the ne
1b50: 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74  xt..**.** Ticket
1b60: 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76   #3860:  The llv
1b70: 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c  m-gcc-4.2 compil
1b80: 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68  er from Apple ch
1b90: 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28  okes on.** the (
1ba0: 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29  (void*)&((char*)
1bb0: 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74  0)[X]) construct
1bc0: 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b  .  But MSVC chok
1bd0: 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58  es on ((void*)(X
1be0: 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76  ))..** So we hav
1bf0: 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20  e to define the 
1c00: 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72  macros in differ
1c10: 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69  ent ways dependi
1c20: 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d  ng on the.** com
1c30: 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65  piler..*/.#if de
1c40: 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f  fined(__PTRDIFF_
1c50: 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73  TYPE__)  /* This
1c60: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72   case should wor
1c70: 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64  k for GCC */.# d
1c80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1c90: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1ca0: 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  id*)(__PTRDIFF_T
1cb0: 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66  YPE__)(X)).# def
1cc0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1cd0: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1ce0: 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f  (__PTRDIFF_TYPE_
1cf0: 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65  _)(X)).#elif !de
1d00: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1d10: 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66        /* Works f
1d20: 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68  or compilers oth
1d30: 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a  er than LLVM */.
1d40: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1d50: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1d60: 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29  (void*)&((char*)
1d70: 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20  0)[X]).# define 
1d80: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1d90: 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63  T(X)  ((int)(((c
1da0: 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30  har*)X)-(char*)0
1db0: 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  )).#elif defined
1dc0: 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20  (HAVE_STDINT_H) 
1dd0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61    /* Use this ca
1de0: 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e  se if we have AN
1df0: 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20  SI headers */.# 
1e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
1e10: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
1e20: 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28  oid*)(intptr_t)(
1e30: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
1e40: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
1e50: 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72  )  ((int)(intptr
1e60: 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20  _t)(X)).#else   
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61         /* Genera
1e90: 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20  tes a warning - 
1ea0: 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f  but it always wo
1eb0: 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  rks */.# define 
1ec0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
1ed0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58  R(X)  ((void*)(X
1ee0: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
1ef0: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
1f00: 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e    ((int)(X)).#en
1f10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  dif../*.** A mac
1f20: 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74 68  ro to hint to th
1f30: 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74 20  e compiler that 
1f40: 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c  a function shoul
1f50: 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69  d not be.** inli
1f60: 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ned..*/.#if defi
1f70: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20  ned(__GNUC__).# 
1f80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
1f90: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69  OINLINE  __attri
1fa0: 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65  bute__((noinline
1fb0: 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  )).#elif defined
1fc0: 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d  (_MSC_VER) && _M
1fd0: 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20 20  SC_VER>=1310.#  
1fe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
1ff0: 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70  INLINE  __declsp
2000: 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c  ec(noinline).#el
2010: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  se.#  define SQL
2020: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e  ITE_NOINLINE.#en
2030: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20  dif../*.** Make 
2040: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63 6f  sure that the co
2050: 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69 63  mpiler intrinsic
2060: 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65 20  s we desire are 
2070: 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20  enabled when.** 
2080: 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20 61  compiling with a
2090: 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76 65  n appropriate ve
20a0: 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e  rsion of MSVC un
20b0: 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20 62  less prevented b
20c0: 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  y.** the SQLITE_
20d0: 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49  DISABLE_INTRINSI
20e0: 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66  C define..*/.#if
20f0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2100: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2110: 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e 65  IC).#  if define
2120: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2130: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
2140: 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f     if !defined(_
2150: 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20 20  WIN32_WCE).#    
2160: 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69    include <intri
2170: 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61 67  n.h>.#      prag
2180: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
2190: 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a 23  teswap_ushort).#
21a0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
21b0: 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70  rinsic(_byteswap
21c0: 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20 70  _ulong).#      p
21d0: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
21e0: 5f 52 65 61 64 57 72 69 74 65 42 61 72 72 69 65  _ReadWriteBarrie
21f0: 72 29 0a 23 20 20 20 20 65 6c 73 65 0a 23 20 20  r).#    else.#  
2200: 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 63 6d 6e      include <cmn
2210: 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 65  intrin.h>.#    e
2220: 6e 64 69 66 0a 23 20 20 65 6e 64 69 66 0a 23 65  ndif.#  endif.#e
2230: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2240: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
2250: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20  E macro must be 
2260: 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c  defined as 0, 1,
2270: 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e   or 2..** 0 mean
2280: 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70 65  s mutexes are pe
2290: 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c  rmanently disabl
22a0: 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72  e and the librar
22b0: 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68  y is never.** th
22c0: 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61  readsafe.  1 mea
22d0: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
22e0: 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69  s serialized whi
22f0: 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65 73  ch is the highes
2300: 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68  t.** level of th
2310: 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d  readsafety.  2 m
2320: 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79  eans the library
2330: 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65   is multithreade
2340: 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20  d - multiple.** 
2350: 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65 20  threads can use 
2360: 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61  SQLite as long a
2370: 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73  s no two threads
2380: 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65 20   try to use the 
2390: 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65  same.** database
23a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74   connection at t
23b0: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a  he same time..**
23c0: 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f  .** Older versio
23d0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65  ns of SQLite use
23e0: 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48  d an optional TH
23f0: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a  READSAFE macro..
2400: 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74 68  ** We support th
2410: 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a  at for legacy..*
2420: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2430: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
2440: 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 54  ).# if defined(T
2450: 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20 64  HREADSAFE).#   d
2460: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
2470: 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53 41  EADSAFE THREADSA
2480: 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  FE.# else.#   de
2490: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45  fine SQLITE_THRE
24a0: 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a  ADSAFE 1 /* IMP:
24b0: 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a   R-07272-22309 *
24c0: 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  /.# endif.#endif
24d0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66  ../*.** Powersaf
24e0: 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f  e overwrite is o
24f0: 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42  n by default.  B
2500: 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64  ut can be turned
2510: 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68   off using.** th
2520: 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52  e -DSQLITE_POWER
2530: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30  SAFE_OVERWRITE=0
2540: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70   command-line op
2550: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
2560: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
2570: 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65  E_OVERWRITE.# de
2580: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45  fine SQLITE_POWE
2590: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20  RSAFE_OVERWRITE 
25a0: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
25b0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
25c0: 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72  5715-37072 Memor
25d0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
25e0: 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61 62  tistics are enab
25f0: 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c  led by.** defaul
2600: 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20  t unless SQLite 
2610: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
2620: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2630: 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a  MEMSTATUS=0 in.*
2640: 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d  * which case mem
2650: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2660: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64 69  tatistics are di
2670: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
2680: 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  t..*/.#if !defin
2690: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
26a0: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
26b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
26c0: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
26d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
26e0: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
26f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2700: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
2710: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
2720: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
2730: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2740: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
2750: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
2760: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2770: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
2780: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
2790: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
27a0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
27b0: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
27c0: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
27d0: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
27e0: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
27f0: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2800: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
2810: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
2820: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
2830: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
2840: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
2850: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
2860: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
2870: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
2880: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
2890: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
28a0: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
28b0: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
28c0: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
28d0: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
28e0: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
28f0: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
2900: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
2910: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
2920: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
2930: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
2940: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
2950: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
2960: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
2970: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
2980: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
2990: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
29a0: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
29b0: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
29c0: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
29d0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
29e0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
29f0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
2a00: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2a10: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2a20: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2a30: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2a40: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2a50: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2a60: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2a70: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2a80: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2a90: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2aa0: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2ab0: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
2ac0: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
2ad0: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
2ae0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
2af0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2b00: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
2b10: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2b20: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2b30: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2b40: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2b50: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2b60: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2b70: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2b80: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2b90: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2ba0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2bb0: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
2bc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
2bd0: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
2be0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
2bf0: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2c00: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
2c10: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2c20: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2c30: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2c40: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2c50: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2c60: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2c70: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2c80: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2c90: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
2ca0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2cb0: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
2cc0: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
2cd0: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
2ce0: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
2cf0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2d00: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
2d10: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
2d20: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
2d30: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
2d40: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
2d50: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
2d60: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
2d70: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
2d80: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
2d90: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2da0: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
2db0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
2dc0: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
2dd0: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
2de0: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
2df0: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
2e00: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
2e10: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
2e20: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
2e30: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
2e40: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
2e50: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
2e60: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
2e70: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
2e80: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
2e90: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
2ea0: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
2eb0: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
2ec0: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
2ed0: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
2ee0: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
2ef0: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
2f00: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
2f10: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
2f20: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
2f30: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
2f40: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
2f50: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
2f60: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
2f70: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
2f80: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
2f90: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
2fa0: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
2fb0: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
2fc0: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
2fd0: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
2fe0: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
2ff0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
3000: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
3010: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3020: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e 44  BUG).# define ND
3030: 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69  EBUG 1.#endif.#i
3040: 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  f defined(NDEBUG
3050: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
3060: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64  ITE_DEBUG).# und
3070: 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66  ef NDEBUG.#endif
3080: 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53  ../*.** Enable S
3090: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
30a0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66  LAIN_COMMENTS if
30b0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
30c0: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
30d0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
30e0: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
30f0: 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64  N_COMMENTS) && d
3100: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3110: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51  BUG).# define SQ
3120: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
3130: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23  AIN_COMMENTS 1.#
3140: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
3150: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
3160: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64  o is used to aid
3170: 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73   in coverage tes
3180: 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64  ting.  When.** d
3190: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
31a0: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
31b0: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
31c0: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
31d0: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
31e0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
31f0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
3200: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
3210: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
3220: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
3230: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3240: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
3250: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
3260: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
3270: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
3280: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
3290: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
32a0: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
32b0: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
32c0: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
32d0: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
32e0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
32f0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
3300: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
3310: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
3320: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
3330: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
3340: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
3350: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
3360: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
3370: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
3380: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
3390: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
33a0: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
33b0: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
33c0: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
33d0: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
33e0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
33f0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
3400: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
3410: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
3420: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
3430: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
3440: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
3450: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
3460: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
3470: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
3480: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
3490: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
34a0: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
34b0: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
34c0: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
34d0: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
34e0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
34f0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
3500: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
3510: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
3520: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
3530: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
3540: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
3550: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
3560: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
3570: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
3580: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
3590: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
35a0: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
35b0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
35c0: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
35d0: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
35e0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
35f0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
3600: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
3610: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
3620: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
3630: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
3640: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
3650: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
3660: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
3670: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
3680: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
3690: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
36a0: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
36b0: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
36c0: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
36d0: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
36e0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
36f0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
3700: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
3710: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
3720: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
3730: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
3740: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
3750: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
3760: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
3770: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
3780: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
3790: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
37a0: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
37b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
37c0: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
37d0: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
37e0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
37f0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a  essions which.**
3800: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f   are intended to
3810: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
3820: 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63  or false, respec
3830: 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a  tively.  Such.**
3840: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75   expressions cou
3850: 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72  ld be omitted fr
3860: 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70  om the code comp
3870: 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65  letely.  But the
3880: 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65  y.** are include
3890: 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73  d in a few cases
38a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68   in order to enh
38b0: 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65  ance the resilie
38c0: 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65  nce.** of SQLite
38d0: 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62   to unexpected b
38e0: 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b  ehavior - to mak
38f0: 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66  e the code "self
3900: 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20  -healing".** or 
3910: 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72  "ductile" rather
3920: 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69   than being "bri
3930: 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69  ttle" and crashi
3940: 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a  ng at the first.
3950: 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61  ** hint of unpla
3960: 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a  nned behavior..*
3970: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
3980: 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20  rds, ALWAYS and 
3990: 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20  NEVER are added 
39a0: 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f  for defensive co
39b0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64  de..**.** When d
39c0: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
39d0: 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64  sting ALWAYS and
39e0: 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d   NEVER are hard-
39f0: 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74  coded to.** be t
3a00: 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f  rue and false so
3a10: 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63   that the unreac
3a20: 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20  hable code they 
3a30: 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20  specify will.** 
3a40: 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61  not be counted a
3a50: 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e  s untested code.
3a60: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3a70: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3a80: 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64  TEST) || defined
3a90: 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e  (SQLITE_MUTATION
3aa0: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3ab0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3ac0: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3ad0: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3ae0: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3af0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3b00: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
3b10: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
3b20: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
3b30: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
3b40: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3b50: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3b60: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3b70: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3b80: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3b90: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
3ba0: 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  me malloc failur
3bb0: 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73  es are only poss
3bc0: 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54  ible if SQLITE_T
3bd0: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3be0: 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64  SS is.** defined
3bf0: 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  .  We need to de
3c00: 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f  fend against tho
3c10: 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e  se failures when
3c20: 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a   testing with.**
3c30: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
3c40: 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74  LLOC_STRESS, but
3c50: 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74   we don't want t
3c60: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62  he unreachable b
3c70: 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e  ranches.** durin
3c80: 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64  g a normal build
3c90: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
3ca0: 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73   macro can be us
3cb0: 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65  ed to disable te
3cc0: 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  sts.** that are 
3cd0: 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78 63  always false exc
3ce0: 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f  ept when SQLITE_
3cf0: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
3d00: 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23  ESS is set..*/.#
3d10: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3d20: 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53  E_TEST_REALLOC_S
3d30: 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20  TRESS).# define 
3d40: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
3d50: 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a 23  STRESS(X)  (X).#
3d60: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3d70: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f  EBUG).# define O
3d80: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
3d90: 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f 28  TRESS(X)  ((X)?(
3da0: 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a  assert(0),1):0).
3db0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f  #else.# define O
3dc0: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
3dd0: 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23 65  TRESS(X)  (0).#e
3de0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c  ndif../*.** Decl
3df0: 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f  arations used fo
3e00: 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70  r tracing the op
3e10: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69  erating system i
3e20: 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69  nterfaces..*/.#i
3e30: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
3e40: 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29  _FORCE_OS_TRACE)
3e50: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
3e60: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
3e70: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
3e80: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
3e90: 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74  TE_OS_WIN).  ext
3ea0: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f  ern int sqlite3O
3eb0: 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65  STrace;.# define
3ec0: 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20 20   OSTRACE(X)     
3ed0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
3ee0: 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74 65  OSTrace ) sqlite
3ef0: 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23  3DebugPrintf X.#
3f00: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48   define SQLITE_H
3f10: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c  AVE_OS_TRACE.#el
3f20: 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52  se.# define OSTR
3f30: 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20  ACE(X).# undef  
3f40: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3f50: 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RACE.#endif../*.
3f60: 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74 65  ** Is the sqlite
3f70: 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74  3ErrName() funct
3f80: 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68  ion needed in th
3f90: 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e  e build?  Curren
3fa0: 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65  tly,.** it is ne
3fb0: 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77  eded by "mutex_w
3fc0: 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75  32.c" (when debu
3fd0: 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e  gging), "os_win.
3fe0: 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52  c" (when.** OSTR
3ff0: 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c  ACE is enabled),
4000: 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20   and by several 
4010: 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20  "test*.c" files 
4020: 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f  (which are.** co
4030: 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c  mpiled using SQL
4040: 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69  ITE_TEST)..*/.#i
4050: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
4060: 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20  _HAVE_OS_TRACE) 
4070: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
4080: 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20  E_TEST) || \.   
4090: 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
40a0: 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54  _DEBUG) && SQLIT
40b0: 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69  E_OS_WIN).# defi
40c0: 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ne SQLITE_NEED_E
40d0: 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20  RR_NAME.#else.# 
40e0: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45  undef  SQLITE_NE
40f0: 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64  ED_ERR_NAME.#end
4100: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  if../*.** SQLITE
4110: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
4120: 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f  COMMENTS is inco
4130: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51  mpatible with SQ
4140: 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
4150: 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  N.*/.#ifdef SQLI
4160: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
4170: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
4180: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
4190: 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f  MMENTS.#endif../
41a0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
41b0: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
41c0: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
41d0: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
41e0: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
41f0: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
4200: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
4210: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
4220: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
4230: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
4240: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
4250: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
4260: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
4270: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
4280: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
4290: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
42a0: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
42b0: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
42c0: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
42d0: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
42e0: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
42f0: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4300: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
4310: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
4320: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
4330: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
4340: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
4350: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
4360: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
4370: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
4380: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
4390: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
43a0: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
43b0: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
43c0: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
43d0: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
43e0: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
43f0: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
4400: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
4410: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
4420: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
4430: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
4440: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
4450: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
4460: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
4470: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
4480: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
4490: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
44a0: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
44b0: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
44c0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
44d0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
44e0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
44f0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
4500: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
4510: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
4520: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
4530: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
4540: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
4550: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4560: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
4570: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
4580: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
4590: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
45a0: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
45b0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
45c0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
45d0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
45e0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
45f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
4600: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
4610: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
4620: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
4630: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
4640: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
4650: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
4660: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
4670: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4680: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
4690: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
46a0: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
46b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
46c0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
46d0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
46e0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
46f0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
4700: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
4710: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
4720: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
4730: 65 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20  e C compiler.** 
4740: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
4750: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
4760: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
4770: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
4780: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
4790: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
47a0: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
47b0: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
47c0: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
47d0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
47e0: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
47f0: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
4800: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
4810: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
4820: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
4830: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
4840: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
4850: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
4860: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
4870: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
4880: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
4890: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
48a0: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
48b0: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
48c0: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
48d0: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
48e0: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
48f0: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
4900: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
4910: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
4920: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4930: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  T_FILE_FORMAT 4.
4940: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
4950: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
4960: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
4970: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
4980: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
4990: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
49a0: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
49b0: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
49c0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
49d0: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
49e0: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
49f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4a00: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
4a10: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
4a20: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
4a30: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
4a40: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
4a50: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
4a60: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
4a70: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
4a80: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4a90: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
4aa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
4ab0: 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69  P_STORE 1.# defi
4ac0: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
4ad0: 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  TORE_xc 1  /* Ex
4ae0: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
4af0: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
4b00: 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20  .** If no value 
4b10: 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65  has been provide
4b20: 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58  d for SQLITE_MAX
4b30: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
4b40: 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45   or if.** SQLITE
4b50: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73  _TEMP_STORE is s
4b60: 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75  et to 3 (never u
4b70: 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  se temporary fil
4b80: 65 73 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74  es), set it.** t
4b90: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
4ba0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
4bb0: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
4bc0: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
4bd0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
4be0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
4bf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4c00: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4c10: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
4c20: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4c30: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4c40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4c50: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
4c60: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4c70: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
4c80: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
4c90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
4ca0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
4cb0: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
4cc0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
4cd0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
4ce0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4cf0: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
4d00: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4d10: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4d20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4d30: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
4d40: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
4d50: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
4d60: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
4d70: 65 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61  efault initial a
4d80: 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68  llocation for th
4d90: 65 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e  e pagecache when
4da0: 20 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a   using separate.
4db0: 2a 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f  ** pagecaches fo
4dc0: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
4dd0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70  connection.  A p
4de0: 6f 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69  ositive number i
4df0: 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  s the.** number 
4e00: 6f 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67  of pages.  A neg
4e10: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74  ative number N t
4e20: 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e  ranslations mean
4e30: 73 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a  s that a buffer.
4e40: 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79  ** of -1024*N by
4e50: 74 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  tes is allocated
4e60: 20 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73   and used for as
4e70: 20 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69   many pages as i
4e80: 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a  t will hold..*/.
4e90: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
4ea0: 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e  EFAULT_PCACHE_IN
4eb0: 49 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51  ITSZ.# define SQ
4ec0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41  LITE_DEFAULT_PCA
4ed0: 43 48 45 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23  CHE_INITSZ 100.#
4ee0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43  endif../*.** GCC
4ef0: 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65   does not define
4f00: 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20   the offsetof() 
4f10: 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68  macro so we'll h
4f20: 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20  ave to do it.** 
4f30: 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69  ourselves..*/.#i
4f40: 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23  fndef offsetof.#
4f50: 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28  define offsetof(
4f60: 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29  STRUCTURE,FIELD)
4f70: 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26   ((int)((char*)&
4f80: 28 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d  ((STRUCTURE*)0)-
4f90: 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a  >FIELD)).#endif.
4fa0: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
4fb0: 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d   compute minimum
4fc0: 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20   and maximum of 
4fd0: 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a  two numbers..*/.
4fe0: 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65  #ifndef MIN.# de
4ff0: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
5000: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
5010: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d  #endif.#ifndef M
5020: 41 58 0a 23 20 64 65 66 69 6e 65 20 4d 41 58 28  AX.# define MAX(
5030: 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41  A,B) ((A)>(B)?(A
5040: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  ):(B)).#endif../
5050: 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62  *.** Swap two ob
5060: 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20 54 59  jects of type TY
5070: 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  PE..*/.#define S
5080: 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54  WAP(TYPE,A,B) {T
5090: 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d  YPE t=A; A=B; B=
50a0: 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  t;}../*.** Check
50b0: 20 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20   to see if this 
50c0: 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43  machine uses EBC
50d0: 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69  DIC.  (Yes, beli
50e0: 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74  eve it or.** not
50f0: 2c 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c  , there are stil
5100: 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74  l machines out t
5110: 68 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42  here that use EB
5120: 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41  CDIC.).*/.#if 'A
5130: 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65  ' == '\301'.# de
5140: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44  fine SQLITE_EBCD
5150: 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66  IC 1.#else.# def
5160: 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49  ine SQLITE_ASCII
5170: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
5180: 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f   Integers of kno
5190: 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65  wn sizes.  These
51a0: 20 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20   typedefs might 
51b0: 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69  change for archi
51c0: 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72  tectures.** wher
51d0: 65 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79  e the sizes very
51e0: 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20  .  Preprocessor 
51f0: 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c  macros are avail
5200: 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65  able so that the
5210: 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65  .** types can be
5220: 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65   conveniently re
5230: 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69  defined at compi
5240: 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74  le-type.  Like t
5250: 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  his:.**.**      
5260: 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52     cc '-DUINTPTR
5270: 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20  _TYPE=long long 
5280: 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e  int' ....*/.#ifn
5290: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a  def UINT32_TYPE.
52a0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
52b0: 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T32_T.#  define 
52c0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74  UINT32_TYPE uint
52d0: 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  32_t.# else.#  d
52e0: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
52f0: 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23  E unsigned int.#
5300: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5310: 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  fndef UINT16_TYP
5320: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
5330: 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e  INT16_T.#  defin
5340: 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69  e UINT16_TYPE ui
5350: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
5360: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
5370: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f  YPE unsigned sho
5380: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
5390: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
53a0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
53b0: 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20   HAVE_INT16_T.# 
53c0: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
53d0: 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  PE int16_t.# els
53e0: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  e.#  define INT1
53f0: 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74  6_TYPE short int
5400: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5410: 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59  #ifndef UINT8_TY
5420: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5430: 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  UINT8_T.#  defin
5440: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e  e UINT8_TYPE uin
5450: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
5460: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
5470: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23   unsigned char.#
5480: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5490: 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a  fndef INT8_TYPE.
54a0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
54b0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  8_T.#  define IN
54c0: 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23  T8_TYPE int8_t.#
54d0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
54e0: 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64  INT8_TYPE signed
54f0: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
5500: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e  ndif.#ifndef LON
5510: 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64  GDOUBLE_TYPE.# d
5520: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
5530: 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c  _TYPE long doubl
5540: 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66  e.#endif.typedef
5550: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36   sqlite_int64 i6
5560: 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38  4;          /* 8
5570: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5580: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5590: 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36  sqlite_uint64 u6
55a0: 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  4;         /* 8-
55b0: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
55c0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
55d0: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32   UINT32_TYPE u32
55e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34  ;           /* 4
55f0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
5600: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
5610: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31  f UINT16_TYPE u1
5620: 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  6;           /* 
5630: 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  2-byte unsigned 
5640: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5650: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31  ef INT16_TYPE i1
5660: 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  6;            /*
5670: 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   2-byte signed i
5680: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
5690: 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b  f UINT8_TYPE u8;
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
56b0: 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  1-byte unsigned 
56c0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
56d0: 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b  ef INT8_TYPE i8;
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
56f0: 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   1-byte signed i
5700: 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nteger */../*.**
5710: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5720: 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e  is a u64 constan
5730: 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61  t that is the ma
5740: 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a  ximum u64 value.
5750: 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73  ** that can be s
5760: 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77  tored in a u32 w
5770: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64  ithout loss of d
5780: 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  ata.  The value.
5790: 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30  ** is 0x00000000
57a0: 66 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62  ffffffff.  But b
57b0: 65 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73  ecause of quirks
57c0: 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65   of some compile
57d0: 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74  rs, we.** have t
57e0: 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61  o specify the va
57f0: 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20  lue in the less 
5800: 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72  intuitive manner
5810: 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69   shown:.*/.#defi
5820: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ne SQLITE_MAX_U3
5830: 32 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33  2  ((((u64)1)<<3
5840: 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  2)-1)../*.** The
5850: 20 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74   datatype used t
5860: 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65  o store estimate
5870: 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  s of the number 
5880: 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20  of rows in a.** 
5890: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
58a0: 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69   This is an unsi
58b0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70  gned integer typ
58c0: 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66  e.  For 99.9% of
58d0: 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61  .** the world, a
58e0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
58f0: 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20  is sufficient.  
5900: 42 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74  But a 64-bit int
5910: 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75  eger.** can be u
5920: 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  sed at compile-t
5930: 69 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a  ime if desired..
5940: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5950: 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79  _64BIT_STATS. ty
5960: 70 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e  pedef u64 tRowcn
5970: 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20  t;    /* 64-bit 
5980: 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65  only if requeste
5990: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
59a0: 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65  e */.#else. type
59b0: 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b  def u32 tRowcnt;
59c0: 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73      /* 32-bit is
59d0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
59e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73  #endif../*.** Es
59f0: 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69  timated quantiti
5a00: 65 73 20 75 73 65 64 20 66 6f 72 20 71 75 65 72  es used for quer
5a10: 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73  y planning are s
5a20: 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a  tored as 16-bit.
5a30: 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20  ** logarithms.  
5a40: 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20  For quantity X, 
5a50: 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
5a60: 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20   is 10*log2(X). 
5a70: 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61   This.** gives a
5a80: 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20   possible range 
5a90: 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70  of values of app
5aa0: 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39  roximately 1.0e9
5ab0: 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a  86 to 1e-986..**
5ac0: 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64   But the allowed
5ad0: 20 76 61 6c 75 65 73 20 61 72 65 20 22 67 72 61   values are "gra
5ae0: 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79  iny".  Not every
5af0: 20 76 61 6c 75 65 20 69 73 20 72 65 70 72 65 73   value is repres
5b00: 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  entable..** For 
5b10: 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74  example, quantit
5b20: 69 65 73 20 31 36 20 61 6e 64 20 31 37 20 61 72  ies 16 and 17 ar
5b30: 65 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74  e both represent
5b40: 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a  ed by a LogEst.*
5b50: 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65  * of 40.  Howeve
5b60: 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20  r, since LogEst 
5b70: 71 75 61 6e 74 69 74 69 65 73 20 61 72 65 20 73  quantities are s
5b80: 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74  uppose to be est
5b90: 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65  imates,.** not e
5ba0: 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69  xact values, thi
5bb0: 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73  s imprecision is
5bc0: 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a   not a problem..
5bd0: 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69  **.** "LogEst" i
5be0: 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67  s short for "Log
5bf0: 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74  arithmic Estimat
5c00: 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c  e"..**.** Exampl
5c10: 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e  es:.**      1 ->
5c20: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
5c30: 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20  20 -> 43        
5c40: 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a    10000 -> 132.*
5c50: 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20  *      2 -> 10  
5c60: 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e             25 ->
5c70: 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35 30   46          250
5c80: 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20  00 -> 146.**    
5c90: 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20    3 -> 16       
5ca0: 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20       100 -> 66  
5cb0: 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e        1000000 ->
5cc0: 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d   199.**      4 -
5cd0: 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20 31  > 20           1
5ce0: 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20  000 -> 99       
5cf0: 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a   1048576 -> 200.
5d00: 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20  **     10 -> 33 
5d10: 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20 2d            1024 -
5d20: 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36 37  > 100    4294967
5d30: 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a  296 -> 320.**.**
5d40: 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20   The LogEst can 
5d50: 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69  be negative to i
5d60: 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e  ndicate fraction
5d70: 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78  al values..** Ex
5d80: 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  amples:.**.**   
5d90: 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20   0.5 -> -10     
5da0: 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33        0.1 -> -33
5db0: 20 20 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d          0.0625 -
5dc0: 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66  > -40.*/.typedef
5dd0: 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45   INT16_TYPE LogE
5de0: 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74  st;../*.** Set t
5df0: 68 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  he SQLITE_PTRSIZ
5e00: 45 20 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e  E macro to the n
5e10: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
5e20: 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23  n a pointer.*/.#
5e30: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54  ifndef SQLITE_PT
5e40: 52 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e  RSIZE.# if defin
5e50: 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e  ed(__SIZEOF_POIN
5e60: 54 45 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  TER__).#   defin
5e70: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
5e80: 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45   __SIZEOF_POINTE
5e90: 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e  R__.# elif defin
5ea0: 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20  ed(i386)     || 
5eb0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
5ec0: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
5ed0: 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a  M_IX86) ||    \.
5ee0: 20 20 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f         defined(_
5ef0: 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69  M_ARM)   || defi
5f00: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20  ned(__arm__)    
5f10: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
5f20: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
5f30: 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20  ITE_PTRSIZE 4.# 
5f40: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
5f50: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38  SQLITE_PTRSIZE 8
5f60: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f70: 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74 79 70  ./* The uptr typ
5f80: 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  e is an unsigned
5f90: 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65 20 65   integer large e
5fa0: 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20  nough to hold a 
5fb0: 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64  pointer.*/.#if d
5fc0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
5fd0: 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65 66 20  NT_H).  typedef 
5fe0: 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72 3b 0a  uintptr_t uptr;.
5ff0: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50 54 52  #elif SQLITE_PTR
6000: 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64 65  SIZE==4.  typede
6010: 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65 6c 73  f u32 uptr;.#els
6020: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
6030: 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  uptr;.#endif../*
6040: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 57  .** The SQLITE_W
6050: 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63  ITHIN(P,S,E) mac
6060: 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ro checks to see
6070: 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20 70 6f   if pointer P po
6080: 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74  ints to.** somet
6090: 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53 20 28  hing between S (
60a0: 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64 20 45  inclusive) and E
60b0: 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a   (exclusive)..**
60c0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
60d0: 64 73 2c 20 53 20 69 73 20 61 20 62 75 66 66 65  ds, S is a buffe
60e0: 72 20 61 6e 64 20 45 20 69 73 20 61 20 70 6f 69  r and E is a poi
60f0: 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
6100: 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a 2a 20  t byte after.** 
6110: 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66 66 65  the end of buffe
6120: 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  r S.  This macro
6130: 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
6140: 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d   P points to som
6150: 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69  ething.** contai
6160: 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  ned within the b
6170: 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66  uffer S..*/.#def
6180: 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49  ine SQLITE_WITHI
6190: 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70 74 72  N(P,S,E) (((uptr
61a0: 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53 29 29  )(P)>=(uptr)(S))
61b0: 26 26 28 28 75 70 74 72 29 28 50 29 3c 28 75 70  &&((uptr)(P)<(up
61c0: 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a  tr)(E))).../*.**
61d0: 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
61e0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
61f0: 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20   machine is big 
6200: 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e  or little endian
6210: 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72  ,.** and whether
6220: 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74   or not that det
6230: 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75  ermination is ru
6240: 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c  n-time or compil
6250: 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f  e-time..**.** Fo
6260: 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e  r best performan
6270: 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ce, an attempt i
6280: 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20  s made to guess 
6290: 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65  at the byte-orde
62a0: 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65  r.** using C-pre
62b0: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73  processor macros
62c0: 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75 6e  .  If that is un
62d0: 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69  successful, or i
62e0: 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55  f.** -DSQLITE_RU
62f0: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d  NTIME_BYTEORDER=
6300: 31 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62  1 is set, then b
6310: 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74  yte-order is det
6320: 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75  ermined.** at ru
6330: 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 20 28  n-time..*/.#if (
6340: 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20  defined(i386)   
6350: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69    || defined(__i
6360: 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69  386__)   || defi
6370: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20  ned(_M_IX86) || 
6380: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
6390: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
63a0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
63b0: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d  _) || defined(_M
63c0: 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20  _X64)  ||    \. 
63d0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
63e0: 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  MD64) || defined
63f0: 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20  (_M_ARM)     || 
6400: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20  defined(__x86)  
6410: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6420: 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20  fined(__arm__)) 
6430: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
6440: 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f  TE_RUNTIME_BYTEO
6450: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
6460: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
6470: 20 20 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65     1234.# define
6480: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
6490: 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  N    0.# define 
64a0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
64b0: 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53  IAN 1.# define S
64c0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
64d0: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E  SQLITE_UTF16L
64e0: 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65  E.#endif.#if (de
64f0: 66 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20  fined(sparc)    
6500: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63  || defined(__ppc
6510: 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21  __))  \.    && !
6520: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52  defined(SQLITE_R
6530: 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52  UNTIME_BYTEORDER
6540: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
6550: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6560: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6570: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
6580: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
6590: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
65a0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
65b0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
65c0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
65d0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
65e0: 64 28 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  d(SQLITE_BYTEORD
65f0: 45 52 29 0a 23 20 69 66 64 65 66 20 53 51 4c 49  ER).# ifdef SQLI
6600: 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
6610: 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69    const int sqli
6620: 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c  te3one = 1;.# el
6630: 73 65 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73  se.  extern cons
6640: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
6650: 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ;.# endif.# defi
6660: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
6670: 44 45 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20  DER    0     /* 
6680: 30 20 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e  0 means "unknown
6690: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
66a0: 22 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  " */.# define SQ
66b0: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
66c0: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
66d0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
66e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
66f0: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
6700: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
6710: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
6720: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6730: 56 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45  VE  (SQLITE_BIGE
6740: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
6750: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
6760: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
6770: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
6780: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
6790: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
67a0: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
67b0: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
67c0: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
67d0: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
67e0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
67f0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
6800: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
6810: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
6820: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
6830: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
6840: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
6850: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
6860: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
6870: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
6880: 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  64)../*.** Round
6890: 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20   up a number to 
68a0: 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20  the next larger 
68b0: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20  multiple of 8.  
68c0: 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20  This is used.** 
68d0: 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20  to force 8-byte 
68e0: 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d  alignment on 64-
68f0: 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65  bit architecture
6900: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f  s..*/.#define RO
6910: 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78  UND8(x)     (((x
6920: 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  )+7)&~7)../*.** 
6930: 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68  Round down to th
6940: 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70  e nearest multip
6950: 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69  le of 8.*/.#defi
6960: 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29  ne ROUNDDOWN8(x)
6970: 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a   ((x)&~7)../*.**
6980: 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
6990: 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c   pointer X is al
69a0: 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79  igned to an 8-by
69b0: 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68  te boundary.  Th
69c0: 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  is.** macro is u
69d0: 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20  sed only within 
69e0: 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69  assert() to veri
69f0: 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  fy that the code
6a00: 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69   gets.** all ali
6a10: 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69  gnment restricti
6a20: 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a  ons correct..**.
6a30: 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51  ** Except, if SQ
6a40: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
6a50: 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65  NED_MALLOC is de
6a60: 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  fined, then the.
6a70: 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61  ** underlying ma
6a80: 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74  lloc() implement
6a90: 61 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75  ation might retu
6aa0: 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69  rn us 4-byte ali
6ab0: 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73  gned.** pointers
6ac0: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
6ad0: 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62   only verify 4-b
6ae0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a  yte alignment..*
6af0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
6b00: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
6b10: 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45  ALLOC.# define E
6b20: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
6b30: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
6b40: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
6b50: 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  0)&3)==0).#else.
6b60: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
6b70: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
6b80: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
6b90: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d   - (char*)0)&7)=
6ba0: 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  =0).#endif../*.*
6bb0: 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f  * Disable MMAP o
6bc0: 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72  n platforms wher
6bd0: 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f  e it is known to
6be0: 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66   not work.*/.#if
6bf0: 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42   defined(__OpenB
6c00: 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  SD__) || defined
6c10: 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75  (__QNXNTO__).# u
6c20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
6c30: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
6c40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
6c50: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
6c60: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20  ../*.** Default 
6c70: 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  maximum size of 
6c80: 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d  memory used by m
6c90: 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f  emory-mapped I/O
6ca0: 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23   in the VFS.*/.#
6cb0: 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a  ifdef __APPLE__.
6cc0: 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65  # include <Targe
6cd0: 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e  tConditionals.h>
6ce0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
6cf0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6d00: 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65  SIZE.# if define
6d10: 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20  d(__linux__) \. 
6d20: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   || defined(_WIN
6d30: 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69  32) \.  || (defi
6d40: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26  ned(__APPLE__) &
6d50: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48  & defined(__MACH
6d60: 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  __)) \.  || defi
6d70: 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c  ned(__sun) \.  |
6d80: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65  | defined(__Free
6d90: 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  BSD__) \.  || de
6da0: 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c  fined(__DragonFl
6db0: 79 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  y__).#   define 
6dc0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6dd0: 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20  SIZE 0x7fff0000 
6de0: 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a   /* 2147418112 *
6df0: 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66  /.# else.#   def
6e00: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
6e10: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64  MAP_SIZE 0.# end
6e20: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
6e30: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6e40: 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65  _xc 1 /* exclude
6e50: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
6e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
6e70: 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  he default MMAP_
6e80: 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20  SIZE is zero on 
6e90: 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20  all platforms.  
6ea0: 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61  Or, even if a la
6eb0: 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20  rger.** default 
6ec0: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65  MMAP_SIZE is spe
6ed0: 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c  cified at compil
6ee0: 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  e-time, make sur
6ef0: 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a  e that it does.*
6f00: 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65  * not exceed the
6f10: 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69   maximum mmap si
6f20: 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ze..*/.#ifndef S
6f30: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6f40: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
6f50: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6f60: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65  MMAP_SIZE 0.# de
6f70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
6f80: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63  ULT_MMAP_SIZE_xc
6f90: 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66   1  /* Exclude f
6fa0: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
6fb0: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
6fc0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
6fd0: 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ZE>SQLITE_MAX_MM
6fe0: 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20  AP_SIZE.# undef 
6ff0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7000: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
7010: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
7020: 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54  _MMAP_SIZE SQLIT
7030: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7040: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  #endif../*.** On
7050: 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  ly one of SQLITE
7060: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72  _ENABLE_STAT3 or
7070: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7080: 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66 69  TAT4 can be defi
7090: 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79  ned..** Priority
70a0: 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c   is given to SQL
70b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
70c0: 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72 65  .  If either are
70d0: 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a   defined, also.*
70e0: 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  * define SQLITE_
70f0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
7100: 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20  STAT4.*/.#ifdef 
7110: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7120: 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AT4.# undef SQLI
7130: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
7140: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7150: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
7160: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
7170: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7180: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7190: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
71a0: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
71b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
71c0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75  AT3_OR_STAT4.# u
71d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
71e0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
71f0: 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
7200: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
7210: 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68  LED will be eith
7220: 65 72 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64  er 1 or 0 depend
7230: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
7240: 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c  r not.** the Sel
7250: 65 63 74 20 71 75 65 72 79 20 67 65 6e 65 72 61  ect query genera
7260: 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69  tor tracing logi
7270: 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  c is turned on..
7280: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
7290: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
72a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
72b0: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
72c0: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
72d0: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
72e0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
72f0: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7300: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7310: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7320: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7330: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7340: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7350: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7360: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7370: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7380: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7390: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
73a0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
73b0: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
73c0: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
73d0: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
73e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
73f0: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7400: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7410: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7420: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7430: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7440: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7450: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7460: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7470: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7480: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7490: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
74a0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
74b0: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
74c0: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
74d0: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
74e0: 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74  Func)(void *,int
74f0: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
7500: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
7510: 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20  id *pArg;       
7520: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
7530: 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61  t arg to busy ca
7540: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20  llback */.  int 
7550: 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20  nBusy;          
7560: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d         /* Increm
7570: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
7580: 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a  busy call */.};.
7590: 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74  ./*.** Name of t
75a0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
75b0: 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d  se table.  The m
75c0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
75d0: 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65  able.** is a spe
75e0: 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  cial table that 
75f0: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20  holds the names 
7600: 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f  and attributes o
7610: 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61  f all.** user ta
7620: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
7630: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
7640: 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22  TER_NAME       "
7650: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23  sqlite_master".#
7660: 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54  define TEMP_MAST
7670: 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65  ER_NAME  "sqlite
7680: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f  _temp_master"../
7690: 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61  *.** The root-pa
76a0: 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  ge of the master
76b0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
76c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
76d0: 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a  ER_ROOT       1.
76e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20  ./*.** The name 
76f0: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61  of the schema ta
7700: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7710: 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20  SCHEMA_TABLE(x) 
7720: 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29   ((!OMIT_TEMPDB)
7730: 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41  &&(x==1)?TEMP_MA
7740: 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52  STER_NAME:MASTER
7750: 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  _NAME)../*.** A 
7760: 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72  convenience macr
7770: 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  o that returns t
7780: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65  he number of ele
7790: 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61  ments in.** an a
77a0: 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  rray..*/.#define
77b0: 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20   ArraySize(X)   
77c0: 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58   ((int)(sizeof(X
77d0: 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29  )/sizeof(X[0])))
77e0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
77f0: 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e if the argumen
7800: 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20  t is a power of 
7810: 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  two.*/.#define I
7820: 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28  sPowerOfTwo(X) (
7830: 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30  ((X)&((X)-1))==0
7840: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
7850: 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20  lowing value as 
7860: 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61  a destructor mea
7870: 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65  ns to use sqlite
7880: 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68  3DbFree()..** Th
7890: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
78a0: 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72  ) routine requir
78b0: 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72  es two parameter
78c0: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  s instead of the
78d0: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
78e0: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
78f0: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
7900: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
7910: 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68   introduce.** th
7920: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
7930: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
7940: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
7950: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a  ferently.  Any.*
7960: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
7970: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
7980: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
7990: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
79a0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
79b0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
79c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
79d0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
79e0: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
79f0: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
7a00: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
7a10: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
7a20: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
7a30: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
7a40: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
7a50: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
7a60: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
7a70: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
7a80: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
7a90: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
7aa0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
7ab0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
7ac0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
7ad0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
7ae0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
7af0: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
7b00: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
7b10: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
7b20: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
7b30: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
7b40: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
7b50: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
7b60: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
7b70: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
7b80: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
7b90: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
7ba0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
7bb0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
7bc0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
7bd0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
7be0: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
7bf0: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
7c00: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
7c10: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
7c20: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
7c30: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
7c40: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
7c50: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
7c60: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
7c70: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
7c80: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
7c90: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
7ca0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
7cb0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
7cc0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
7cd0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
7ce0: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
7cf0: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
7d00: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
7d10: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
7d20: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
7d30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
7d40: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
7d50: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
7d60: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
7d70: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
7d80: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
7d90: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
7da0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
7db0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
7dc0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
7dd0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
7de0: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
7df0: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
7e00: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
7e10: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
7e20: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
7e30: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
7e40: 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  WSD.  #define GL
7e50: 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64  OBAL(t,v) v.  #d
7e60: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
7e70: 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  balConfig sqlite
7e80: 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a  3Config.#endif..
7e90: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
7ea0: 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75  ing macros are u
7eb0: 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20  sed to suppress 
7ec0: 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
7ed0: 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65  s and to.** make
7ee0: 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d   it clear to hum
7ef0: 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e 20  an readers when 
7f00: 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d  a function param
7f10: 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72 61  eter is delibera
7f20: 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75  tely.** left unu
7f30: 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  sed within the b
7f40: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
7f50: 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20  n. This usually 
7f60: 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20  happens when.** 
7f70: 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  a function is ca
7f80: 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63 74  lled via a funct
7f90: 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72  ion pointer. For
7fa0: 20 65 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20   example the.** 
7fb0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
7fc0: 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61  f an SQL aggrega
7fd0: 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b  te step callback
7fe0: 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65   may not use the
7ff0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e  .** parameter in
8000: 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d  dicating the num
8010: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
8020: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 61   passed to the a
8030: 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20  ggregate,.** if 
8040: 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68  it knows that th
8050: 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65  is is enforced e
8060: 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20  lsewhere..**.** 
8070: 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  When a function 
8080: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
8090: 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74   used at all wit
80a0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
80b0: 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69  a function,.** i
80c0: 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e  t is generally n
80d0: 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f  amed "NotUsed" o
80e0: 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20  r "NotUsed2" to 
80f0: 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e  make things even
8100: 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77   clearer..** How
8110: 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72  ever, these macr
8120: 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75  os may also be u
8130: 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20  sed to suppress 
8140: 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64  warnings related
8150: 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72   to.** parameter
8160: 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61  s that may or ma
8170: 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65  y not be used de
8180: 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69  pending on compi
8190: 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a  lation options..
81a0: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74  ** For example t
81b0: 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73 20  hose parameters 
81c0: 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73  only used in ass
81d0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
81e0: 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61  . In these.** ca
81f0: 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74 65  ses the paramete
8200: 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20  rs are named as 
8210: 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f  per the usual co
8220: 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  nventions..*/.#d
8230: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
8240: 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64 29  AMETER(x) (void)
8250: 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53  (x).#define UNUS
8260: 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c  ED_PARAMETER2(x,
8270: 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  y) UNUSED_PARAME
8280: 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41  TER(x),UNUSED_PA
8290: 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a  RAMETER(y)../*.*
82a0: 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65  * Forward refere
82b0: 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75 72  nces to structur
82c0: 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  es.*/.typedef st
82d0: 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67  ruct AggInfo Agg
82e0: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
82f0: 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
8300: 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79   AuthContext;.ty
8310: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74  pedef struct Aut
8320: 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63  oincInfo Autoinc
8330: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
8340: 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74 76  ruct Bitvec Bitv
8350: 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ec;.typedef stru
8360: 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53  ct CollSeq CollS
8370: 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  eq;.typedef stru
8380: 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e  ct Column Column
8390: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
83a0: 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20   Db Db;.typedef 
83b0: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53 63  struct Schema Sc
83c0: 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74  hema;.typedef st
83d0: 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a  ruct Expr Expr;.
83e0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
83f0: 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74  xprList ExprList
8400: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8410: 20 45 78 70 72 53 70 61 6e 20 45 78 70 72 53 70   ExprSpan ExprSp
8420: 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  an;.typedef stru
8430: 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79  ct FKey FKey;.ty
8440: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8450: 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63  cDestructor Func
8460: 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65  Destructor;.type
8470: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
8480: 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65  ef FuncDef;.type
8490: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
84a0: 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48 61  efHash FuncDefHa
84b0: 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  sh;.typedef stru
84c0: 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74  ct IdList IdList
84d0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
84e0: 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79   Index Index;.ty
84f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64  pedef struct Ind
8500: 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61  exSample IndexSa
8510: 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  mple;.typedef st
8520: 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65  ruct KeyClass Ke
8530: 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20  yClass;.typedef 
8540: 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b  struct KeyInfo K
8550: 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20  eyInfo;.typedef 
8560: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
8570: 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65   Lookaside;.type
8580: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
8590: 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69  sideSlot Lookasi
85a0: 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20  deSlot;.typedef 
85b0: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f  struct Module Mo
85c0: 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  dule;.typedef st
85d0: 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
85e0: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79   NameContext;.ty
85f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61 72  pedef struct Par
8600: 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65  se Parse;.typede
8610: 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64 61  f struct PreUpda
8620: 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79  te PreUpdate;.ty
8630: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69  pedef struct Pri
8640: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69  ntfArguments Pri
8650: 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79  ntfArguments;.ty
8660: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
8670: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
8680: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
8690: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
86a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
86b0: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
86c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
86d0: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
86e0: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
86f0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
8700: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
8710: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
8720: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
8730: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
8740: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
8750: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
8760: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
8770: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
8780: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
8790: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
87a0: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
87b0: 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56  def struct TreeV
87c0: 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79  iew TreeView;.ty
87d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
87e0: 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79  gger Trigger;.ty
87f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8800: 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50  ggerPrg TriggerP
8810: 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rg;.typedef stru
8820: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
8830: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
8840: 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63  def struct Unpac
8850: 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b  kedRecord Unpack
8860: 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65  edRecord;.typede
8870: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
8880: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
8890: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
88a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
88b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
88c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
88d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
88e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
88f0: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
8900: 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  th;../*.** Defer
8910: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
8920: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
8930: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
8940: 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61  " and.** "BusyHa
8950: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
8960: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
8970: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
8980: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
8990: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
89a0: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
89b0: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
89c0: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
89d0: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
89e0: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
89f0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
8a00: 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ache.h".#include
8a10: 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "os.h".#include
8a20: 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54   "mutex.h"../* T
8a30: 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  he SQLITE_EXTRA_
8a40: 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d  DURABLE compile-
8a50: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
8a60: 20 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61   to set the defa
8a70: 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f  ult.** synchrono
8a80: 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58  us setting to EX
8a90: 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c  TRA.  It is no l
8aa0: 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e  onger supported.
8ab0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
8ac0: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
8ad0: 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51  # warning Use SQ
8ae0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
8af0: 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65  CHRONOUS=3 inste
8b00: 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54  ad of SQLITE_EXT
8b10: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66  RA_DURABLE.# def
8b20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
8b30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33  LT_SYNCHRONOUS 3
8b40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
8b50: 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f  efault synchrono
8b60: 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a  us levels..**.**
8b70: 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20   Note that (for 
8b80: 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e  historcal reason
8b90: 73 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e  s) the PAGER_SYN
8ba0: 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f  CHRONOUS_* macro
8bb0: 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d  s differ.** from
8bc0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   the SQLITE_DEFA
8bd0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
8be0: 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a  value by 1..**.*
8bf0: 2a 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45  *           PAGE
8c00: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20  R_SYNCHRONOUS   
8c10: 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43      DEFAULT_SYNC
8c20: 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46  HRONOUS.**   OFF
8c30: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c50: 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d       0.**   NORM
8c60: 41 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20  AL        2     
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20      1.**   FULL 
8c90: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cb0: 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20     2.**   EXTRA 
8cc0: 20 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20          4       
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ce0: 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50    3.**.** The "P
8cf0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
8d00: 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73  s" statement als
8d10: 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d  o uses the zero-
8d20: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a  based numbers..*
8d30: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
8d40: 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  , the zero-based
8d50: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
8d60: 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e  d for all extern
8d70: 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a  al interfaces.**
8d80: 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73   and the one-bas
8d90: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ed values are us
8da0: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a  ed internally..*
8db0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
8dc0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8dd0: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
8de0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
8df0: 43 48 52 4f 4e 4f 55 53 20 28 50 41 47 45 52 5f  CHRONOUS (PAGER_
8e00: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 46 55 4c 4c  SYNCHRONOUS_FULL
8e10: 2d 31 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  -1).#endif.#ifnd
8e20: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
8e30: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
8e40: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
8e50: 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59  E_DEFAULT_WAL_SY
8e60: 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45  NCHRONOUS SQLITE
8e70: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8e80: 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NOUS.#endif../*.
8e90: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
8ea0: 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65   file to be acce
8eb0: 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74  ssed by the syst
8ec0: 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  em is an instanc
8ed0: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c  e.** of the foll
8ee0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
8ef0: 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d    There are norm
8f00: 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73  ally two of thes
8f10: 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20  e structures.** 
8f20: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44  in the sqlite.aD
8f30: 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b  b[] array.  aDb[
8f40: 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  0] is the main d
8f50: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
8f60: 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68  .** aDb[1] is th
8f70: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
8f80: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d  used to hold tem
8f90: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
8fa0: 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61  Additional.** da
8fb0: 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61  tabases may be a
8fc0: 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75  ttached..*/.stru
8fd0: 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a  ct Db {.  char *
8fe0: 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f  zDbSName;      /
8ff0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64  * Name of this d
9000: 61 74 61 62 61 73 65 2e 20 28 73 63 68 65 6d 61  atabase. (schema
9010: 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e   name, not filen
9020: 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65 65 20  ame) */.  Btree 
9030: 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f  *pBt;          /
9040: 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72  * The B*Tree str
9050: 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20  ucture for this 
9060: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
9070: 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76  .  u8 safety_lev
9080: 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61  el;     /* How a
9090: 67 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e  ggressive at syn
90a0: 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73  cing data to dis
90b0: 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e 63 53  k */.  u8 bSyncS
90c0: 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  et;         /* T
90d0: 72 75 65 20 69 66 20 22 50 52 41 47 4d 41 20 73  rue if "PRAGMA s
90e0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61  ynchronous=N" ha
90f0: 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20  s been run */.  
9100: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
9110: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
9120: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
9130: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
9140: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
9150: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
9160: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9170: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
9180: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
9190: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
91a0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
91b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
91c0: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
91d0: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
91e0: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
91f0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
9200: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
9210: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
9220: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
9230: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
9240: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
9250: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
9260: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
9270: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
9280: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
9290: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
92a0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
92b0: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  **.** Schema obj
92c0: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
92d0: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
92e0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
92f0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
9300: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
9310: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
9320: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
9330: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
9340: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
9350: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
9360: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
9370: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
9380: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
9390: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
93a0: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
93b0: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
93c0: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
93d0: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
93e0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
93f0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
9400: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
9410: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
9420: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
9430: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
9440: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
9450: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
9460: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
9470: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
9480: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
9490: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
94a0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
94b0: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
94c0: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
94d0: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
94e0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
94f0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
9500: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
9510: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
9520: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
9530: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
9540: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
9550: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
9560: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
9570: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
9580: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
9590: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
95a0: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
95b0: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
95c0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
95d0: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
95e0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
95f0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
9600: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
9610: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
9620: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
9630: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
9640: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
9650: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
9660: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
9670: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
9680: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
9690: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
96a0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
96c0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
96d0: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
96e0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
96f0: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
9700: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
9710: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
9720: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
9730: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
9740: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
9750: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
9760: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
9770: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
9780: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
9790: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
97a0: 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44  bits in the.** D
97b0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
97c0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
97d0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
97e0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
97f0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
9800: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
9810: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
9820: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
9830: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
9840: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
9850: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
9860: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
9870: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
9880: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
9890: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
98a0: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
98b0: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
98c0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
98d0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
98e0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
98f0: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
9900: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
9910: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
9920: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
9930: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
9940: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
9950: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
9960: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
9970: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
9980: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
9990: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
99a0: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
99b0: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
99c0: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
99d0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
99e0: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
99f0: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
9a00: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
9a10: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
9a20: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
9a30: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
9a40: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
9a50: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
9a60: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
9a70: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
9a80: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
9a90: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
9aa0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
9ab0: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
9ac0: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
9ad0: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
9ae0: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
9af0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
9b00: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
9b10: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
9b20: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
9b30: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
9b40: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
9b50: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
9b60: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
9b70: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
9b80: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
9b90: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
9ba0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
9bb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
9bc0: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
9bd0: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
9be0: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
9bf0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
9c00: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
9c10: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
9c20: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
9c30: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
9c40: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
9c50: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
9c60: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
9c70: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
9c80: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
9c90: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
9ca0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
9cb0: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
9cc0: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
9cd0: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
9ce0: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
9cf0: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
9d00: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
9d10: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
9d20: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
9d30: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
9d40: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
9d50: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
9d60: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
9d70: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
9d80: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
9d90: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
9da0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
9db0: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
9dc0: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
9dd0: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
9de0: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
9df0: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
9e00: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
9e10: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
9e20: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
9e30: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
9e40: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
9e50: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
9e60: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
9e70: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
9e80: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
9e90: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
9ea0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
9eb0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
9ec0: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
9ed0: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
9ee0: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
9ef0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
9f00: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
9f10: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
9f20: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
9f30: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9f40: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
9f50: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
9f60: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
9f70: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
9f80: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
9f90: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
9fa0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
9fb0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
9fc0: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
9fd0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
9fe0: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
9ff0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
a000: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
a010: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
a020: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
a030: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
a040: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
a050: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a060: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
a070: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
a080: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
a090: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
a0a0: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
a0b0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
a0c0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
a0d0: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20  */.  int nOut;  
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a0f0: 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72  Number of buffer
a100: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
a110: 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74  ked out */.  int
a120: 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20   mxOut;         
a130: 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65       /* Highwate
a140: 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20  r mark for nOut 
a150: 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b  */.  int anStat[
a160: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
a170: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
a180: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
a190: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
a1a0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46  ookasideSlot *pF
a1b0: 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ree;   /* List o
a1c0: 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66  f available buff
a1d0: 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
a1e0: 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
a1f0: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f   /* First byte o
a200: 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  f available memo
a210: 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ry space */.  vo
a220: 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  id *pEnd;       
a230: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
a240: 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20  yte past end of 
a250: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
a260: 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f  */.};.struct Loo
a270: 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c  kasideSlot {.  L
a280: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e  ookasideSlot *pN
a290: 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  ext;    /* Next 
a2a0: 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69  buffer in the li
a2b0: 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65  st of free buffe
a2c0: 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
a2d0: 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72  A hash table for
a2e0: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
a2f0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20  on definitions. 
a300: 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65   (Application-de
a310: 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f  fined.** functio
a320: 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c 61 72  ns use a regular
a330: 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f   table table fro
a340: 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a  m hash.h.).**.**
a350: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
a360: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
a370: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
a380: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
a390: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
a3a0: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
a3b0: 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61  cDef.u.pHash cha
a3c0: 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  in..*/.#define S
a3d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
a3e0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
a3f0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
a400: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
a410: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
a420: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
a430: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
a440: 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  */.};..#ifdef SQ
a450: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
a460: 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49  TICATION./*.** I
a470: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20  nformation held 
a480: 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22  in the "sqlite3"
a490: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
a4a0: 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  tion object and 
a4b0: 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67  used.** to manag
a4c0: 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63  e user authentic
a4d0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ation..*/.typede
a4e0: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
a4f0: 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65  _userauth sqlite
a500: 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75  3_userauth;.stru
a510: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
a520: 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c  uth {.  u8 authL
a530: 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
a540: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
a550: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
a560: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e  level */.  int n
a570: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
a580: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
a590: 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20   of the zAuthPW 
a5a0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68  in bytes */.  ch
a5b0: 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20  ar *zAuthPW;    
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
a5d0: 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20  assword used to 
a5e0: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
a5f0: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65    char *zAuthUse
a600: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
a610: 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65  /* User name use
a620: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
a630: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  e */.};../* Allo
a640: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
a650: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e  qlite3_userauth.
a660: 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65  authLevel */.#de
a670: 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f  fine UAUTH_Unkno
a680: 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20  wn     0     /* 
a690: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e  Authentication n
a6a0: 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a  ot yet checked *
a6b0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
a6c0: 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20  Fail        1   
a6d0: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
a6e0: 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  tication failed 
a6f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
a700: 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20  _User        2  
a710: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
a720: 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20  ted as a normal 
a730: 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  user */.#define 
a740: 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20  UAUTH_Admin     
a750: 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65    3     /* Authe
a760: 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61  nticated as an a
a770: 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a  dministrator */.
a780: 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73  ./* Functions us
a790: 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20  ed only by user 
a7a0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f  authorization lo
a7b0: 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  gic */.int sqlit
a7c0: 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28  e3UserAuthTable(
a7d0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
a7e0: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
a7f0: 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69  hCheckLogin(sqli
a800: 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
a810: 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u8*);.void sqli
a820: 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28  te3UserAuthInit(
a830: 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
a840: 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63  sqlite3CryptFunc
a850: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a860: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
a870: 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  lue**);..#endif 
a880: 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  /* SQLITE_USER_A
a890: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f  UTHENTICATION */
a8a0: 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20  ../*.** typedef 
a8b0: 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a  for the authoriz
a8c0: 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66  ation callback f
a8d0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  unction..*/.#ifd
a8e0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
a8f0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
a900: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
a910: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
a920: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
a930: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
a940: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
a950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a960: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
a970: 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
a980: 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79  ar*);.#else.  ty
a990: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
a9a0: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
a9b0: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
a9c0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
a9d0: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
a9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9f0: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
aa00: 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
aa10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
aa20: 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a  IT_DEPRECATED./*
aa30: 20 54 68 69 73 20 69 73 20 61 6e 20 65 78 74 72   This is an extr
aa40: 61 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d  a SQLITE_TRACE m
aa50: 61 63 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61  acro that indica
aa60: 74 65 73 20 22 6c 65 67 61 63 79 22 20 74 72 61  tes "legacy" tra
aa70: 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73  cing.** in the s
aa80: 74 79 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f  tyle of sqlite3_
aa90: 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69  trace().*/.#defi
aaa0: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
aab0: 4c 45 47 41 43 59 20 20 30 78 38 30 0a 23 65 6c  LEGACY  0x80.#el
aac0: 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  se.#define SQLIT
aad0: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
aae0: 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  0.#endif /* SQLI
aaf0: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
ab00: 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ED */.../*.** Ea
ab10: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
ab20: 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73  ection is an ins
ab30: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
ab40: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
ab50: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
ab60: 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te3 {.  sqlite3_
ab70: 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20  vfs *pVfs;      
ab80: 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65        /* OS Inte
ab90: 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63  rface */.  struc
aba0: 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20  t Vdbe *pVdbe;  
abb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
abc0: 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75   of active virtu
abd0: 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20  al machines */. 
abe0: 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43   CollSeq *pDfltC
abf0: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
ac00: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  * The default co
ac10: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
ac20: 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73   (BINARY) */.  s
ac30: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
ac40: 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  tex;         /* 
ac50: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  Connection mutex
ac60: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
ac70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac80: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
ac90: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62  nds */.  int nDb
aca0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
acb0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
acc0: 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72   of backends cur
acd0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
ace0: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75   /* Miscellaneou
ad10: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
ad20: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  ow */.  i64 last
ad30: 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  Rowid;          
ad40: 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f        /* ROWID o
ad50: 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  f most recent in
ad60: 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29  sert (see above)
ad70: 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70   */.  i64 szMmap
ad80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ad90: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d      /* Default m
ada0: 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67  map_size setting
adb0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
adc0: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
add0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
ade0: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
adf0: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
ae00: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ae20: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
ae30: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
ae40: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
ae50: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
ae60: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
ae70: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
ae80: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
ae90: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
aea0: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
aeb0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
aec0: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
aed0: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
aee0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
af00: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
af10: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
af20: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
af30: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
af40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
af50: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
af60: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
af80: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
af90: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
afa0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
afb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
afc0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
afd0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
afe0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b000: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
b010: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
b020: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
b030: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
b040: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
b050: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
b060: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
b070: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
b080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
b090: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
b0a0: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
b0b0: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
b0c0: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
b0d0: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
b0e0: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
b0f0: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
b100: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
b110: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
b120: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
b130: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
b140: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
b150: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
b160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
b170: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
b180: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
b190: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
b1a0: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
b1b0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
b1c0: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
b1d0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
b1e0: 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d  s a TS */.  u8 m
b1f0: 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20  Trace;          
b200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72            /* zer
b210: 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45  o or more SQLITE
b220: 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a  _TRACE flags */.
b230: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
b240: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
b250: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
b260: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
b270: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b290: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
b2a0: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
b2b0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
b2c0: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b2e0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
b2f0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
b300: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
b310: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
b320: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
b330: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
b340: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
b350: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
b360: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
b370: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
b380: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
b390: 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20  SorterMmap;     
b3a0: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
b3b0: 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73   size of regions
b3c0: 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65   mapped by sorte
b3d0: 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  r */.  struct sq
b3e0: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
b3f0: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
b400: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
b410: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
b420: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
b430: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
b440: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
b450: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
b460: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
b470: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
b480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
b490: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
b4a0: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
b4b0: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
b4c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b4d0: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
b4e0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
b4f0: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
b500: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
b510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
b520: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
b530: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
b540: 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69  gger */.    u8 i
b550: 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20  mposterTable;   
b560: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64          /* Build
b570: 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20  ing an imposter 
b580: 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69  table */.  } ini
b590: 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63  t;.  int nVdbeAc
b5a0: 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20  tive;           
b5b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b5c0: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
b5d0: 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  running */.  int
b5e0: 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20   nVdbeRead;     
b5f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b600: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b610: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f  DBEs that read o
b620: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  r write */.  int
b630: 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20   nVdbeWrite;    
b640: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b650: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b660: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61  DBEs that read a
b670: 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  nd write */.  in
b680: 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20  t nVdbeExec;    
b690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b6a0: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
b6b0: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
b6c0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44  c() */.  int nVD
b6d0: 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20  estroy;         
b6e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b6f0: 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44   of active OP_VD
b700: 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
b710: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  s */.  int nExte
b720: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
b730: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
b740: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
b750: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
b760: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
b770: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
b780: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
b790: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69  y handles */.  i
b7a0: 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32  nt (*xTrace)(u32
b7b0: 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69  ,void*,void*,voi
b7c0: 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63  d*);     /* Trac
b7d0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
b7e0: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b810: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
b820: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
b830: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
b840: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
b850: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
b860: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
b870: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
b880: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8a0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
b8b0: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
b8c0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
b8d0: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
b8e0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
b8f0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
b900: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74  lback() */.  int
b910: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
b920: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
b930: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
b940: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
b950: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
b960: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
b970: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
b980: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
b990: 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ck() */.  void (
b9a0: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
b9b0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
b9c0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
b9d0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
b9e0: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
b9f0: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
ba00: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
ba10: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
ba20: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
ba30: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65  te_int64);.#ifde
ba40: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
ba50: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
ba60: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
ba70: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
ba80: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
ba90: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
baa0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
bab0: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
bac0: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
bad0: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
bae0: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
baf0: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
bb00: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
bb10: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
bb20: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
bb30: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
bb40: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
bb50: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
bb60: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
bb70: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
bb80: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
bb90: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
bba0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
bbb0: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
bbc0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bbd0: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
bbe0: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
bbf0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
bc00: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
bc10: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
bc20: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
bc30: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
bc40: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
bc50: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
bc60: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
bc70: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
bc80: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
bc90: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
bca0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
bcb0: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
bcc0: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
bcd0: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
bce0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
bcf0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
bd00: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
bd10: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
bd20: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
bd30: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
bd40: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
bd50: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
bd60: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
bd70: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
bd80: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
bd90: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
bda0: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
bdb0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
bdc0: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
bdd0: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
bde0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
bdf0: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
be00: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
be10: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
be20: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
be30: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
be40: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
be50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be60: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
be70: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
be80: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
be90: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
bea0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
beb0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
bec0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
bed0: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
bee0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
bef0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
bf00: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
bf10: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
bf20: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
bf30: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
bf40: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
bf50: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
bf60: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
bf70: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
bf80: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
bf90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
bfa0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
bfb0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
bfc0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
bfd0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
bfe0: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
bff0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
c000: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
c010: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
c020: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
c030: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
c040: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
c050: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
c060: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
c070: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
c080: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
c090: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
c0a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c0b0: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
c0c0: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
c0d0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
c0e0: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
c0f0: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
c100: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
c110: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
c120: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61  ) */.#endif.  Ha
c130: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
c140: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
c150: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
c160: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
c170: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
c180: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
c190: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
c1a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
c1b0: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
c1c0: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
c1d0: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
c1e0: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
c1f0: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
c200: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
c210: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
c220: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
c230: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
c240: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
c250: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
c260: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
c270: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
c280: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
c290: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
c2a0: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
c2b0: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
c2c0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
c2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c2e0: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
c2f0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
c300: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
c310: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
c320: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c330: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
c340: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
c350: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
c360: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
c370: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
c380: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
c390: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
c3a0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
c3b0: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
c3c0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
c3d0: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
c3e0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
c3f0: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
c400: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c410: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
c420: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
c430: 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65  bFree() */.#ifde
c440: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
c450: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
c460: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
c470: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
c480: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
c490: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
c4a0: 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f  R.  ** mutex, no
c4b0: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
c4c0: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
c4d0: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
c4e0: 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ify.c..  **.  **
c4f0: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
c500: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
c510: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
c520: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
c530: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
c540: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
c550: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
c560: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
c570: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
c580: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
c590: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
c5a0: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
c5b0: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
c5c0: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
c5d0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
c5e0: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
c5f0: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
c600: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
c610: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
c620: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
c630: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
c640: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
c650: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
c660: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
c670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
c680: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
c690: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
c6a0: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
c6b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c6c0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c6d0: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
c6e0: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
c6f0: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
c700: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
c710: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
c720: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
c730: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
c740: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
c750: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
c760: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
c770: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
c780: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
c790: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
c7a0: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
c7b0: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
c7c0: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
c7d0: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
c7e0: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
c7f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
c800: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
c810: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
c820: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
c830: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
c840: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
c850: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
c860: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
c870: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
c880: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
c890: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
c8a0: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
c8b0: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
c8c0: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
c8d0: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
c8e0: 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  :.**      SQLITE
c8f0: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d  _FullFSync     =
c900: 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e  = PAGER_FULLFSYN
c910: 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  C.**      SQLITE
c920: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d  _CkptFullFSync =
c930: 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  = PAGER_CKPT_FUL
c940: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
c950: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
c960: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43      == PAGER_CAC
c970: 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66  HE_SPILL.*/.#def
c980: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
c990: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
c9a0: 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f  0001  /* True to
c9b0: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
c9c0: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
c9d0: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
c9e0: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30  anges  0x0000000
c9f0: 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  2  /* Uncommitte
ca00: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
ca10: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
ca20: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
ca30: 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34  mes   0x00000004
ca40: 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63    /* Show full c
ca50: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53  olumn names on S
ca60: 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  ELECT */.#define
ca70: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
ca80: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
ca90: 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  8  /* Use full f
caa0: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
cab0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
cac0: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
cad0: 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20  ync  0x00000010 
cae0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
caf0: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
cb00: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
cb10: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
cb20: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
cb30: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
cb40: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
cb50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72  fine SQLITE_Shor
cb60: 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30  tColNames  0x000
cb70: 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73  00040  /* Show s
cb80: 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d  hort columns nam
cb90: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cba0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20  LITE_CountRows  
cbb0: 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20      0x00000080  
cbc0: 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68  /* Count rows ch
cbd0: 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c  anged by INSERT,
cbe0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cc10: 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50     DELETE, or UP
cc20: 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20  DATE and return 
cc30: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cc60: 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e    the count usin
cc70: 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f  g a callback. */
cc80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cc90: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30  NullCallback   0
cca0: 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e  x00000100  /* In
ccb0: 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63  voke the callbac
ccc0: 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f  k once if the */
ccd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
cd00: 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
cd10: 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
cd20: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
cd30: 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20       0x00000200 
cd40: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
cd50: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
cd60: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cd70: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
cd80: 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20      0x00000400  
cd90: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
cda0: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
cdb0: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
cdc0: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
cdd0: 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20      0x00000800  
cde0: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
cdf0: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
ce00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ce10: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30  VdbeAddopTrace 0
ce20: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72  x00001000  /* Tr
ce30: 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41  ace sqlite3VdbeA
ce40: 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  ddOp() calls */.
ce50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
ce60: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
ce70: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20  00002000  /* Do 
ce80: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
ce90: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
cea0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ceb0: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
cec0: 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f  0x0004000  /* Fo
ced0: 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
cee0: 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
cef0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
cf00: 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20  Fmt  0x00008000 
cf10: 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64   /* Create new d
cf20: 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d  atabases in form
cf30: 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20  at 1 */.#define 
cf40: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
cf50: 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30  ode   0x00010000
cf60: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
cf70: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
cf80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
cf90: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
cfa0: 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  20000  /* Revers
cfb0: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
cfc0: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
cfd0: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
cfe0: 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20  s    0x00040000 
cff0: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
d000: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
d010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d020: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
d030: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e  x00080000  /* En
d040: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
d050: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
d060: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d070: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
d080: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45  0x00100000  /* E
d090: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
d0a0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
d0b0: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
d0c0: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30  Builtin  0x00200
d0d0: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
d0e0: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
d0f0: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
d100: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
d110: 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30  sion  0x00400000
d120: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
d130: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
d140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
d150: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
d160: 38 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  800000  /* Enabl
d170: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
d180: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
d190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
d1a0: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
d1b0: 31 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  1000000  /* True
d1c0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
d1d0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
d1e0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
d1f0: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
d200: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
d210: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d220: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
d230: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
d240: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  04000000  /* Dis
d250: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
d260: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
d270: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
d280: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
d290: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
d2a0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
d2b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d2c0: 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20  _Vacuum         
d2d0: 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43  0x10000000  /* C
d2e0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41  urrently in a VA
d2f0: 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20  CUUM */.#define 
d300: 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43  SQLITE_CellSizeC
d310: 6b 20 20 20 20 20 30 78 32 30 30 30 30 30 30 30  k     0x20000000
d320: 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65    /* Check btree
d330: 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c   cell sizes on l
d340: 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  oad */.#define S
d350: 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69  QLITE_Fts3Tokeni
d360: 7a 65 72 20 20 30 78 34 30 30 30 30 30 30 30 20  zer  0x40000000 
d370: 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f   /* Enable fts3_
d380: 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a  tokenizer(2) */.
d390: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
d3a0: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
d3b0: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
d3c0: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
d3d0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
d3e0: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
d3f0: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
d400: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
d410: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
d420: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
d430: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
d440: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
d450: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
d460: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
d470: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
d480: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
d490: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
d4a0: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
d4b0: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
d4c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d4d0: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
d4e0: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
d4f0: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
d500: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
d510: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
d520: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
d530: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
d540: 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20  oring */./*     
d550: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75             not u
d560: 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20  sed    0x0010   
d570: 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49  // Was: SQLITE_I
d580: 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23  dxRealAsInt */.#
d590: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
d5a0: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
d5b0: 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  020   /* DISTINC
d5c0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
d5d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d5e0: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
d5f0: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76   0x0040   /* Cov
d600: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
d610: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d620: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
d630: 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f  in 0x0080   /* O
d640: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
d650: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
d660: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62  efine SQLITE_Sub
d670: 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31  qCoroutine  0x01
d680: 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65  00   /* Evaluate
d690: 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63   subqueries as c
d6a0: 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65  oroutines */.#de
d6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
d6c0: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30  sitive     0x020
d6d0: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
d6e0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d6f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d700: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
d710: 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0400   /* Omit 
d720: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
d730: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
d740: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20  e SQLITE_Stat34 
d750: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
d760: 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72   /* Use STAT3 or
d770: 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23   STAT4 data */.#
d780: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
d790: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32  rsorHints    0x2
d7a0: 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  000   /* Add OP_
d7b0: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
d7c0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
d7d0: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
d7e0: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
d7f0: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
d800: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
d810: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
d820: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
d830: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
d840: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
d850: 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  led..*/.#ifndef 
d860: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
d870: 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65  TIN_TEST.#define
d880: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
d890: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
d8a0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
d8b0: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
d8c0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
d8d0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
d8e0: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
d8f0: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
d900: 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65  ))==0).#else.#de
d910: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
d920: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
d930: 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f  sk)  0.#define O
d940: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
d950: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31  ed(db, mask)   1
d960: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
d970: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
d980: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
d990: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
d9a0: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
d9b0: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
d9c0: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
d9d0: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
d9e0: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
d9f0: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
da00: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
da10: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
da20: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
da30: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
da40: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
da50: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
da60: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
da70: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
da80: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
da90: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
daa0: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
dab0: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
dac0: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
dad0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
dae0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
daf0: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
db00: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
db10: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
db20: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
db30: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
db40: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
db50: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
db60: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
db70: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
db80: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
db90: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
dba0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dbb0: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
dbc0: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
dbd0: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
dbe0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
dbf0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
dc00: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
dc10: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
dc20: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
dc30: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
dc40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
dc50: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
dc60: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
dc70: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
dc80: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
dc90: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
dca0: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
dcb0: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
dcc0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
dcd0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  * structure.  Fo
dce0: 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  r global built-i
dcf0: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a  n functions (ex:
dd00: 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29   substr(), max()
dd10: 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20  , count()).** a 
dd20: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
dd30: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
dd40: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
dd50: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
dd60: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20   object..** For 
dd70: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
dd80: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
dd90: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20  ed functions, a 
dda0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a  pointer to this.
ddb0: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ** structure is 
ddc0: 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e  held in the db->
ddd0: 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65  aHash hash table
dde0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48  ..**.** The u.pH
ddf0: 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65  ash field is use
de00: 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20  d by the global 
de10: 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20  built-ins.  The 
de20: 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  u.pDestructor.**
de30: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
de40: 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  y per-connection
de50: 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f   app-def functio
de60: 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ns..*/.struct Fu
de70: 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72  ncDef {.  i8 nAr
de80: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
de90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
dea0: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
deb0: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
dec0: 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u16 funcFlags;  
ded0: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
dee0: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
def0: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
df00: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
df10: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
df20: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
df30: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
df40: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
df50: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
df60: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
df70: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
df80: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
df90: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
dfa0: 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73  /* func or agg-s
dfb0: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
dfc0: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
dfd0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dff0: 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20  * Agg finalizer 
e000: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
e010: 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c  *zName;   /* SQL
e020: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
e030: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f  ction. */.  unio
e040: 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  n {.    FuncDef 
e050: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
e060: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
e070: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
e080: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
e090: 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63 74      FuncDestruct
e0a0: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
e0b0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
e0c0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
e0d0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
e0e0: 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } u;.};../*.** 
e0f0: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
e100: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
e110: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
e120: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
e130: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
e140: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
e150: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
e160: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
e170: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
e180: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
e190: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
e1a0: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
e1b0: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
e1c0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
e1d0: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
e1e0: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
e1f0: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
e200: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
e210: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
e220: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
e230: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
e240: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
e250: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
e260: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
e270: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
e280: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
e290: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
e2a0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
e2b0: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
e2c0: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
e2d0: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
e2e0: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
e2f0: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
e300: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
e310: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
e320: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
e330: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
e340: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
e350: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
e360: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
e370: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
e380: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
e390: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
e3a0: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
e3b0: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
e3c0: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
e3d0: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
e3e0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
e3f0: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
e400: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e410: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
e420: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
e430: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
e440: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
e450: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
e460: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
e470: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
e480: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
e490: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
e4a0: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
e4b0: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
e4c0: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
e4d0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
e4e0: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
e4f0: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
e500: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
e510: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
e520: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
e530: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
e540: 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  his..**.** Value
e550: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
e560: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
e570: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c  t()):.**     SQL
e580: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
e590: 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78     ==  NC_MinMax
e5a0: 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d  Agg      == SF_M
e5b0: 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20  inMaxAgg.**     
e5c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
e5d0: 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  TH    ==  OPFLAG
e5e0: 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20  _LENGTHARG.**   
e5f0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59    SQLITE_FUNC_TY
e600: 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c  PEOF    ==  OPFL
e610: 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20  AG_TYPEOFARG.** 
e620: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
e630: 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51  CONSTANT  ==  SQ
e640: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
e650: 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a  IC from the API.
e660: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
e670: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70  NC_ENCMASK   dep
e680: 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55  ends on SQLITE_U
e690: 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68  TF* macros in th
e6a0: 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65  e API.*/.#define
e6b0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
e6c0: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
e6d0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
e6e0: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
e6f0: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
e700: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
e710: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
e720: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
e730: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
e740: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e750: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
e760: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
e770: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
e780: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
e790: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e7a0: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
e7b0: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
e7c0: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
e7d0: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
e7e0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
e7f0: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
e800: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
e810: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
e820: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
e830: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e840: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
e850: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
e860: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
e870: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e880: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
e890: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
e8a0: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
e8b0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e8c0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
e8d0: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
e8e0: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
e8f0: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
e900: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e910: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
e920: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
e930: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
e940: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
e950: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
e960: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
e970: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
e980: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
e990: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
e9a0: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
e9b0: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
e9c0: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
e9d0: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
e9e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
e9f0: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
ea00: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
ea10: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
ea20: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
ea30: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ea40: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
ea50: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
ea60: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
ea70: 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
eaa0: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
eab0: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
eac0: 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r time */../*.**
ead0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
eae0: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
eaf0: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
eb00: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
eb10: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
eb20: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
eb30: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
eb40: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
eb50: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
eb60: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
eb70: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
eb80: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
eb90: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
eba0: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
ebb0: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
ebc0: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
ebd0: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
ebe0: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
ebf0: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
ec00: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
ec10: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
ec20: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
ec30: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
ec40: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
ec50: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
ec60: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
ec70: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
ec80: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
ec90: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
eca0: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
ecb0: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
ecc0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
ecd0: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
ece0: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
ecf0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
ed00: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ed10: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
ed20: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
ed30: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
ed40: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
ed50: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
ed60: 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
ed70: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
ed80: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
ed90: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
eda0: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
edb0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
edc0: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
edd0: 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
ede0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
edf0: 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
ee00: 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
ee10: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
ee20: 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
ee30: 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
ee40: 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
ee50: 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
ee60: 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
ee70: 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a  single query..**
ee80: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
ee90: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
eea0: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
eeb0: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
eec0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
eed0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
eee0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
eef0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
ef00: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
ef10: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
ef20: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
ef30: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
ef40: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
ef50: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
ef60: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
ef70: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
ef80: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
ef90: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
efa0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
efb0: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
efc0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
efd0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
efe0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
eff0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
f000: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
f010: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
f020: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
f030: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
f040: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
f050: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
f060: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
f070: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
f080: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
f090: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
f0a0: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
f0b0: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
f0c0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
f0d0: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
f0e0: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
f0f0: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
f100: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
f110: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
f120: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
f130: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
f140: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
f150: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
f160: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
f170: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
f180: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
f190: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
f1a0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
f1b0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
f1c0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
f1d0: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
f1e0: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
f1f0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
f200: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
f210: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
f220: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
f230: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
f240: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
f250: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
f260: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
f270: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
f280: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
f290: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f2a0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f2b0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
f2c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
f2d0: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
f2e0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
f2f0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
f300: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
f310: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
f320: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
f330: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  0} }.#define FUN
f340: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
f350: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
f360: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
f370: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
f380: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f390: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
f3a0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
f3b0: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
f3c0: 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
f3d0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
f3e0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
f3f0: 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
f400: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
f410: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
f420: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
f430: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
f440: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
f450: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
f460: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f470: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
f480: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
f490: 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
f4a0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
f4b0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
f4c0: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
f4d0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f4e0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
f4f0: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
f500: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
f510: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
f520: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
f530: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
f540: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
f550: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
f560: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
f570: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
f580: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
f590: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
f5a0: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
f5b0: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
f5c0: 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
f5d0: 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d   AGGREGATE2(zNam
f5e0: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
f5f0: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c  , xStep, xFinal,
f600: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
f610: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
f620: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
f630: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
f640: 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53  traFlags, \.   S
f650: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
f660: 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
f670: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b  xFinal,#zName, {
f680: 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  0}}../*.** All c
f690: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
f6a0: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
f6b0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
f6c0: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
f6d0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
f6e0: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
f6f0: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
f700: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
f710: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
f720: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
f730: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
f740: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
f750: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
f760: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
f770: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
f780: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
f790: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f7b0: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
f7c0: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
f7d0: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
f7e0: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
f7f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f800: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
f810: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
f820: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
f830: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
f840: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f850: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
f860: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
f870: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f890: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
f8a0: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
f8b0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
f8c0: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
f8d0: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
f8e0: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
f8f0: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
f900: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
f910: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
f920: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
f930: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
f940: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
f950: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
f960: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
f970: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
f980: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
f990: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
f9a0: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
f9b0: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
f9c0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
f9d0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
f9e0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
f9f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
fa00: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
fa10: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
fa20: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
fa30: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
fa40: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
fa50: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
fa60: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
fa70: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
fa80: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
fa90: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fab0: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
fac0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
fad0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
fae0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
faf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
fb00: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
fb10: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
fb20: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
fb30: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
fb40: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
fb50: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
fb60: 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  tion */.  Table 
fb70: 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20  *pEpoTab;       
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fb90: 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c  * Eponymous tabl
fba0: 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c  e for this modul
fbb0: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69  e */.};../*.** i
fbc0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
fbd0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
fbe0: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
fbf0: 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
fc00: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
fc10: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
fc20: 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
fc30: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
fc40: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
fc50: 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68  column, \000, th
fc60: 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20  en the type */. 
fc70: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
fc80: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
fc90: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
fca0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  n */.  char *zCo
fcb0: 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  ll;     /* Colla
fcc0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
fcd0: 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65  If NULL, use the
fce0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
fcf0: 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f   notNull;      /
fd00: 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f  * An OE_ code fo
fd10: 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54  r handling a NOT
fd20: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
fd30: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
fd40: 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66  ity;   /* One of
fd50: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
fd60: 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  ... values */.  
fd70: 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20  u8 szEst;       
fd80: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
fd90: 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74  ze of value in t
fda0: 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65  his column. size
fdb0: 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20  of(INT)==1 */.  
fdc0: 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  u8 colFlags;    
fdd0: 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70   /* Boolean prop
fde0: 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c  erties.  See COL
fdf0: 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65  FLAG_ defines be
fe00: 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  low */.};../* Al
fe10: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
fe20: 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73   Column.colFlags
fe30: 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  :.*/.#define COL
fe40: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78  FLAG_PRIMKEY  0x
fe50: 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0001    /* Colum
fe60: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
fe70: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
fe80: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
fe90: 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20  HIDDEN   0x0002 
fea0: 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63     /* A hidden c
feb0: 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75  olumn in a virtu
fec0: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
fed0: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54  ine COLFLAG_HAST
fee0: 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f  YPE  0x0004    /
fef0: 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c  * Type name foll
ff00: 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ows column name 
ff10: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
ff20: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
ff30: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
ff40: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
ff50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
ff60: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
ff70: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
ff80: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
ff90: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
ffa0: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
ffb0: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
ffc0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
ffd0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
ffe0: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
fff0: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
10000 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
10010 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
10020 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
10030 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
10040 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
10050 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
10060 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
10070 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
10080 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
10090 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
100a0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
100b0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
100c0 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
100d0 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
100e0 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
100f0 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
10100 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
10110 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
10120 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
10130 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
10140 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
10150 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
10160 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
10170 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
10180 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
10190 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
101a0 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
101b0 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
101c0 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
101d0 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
101e0 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
101f0 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
10200 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10210 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
10220 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
10230 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
10240 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
10250 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
10260 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
10270 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
10280 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
10290 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
102a0 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
102b0 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
102c0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
102d0 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
102e0 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
102f0 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
10300 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
10310 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
10320 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
10330 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
10340 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
10350 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
10360 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
10370 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
10380 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
10390 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
103a0 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20  vely..**.** But 
103b0 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
103c0 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
103d0 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
103e0 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
103f0 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
10400 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
10410 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
10420 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
10430 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
10440 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
10450 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
10460 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
10470 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
10480 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
10490 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
104a0 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
104b0 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
104c0 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
104d0 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
104e0 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
104f0 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
10500 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10510 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27  AFF_BLOB     'A'
10520 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10530 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
10540 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10550 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
10560 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10570 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
10580 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10590 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
105a0 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
105b0 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
105c0 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
105d0 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
105e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
105f0 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
10600 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
10610 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
10620 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
10630 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64  ity value..*/.#d
10640 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
10650 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a  _MASK     0x47..
10660 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
10670 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
10680 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
10690 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
106a0 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
106b0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
106c0 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
106d0 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73  _NOTNULL flag is
106e0 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
106f0 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d  f NULLEQ and JUM
10700 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63  PIFNULL..** It c
10710 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28  auses an assert(
10720 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74  ) to fire if eit
10730 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61  her operand to a
10740 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f   comparison.** o
10750 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e  perator is NULL.
10760 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f    It is added to
10770 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69   certain compari
10780 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f  son operators to
10790 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74  .** prove that t
107a0 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he operands are 
107b0 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e  always NOT NULL.
107c0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
107d0 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20  TE_KEEPNULL     
107e0 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79  0x08  /* Used by
107f0 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e   vector == or <>
10800 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10810 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
10820 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x10  /* jumps i
10830 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
10840 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
10850 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
10860 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a  P2      0x20  /*
10870 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
10880 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
10890 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
108a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
108b0 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
108c0 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23  * NULL=NULL */.#
108d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
108e0 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20  TNULL      0x90 
108f0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
10900 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76  operands are nev
10910 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  er NULL */../*.*
10920 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
10930 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
10940 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
10950 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
10960 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
10970 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
10980 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62  .** If the datab
10990 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68  ase schema is sh
109a0 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ared, then there
109b0 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65   is one instance
109c0 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   of this.** stru
109d0 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64  cture for each d
109e0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
109f0 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68  on (sqlite3*) th
10a00 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72  at uses the shar
10a10 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68  ed.** schema. Th
10a20 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61  is is because ea
10a30 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
10a40 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  ection requires 
10a50 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a  its own unique.*
10a60 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
10a70 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
10a80 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61  handle used to a
10a90 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
10aa0 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65  l table.** imple
10ab0 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
10ac0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
10ad0 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
10ae0 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61  ed between.** da
10af0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10b00 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
10b10 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
10b20 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
10b30 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
10b40 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
10b50 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
10b60 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
10b70 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
10b80 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
10b90 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
10ba0 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
10bb0 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
10bc0 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
10bd0 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
10be0 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
10bf0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
10c00 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
10c10 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
10c20 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
10c30 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
10c40 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
10c50 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20  s.** within the 
10c60 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
10c70 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
10c80 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
10c90 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74  lers.** transact
10ca0 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
10cb0 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
10cc0 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
10cd0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
10ce0 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
10cf0 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
10d00 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
10d10 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
10d20 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
10d30 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
10d40 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
10d50 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
10d60 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
10d70 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
10d80 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
10d90 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
10da0 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
10db0 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
10dc0 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
10dd0 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
10de0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
10df0 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
10e00 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
10e10 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
10e20 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
10e30 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
10e40 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
10e50 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
10e60 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
10e70 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
10e80 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
10e90 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
10ea0 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
10eb0 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
10ec0 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
10ed0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
10ee0 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
10ef0 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
10f00 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
10f10 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
10f20 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
10f30 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
10f40 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
10f50 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
10f60 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
10f70 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
10f80 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64  cts are not.** d
10f90 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
10fa0 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
10fb0 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
10fc0 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20  sconnect()ed.** 
10fd0 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
10fe0 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
10ff0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
11000 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
11010 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
11020 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
11030 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
11040 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
11050 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
11060 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
11070 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
11080 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
11090 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
110a0 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  ed.** next time 
110b0 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
110c0 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
110d0 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
110e0 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
110f0 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
11100 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
11110 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
11120 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
11130 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
11140 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
11150 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
11160 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
11170 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
11180 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
11190 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
111a0 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
111b0 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
111c0 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
111d0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
111e0 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
111f0 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
11200 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
11210 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
11220 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
11230 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
11240 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
11250 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
11260 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
11270 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
11280 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65  ble.db as.** the
11290 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
112a0 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
112b0 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
112c0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
112d0 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
112e0 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
112f0 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
11300 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
11310 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
11320 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
11330 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
11340 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
11350 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
11360 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
11370 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
11380 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
113a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
113b0 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
113c0 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
113d0 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
113e0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
113f0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
11400 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
11410 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
11420 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
11430 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
11440 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
11450 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
11460 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
11470 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
11480 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
11490 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68  ;../*.** The sch
114a0 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c  ema for each SQL
114b0 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20   table and view 
114c0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
114d0 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61  n memory.** by a
114e0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
114f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11500 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
11510 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
11520 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11530 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
11540 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
11550 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
11560 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
11570 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
11580 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
11590 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
115a0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
115b0 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
115c0 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
115d0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
115e0 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
115f0 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
11600 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
11610 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
11620 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
11630 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
11640 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
11650 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
11660 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
11670 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
11680 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
11690 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
116a0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
116b0 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
116c0 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
116d0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
116e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
116f0 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e          /*   ...
11700 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f   also used as co
11710 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69  lumn name list i
11720 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e  n a VIEW */.  in
11730 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
11740 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
11750 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74   page for this t
11760 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50  able */.  i16 iP
11770 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
11780 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
11790 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
117a0 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
117b0 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
117c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
117d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
117e0 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
117f0 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20    u16 nRef;     
11800 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11810 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
11820 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
11830 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
11840 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
11850 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
11860 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
11870 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
11880 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
11890 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
118a0 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
118b0 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
118c0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
118d0 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
118e0 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
118f0 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
11900 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
11910 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
11920 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
11930 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
11940 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f    /* Mask of TF_
11950 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  * values */.  u8
11960 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20   keyConf;       
11970 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f     /* What to do
11980 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71   in case of uniq
11990 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20  ueness conflict 
119a0 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e  on iPKey */.#ifn
119b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
119c0 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
119d0 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
119e0 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43    /* Offset in C
119f0 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74  REATE TABLE stmt
11a00 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
11a10 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  lumn */.#endif.#
11a20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
11a30 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
11a40 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67    int nModuleArg
11a50 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
11a60 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
11a70 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20   the module */. 
11a80 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65   char **azModule
11a90 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75  Arg;  /* 0: modu
11aa0 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20  le 1: schema 2: 
11ab0 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20  vtab name 3...: 
11ac0 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  args */.  VTable
11ad0 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f   *pVTable;     /
11ae0 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65  * List of VTable
11af0 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e   objects. */.#en
11b00 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70  dif.  Trigger *p
11b10 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69  Trigger;   /* Li
11b20 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73  st of triggers s
11b30 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61  tored in pSchema
11b40 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
11b50 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
11b60 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69  hema that contai
11b70 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ns this table */
11b80 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a  .  Table *pNextZ
11b90 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20  ombie;  /* Next 
11ba0 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f  on the Parse.pZo
11bb0 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a  mbieTab list */.
11bc0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
11bd0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62  d values for Tab
11be0 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a  le.tabFlags..**.
11bf0 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ** TF_OOOHidden 
11c00 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65  applies to table
11c10 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68  s or view that h
11c20 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ave hidden colum
11c30 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66  ns that are.** f
11c40 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68  ollowed by non-h
11c50 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20  idden columns.  
11c60 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54  Example:  "CREAT
11c70 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
11c80 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31  x USING.** vtab1
11c90 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e  (a HIDDEN, b);".
11ca0 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61    Since "b" is a
11cb0 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
11cc0 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69  mn but "a" is hi
11cd0 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f  dden,.** the TF_
11ce0 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62  OOOHidden attrib
11cf0 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20  ute would apply 
11d00 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53  in this case.  S
11d10 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69  uch tables requi
11d20 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61  re.** special ha
11d30 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e  ndling during IN
11d40 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e  SERT processing.
11d50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
11d60 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
11d70 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
11d80 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
11d90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
11da0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
11db0 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
11dc0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
11dd0 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
11de0 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
11df0 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
11e00 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
11e10 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
11e20 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
11e30 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
11e40 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
11e50 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
11e60 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
11e70 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
11e80 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
11e90 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
11ea0 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
11eb0 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
11ec0 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
11ed0 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
11ee0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
11ef0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
11f00 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75   0x40    /* No u
11f10 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77  ser-visible "row
11f20 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  id" column */.#d
11f30 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64  efine TF_OOOHidd
11f40 65 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20  en       0x80   
11f50 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
11f60 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
11f70 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
11f80 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
11f90 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
11fa0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11fb0 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
11fc0 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
11fd0 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
11fe0 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
11ff0 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
12000 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
12010 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
12020 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
12030 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
12040 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
12050 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
12060 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
12070 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
12080 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65 0a  tual)!=0).#else.
12090 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
120a0 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65  ual(X)      0.#e
120b0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
120c0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
120d0 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68  if a column is h
120e0 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61  idden.  IsOrdina
120f0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  ryHiddenColumn()
12100 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  .** only works f
12110 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74  or non-virtual t
12120 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20  ables (ordinary 
12130 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73  tables and views
12140 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61  ) and is.** alwa
12150 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20  ys false unless 
12160 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
12170 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20  DDEN_COLUMNS is 
12180 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a  defined.  The.**
12190 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
121a0 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72  ) macro is gener
121b0 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23  al purpose..*/.#
121c0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
121d0 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
121e0 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69  COLUMNS).#  defi
121f0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
12200 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
12210 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
12220 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
12230 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
12240 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
12250 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
12260 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
12270 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
12280 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
12290 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
122a0 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20  ABLE).#  define 
122b0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
122c0 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
122d0 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
122e0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
122f0 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
12300 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
12310 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64  (X) 0.#else.#  d
12320 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
12330 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
12340 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  0.#  define IsOr
12350 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
12360 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
12370 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62  ./* Does the tab
12380 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20  le have a rowid 
12390 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f  */.#define HasRo
123a0 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29  wid(X)     (((X)
123b0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
123c0 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30  WithoutRowid)==0
123d0 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c  ).#define Visibl
123e0 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d  eRowid(X) (((X)-
123f0 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e  >tabFlags & TF_N
12400 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d  oVisibleRowid)==
12410 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
12420 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
12430 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
12440 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12450 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
12460 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
12470 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
12480 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
12490 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
124a0 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
124b0 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
124c0 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
124d0 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
124e0 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
124f0 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
12500 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
12510 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
12520 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
12530 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
12540 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
12550 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
12560 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
12570 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
12580 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
12590 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
125a0 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
125b0 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
125c0 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
125d0 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
125e0 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
125f0 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
12600 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
12610 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
12620 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
12630 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
12640 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
12650 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
12660 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
12670 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
12680 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
12690 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
126a0 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
126b0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
126c0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
126d0 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
126e0 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
126f0 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
12700 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
12710 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
12720 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
12730 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
12740 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
12750 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
12760 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
12770 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
12780 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
12790 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
127a0 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
127b0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
127c0 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
127d0 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
127e0 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
127f0 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
12800 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
12810 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
12820 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
12830 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
12840 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
12850 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
12860 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
12870 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
12880 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
12890 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
128a0 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
128b0 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
128c0 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
128d0 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
128e0 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
128f0 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
12900 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
12910 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
12920 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
12930 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
12940 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
12950 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
12960 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
12970 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
12980 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
12990 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
129a0 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
129b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
129c0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
129d0 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
129e0 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
129f0 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
12a00 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
12a10 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
12a20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
12a30 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
12a40 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
12a50 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
12a60 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
12a70 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
12a80 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
12a90 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
12aa0 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
12ab0 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
12ac0 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
12ad0 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
12ae0 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
12af0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
12b00 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
12b10 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
12b20 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
12b30 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
12b40 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
12b50 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
12b60 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
12b70 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
12b80 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
12b90 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
12ba0 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
12bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
12bc0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
12bd0 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
12be0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
12bf0 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
12c00 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
12c10 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
12c20 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
12c30 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
12c40 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
12c50 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
12c60 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
12c70 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
12c80 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
12c90 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
12ca0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
12cb0 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
12cc0 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
12cd0 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
12ce0 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
12cf0 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
12d00 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
12d10 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
12d20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
12d30 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
12d40 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
12d50 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
12d60 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
12d70 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
12d80 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
12d90 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
12da0 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
12db0 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
12dc0 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
12dd0 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
12de0 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
12df0 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
12e00 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
12e10 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
12e20 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
12e30 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
12e40 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
12e50 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
12e60 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
12e70 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
12e80 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
12e90 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
12ea0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
12eb0 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
12ec0 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
12ed0 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
12ee0 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
12ef0 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
12f00 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
12f10 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
12f20 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
12f30 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
12f40 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
12f50 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
12f60 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
12f70 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
12f80 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
12f90 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
12fa0 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
12fb0 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
12fc0 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
12fd0 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
12fe0 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
12ff0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
13000 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
13010 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
13020 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
13030 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
13040 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
13050 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
13060 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
13070 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
13080 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
13090 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
130a0 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
130b0 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
130c0 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
130d0 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
130e0 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
130f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
13100 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
13110 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
13120 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
13130 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
13140 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
13150 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
13160 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
13170 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
13180 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
13190 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
131a0 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
131b0 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
131c0 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
131d0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
131e0 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
131f0 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
13200 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
13210 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
13220 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
13230 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
13240 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
13250 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
13260 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
13270 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
13280 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
13290 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
132a0 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
132b0 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
132c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
132d0 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
132e0 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
132f0 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
13300 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
13310 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
13320 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
13330 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
13340 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
13350 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
13360 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
13370 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
13380 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
13390 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
133a0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
133b0 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
133c0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
133d0 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
133e0 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
133f0 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
13400 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
13410 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
13420 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
13430 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
13440 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
13450 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
13460 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
13470 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
13480 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
13490 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
134a0 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
134b0 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
134c0 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
134d0 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
134e0 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
134f0 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
13500 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
13510 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
13520 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
13530 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
13540 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
13550 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
13560 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
13570 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
13580 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
13590 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
135a0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
135b0 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
135c0 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
135d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
135e0 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
135f0 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
13600 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
13610 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
13620 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
13630 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
13640 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
13650 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
13660 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13670 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
13680 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
13690 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
136a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
136b0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
136c0 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
136d0 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
136e0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
136f0 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
13700 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
13710 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
13720 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
13730 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
13740 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
13750 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
13760 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
13770 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
13780 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
13790 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
137a0 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
137b0 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70  which has been p
137c0 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
137d0 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65  ndividual.** fie
137e0 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  lds, for the pur
137f0 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61  poses of doing a
13800 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a   comparison..**.
13810 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
13820 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
13830 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
13840 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
13850 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
13860 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
13870 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
13880 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
13890 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
138a0 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
138b0 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
138c0 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
138d0 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
138e0 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
138f0 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
13900 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
13910 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
13920 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
13930 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  e..**.** An inst
13940 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
13950 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20  ect serves as a 
13960 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20  "key" for doing 
13970 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61  a search on.** a
13980 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20  n index b+tree. 
13990 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20  The goal of the 
139a0 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e  search is to fin
139b0 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  d the entry that
139c0 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f  .** is closed to
139d0 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62   the key describ
139e0 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63  ed by this objec
139f0 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20  t.  This object 
13a00 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75  might hold.** ju
13a10 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
13a20 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d  he key.  The num
13a30 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73  ber of fields is
13a40 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65   given by.** pKe
13a50 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a  yInfo->nField..*
13a60 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
13a70 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68  r2 fields are th
13a80 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75  e values to retu
13a90 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69  rn if this key i
13aa0 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f  s less than.** o
13ab0 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61  r greater than a
13ac0 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65   key in the btre
13ad0 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
13ae0 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d    These are norm
13af0 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b  ally.** -1 and +
13b00 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  1 respectively, 
13b10 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76  but might be inv
13b20 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20  erted to +1 and 
13b30 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65  -1 if the b-tree
13b40 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f  .** is in DESC o
13b50 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rder..**.** The 
13b60 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
13b70 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c  unctions actuall
13b80 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74  y return default
13b90 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69  _rc when they fi
13ba0 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20  nd.** an equals 
13bb0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66  comparison.  def
13bc0 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d  ault_rc can be -
13bd0 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66  1, 0, or +1.  If
13be0 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75   there are.** mu
13bf0 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69  ltiple entries i
13c00 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74  n the b-tree wit
13c10 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28  h the same key (
13c20 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e  when only lookin
13c30 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73  g.** at the firs
13c40 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  t pKeyInfo->nFie
13c50 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75  lds,) then defau
13c60 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74  lt_rc can be set
13c70 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75   to -1 to.** cau
13c80 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
13c90 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d   find the last m
13ca0 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63  atch, or +1 to c
13cb0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
13cc0 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66  to.** find the f
13cd0 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  irst match..**.*
13ce0 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
13cf0 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77  ison functions w
13d00 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74  ill set eqSeen t
13d10 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65  o true if they e
13d20 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65  ver.** get and e
13d30 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65  qual results whe
13d40 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73  n comparing this
13d50 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20   structure to a 
13d60 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a  b-tree record..*
13d70 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  * When default_r
13d80 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68  c!=0, the search
13d90 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e   might end up on
13da0 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
13db0 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72  diately.** befor
13dc0 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  e the first matc
13dd0 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  h or immediately
13de0 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
13df0 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65  match.  The.** e
13e00 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c  qSeen field will
13e10 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65   indicate whethe
13e20 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63  r or not an exac
13e30 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69  t match exists i
13e40 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e  n the.** b-tree.
13e50 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
13e60 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
13e70 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
13e80 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
13e90 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
13ea0 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d  formation */.  M
13eb0 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
13ec0 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
13ed0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
13ee0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13ef0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
13f00 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
13f10 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
13f20 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
13f30 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
13f40 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
13f50 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
13f60 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
13f70 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
13f80 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
13f90 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31  OMEM) */.  i8 r1
13fa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13fb0 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
13fc0 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
13fd0 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20   */.  i8 r2;    
13fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
13ff0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
14000 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 20  (rhs < lhs) */. 
14010 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20   u8 eqSeen;     
14020 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
14030 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70  an equality comp
14040 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20  arison has been 
14050 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  seen */.};.../*.
14060 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
14070 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
14080 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
14090 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
140a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
140b0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
140c0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
140d0 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
140e0 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
140f0 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
14100 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
14110 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
14120 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
14130 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
14140 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
14150 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
14160 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
14170 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
14180 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
14190 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
141a0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
141b0 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
141c0 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
141d0 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
141e0 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
141f0 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
14200 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
14210 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
14220 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
14230 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
14240 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
14250 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
14260 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
14270 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
14280 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
14290 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
142a0 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
142b0 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
142c0 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a  ==2 because the.
142d0 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
142e0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
142f0 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
14300 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
14310 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
14320 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
14330 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
14340 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
14350 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
14360 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
14370 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
14380 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
14390 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
143a0 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
143b0 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
143c0 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
143d0 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
143e0 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
143f0 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
14400 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
14410 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
14420 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
14430 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
14440 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
14450 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
14460 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
14470 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
14480 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
14490 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
144a0 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74  ution.** algorit
144b0 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
144c0 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
144d0 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
144e0 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
144f0 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
14500 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
14510 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
14520 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
14530 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
14540 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
14550 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
14560 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
14570 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
14580 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
14590 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
145a0 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
145b0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
145c0 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
145d0 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
145e0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
145f0 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
14600 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
14610 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
14620 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
14630 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
14640 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
14650 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
14660 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
14670 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
14680 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
14690 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
146a0 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
146b0 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
146c0 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
146d0 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
146e0 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
146f0 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
14700 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
14710 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
14720 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
14730 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
14740 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
14750 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
14760 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
14770 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
14780 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
14790 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
147a0 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
147b0 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
147c0 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
147d0 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
147e0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
147f0 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
14800 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
14810 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
14820 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
14830 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
14840 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
14850 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
14860 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
14870 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
14880 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
14890 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
148a0 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
148b0 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
148c0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
148d0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
148e0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
148f0 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
14900 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
14910 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
14920 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
14930 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
14940 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f  lse==ASC */.  co
14950 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  nst char **azCol
14960 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  l;     /* Array 
14970 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
14980 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
14990 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
149a0 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
149b0 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
149c0 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
149d0 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70  indices */.  Exp
149e0 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b  rList *aColExpr;
149f0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
14a00 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
14a10 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
14a20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
14a30 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
14a40 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
14a50 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
14a60 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
14a70 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
14a80 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
14a90 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
14aa0 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
14ab0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14ac0 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
14ad0 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
14ae0 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
14af0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14b00 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
14b10 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
14b20 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
14b30 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
14b40 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
14b50 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
14b60 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
14b70 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
14b80 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
14b90 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
14ba0 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
14bb0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
14bc0 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
14bd0 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
14be0 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
14bf0 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
14c00 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
14c10 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
14c20 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
14c30 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
14c40 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
14c50 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
14c60 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
14c70 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
14c80 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
14c90 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
14ca0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
14cb0 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
14cc0 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
14cd0 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
14ce0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
14cf0 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
14d00 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
14d10 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
14d20 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20   true */.#ifdef 
14d30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
14d40 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
14d50 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
14d60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14d70 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
14d80 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
14d90 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
14da0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
14db0 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
14dc0 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
14dd0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
14de0 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
14df0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
14e00 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
14e10 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
14e20 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
14e30 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
14e40 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
14e50 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
14e60 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
14e70 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
14e80 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
14e90 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
14ea0 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
14eb0 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
14ec0 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
14ed0 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
14ee0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
14ef0 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
14f00 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
14f10 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
14f20 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
14f30 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
14f40 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
14f50 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
14f60 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
14f70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
14f80 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
14f90 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
14fa0 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
14fb0 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
14fc0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
14fd0 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
14fe0 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
14ff0 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
15000 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
15010 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
15020 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
15030 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
15040 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
15050 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
15060 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
15070 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
15080 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
15090 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
150a0 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
150b0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
150c0 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
150d0 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
150e0 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
150f0 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
15100 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
15110 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
15120 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
15130 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
15140 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
15150 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
15160 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
15170 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
15180 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
15190 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
151a0 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
151b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
151c0 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
151d0 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
151e0 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
151f0 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
15200 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
15210 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
15220 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
15230 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
15240 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
15250 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
15260 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
15270 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
15280 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
15290 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
152a0 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
152b0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
152c0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
152d0 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
152e0 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
152f0 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
15300 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
15310 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
15320 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
15330 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
15340 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
15350 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
15360 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
15370 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
15380 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
15390 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
153a0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
153b0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
153c0 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
153d0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
153e0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
153f0 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
15400 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
15410 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
15420 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
15430 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
15440 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
15450 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
15460 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
15470 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
15480 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
15490 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
154a0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
154b0 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
154c0 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
154d0 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
154e0 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
154f0 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
15500 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
15510 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
15520 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
15530 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
15540 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
15550 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
15560 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
15570 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
15580 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
15590 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
155a0 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
155b0 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
155c0 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
155d0 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
155e0 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
155f0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
15600 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
15610 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
15620 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
15630 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
15640 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
15650 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
15660 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
15670 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
15680 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
15690 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
156a0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
156b0 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
156c0 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
156d0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
156e0 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
156f0 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
15700 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
15710 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
15720 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
15730 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
15740 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
15750 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
15760 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
15770 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
15780 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
15790 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
157a0 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
157b0 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
157c0 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
157d0 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
157e0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
157f0 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
15800 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
15810 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
15820 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
15830 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
15840 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
15850 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
15860 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
15870 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
15880 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
15890 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
158a0 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
158d0 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
158e0 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
158f0 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
15900 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
15910 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
15920 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
15930 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
15940 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
15970 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
15980 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
15990 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
159a0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
159b0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
159c0 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
159d0 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
159e0 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
159f0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
15a00 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
15a10 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
15a20 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15a30 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
15a40 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
15a50 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
15a60 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
15a70 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
15a80 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
15a90 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
15aa0 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
15ab0 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
15ac0 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
15ad0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
15ae0 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
15af0 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
15b00 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
15b10 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
15b20 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
15b30 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
15b40 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
15b50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15b60 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
15b70 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
15b80 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
15b90 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
15ba0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
15bb0 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
15bc0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
15bd0 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
15be0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
15bf0 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
15c00 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
15c10 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
15c20 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
15c30 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
15c40 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
15c50 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
15c60 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
15c70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
15c80 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
15c90 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
15ca0 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
15cb0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
15cc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
15cd0 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
15ce0 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
15cf0 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
15d00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15d10 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
15d20 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
15d30 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
15d60 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
15d70 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
15d80 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
15db0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
15dc0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
15dd0 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
15de0 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
15df0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
15e00 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
15e10 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
15e20 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
15e30 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
15e40 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
15e50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15e60 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15e70 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
15e80 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
15e90 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
15ea0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
15eb0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
15ec0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
15ed0 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
15ee0 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
15ef0 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
15f00 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
15f10 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
15f20 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
15f30 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
15f40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15f50 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
15f60 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
15f70 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
15f80 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
15f90 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
15fa0 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
15fb0 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
15fc0 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
15fd0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
15fe0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
15ff0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
16000 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
16010 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
16020 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
16030 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
16040 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
16050 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
16060 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
16070 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
16080 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
16090 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
160a0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
160b0 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
160c0 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
160d0 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
160e0 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
160f0 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
16100 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
16110 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
16120 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
16130 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
16140 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
16150 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
16160 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
16170 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
16180 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
16190 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
161a0 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
161b0 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
161c0 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
161d0 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
161e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
161f0 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
16200 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
16210 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
16220 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
16230 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
16240 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
16250 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
16260 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
16270 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
16280 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
16290 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
162a0 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
162b0 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
162c0 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
162d0 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
162e0 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
162f0 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
16300 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
16310 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
16320 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
16330 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
16340 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
16350 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
16360 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
16370 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
16380 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
16390 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
163a0 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
163b0 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
163c0 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
163d0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
163e0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
163f0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
16400 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
16410 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
16420 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
16430 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
16440 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
16450 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
16460 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
16470 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
16480 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
16490 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
164a0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
164b0 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
164c0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
164d0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
164e0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
164f0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
16500 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
16510 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
16520 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
16530 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
16540 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
16550 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
16560 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
16570 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
16580 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
16590 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
165a0 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
165b0 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
165c0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
165d0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
165e0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
165f0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
16600 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
16610 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
16620 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
16630 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
16640 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
16650 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
16660 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
16670 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
16680 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
16690 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
166a0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
166b0 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
166c0 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
166d0 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
166e0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
166f0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
16700 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
16710 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
16720 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
16730 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
16740 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
16750 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
16760 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
16770 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
16780 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16790 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
167a0 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
167b0 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
167c0 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
167d0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
167e0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
167f0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
16800 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
16810 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
16820 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
16830 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
16840 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
16850 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
16860 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
16870 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
16880 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
16890 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
168a0 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
168b0 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
168c0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
168d0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
168e0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
168f0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
16900 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
16910 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
16920 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
16930 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
16940 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
16950 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
16960 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
16970 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
16980 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
16990 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
169a0 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
169b0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
169c0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
169d0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
169e0 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
169f0 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
16a00 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
16a10 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
16a20 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
16a30 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
16a40 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
16a50 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
16a60 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
16a70 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
16a80 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
16a90 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
16aa0 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
16ab0 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
16ac0 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
16ad0 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
16ae0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
16af0 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
16b00 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
16b10 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
16b20 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
16b30 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
16b40 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
16b50 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
16b60 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
16b70 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
16b80 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
16b90 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
16ba0 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
16bb0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
16bc0 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
16bd0 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
16be0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
16bf0 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
16c00 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
16c10 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
16c20 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
16c30 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
16c40 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
16c50 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
16c60 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
16c70 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
16c80 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
16c90 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
16ca0 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
16cb0 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
16cc0 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
16cd0 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
16ce0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
16cf0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
16d00 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
16d10 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
16d20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
16d30 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
16d40 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
16d50 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
16d60 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
16d70 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
16d80 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
16d90 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
16da0 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
16db0 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
16dc0 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
16dd0 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
16de0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
16df0 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
16e00 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
16e10 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
16e20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
16e30 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
16e40 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
16e50 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
16e60 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16e70 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
16e80 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
16e90 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16eb0 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
16ec0 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
16ed0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
16ee0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
16ef0 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
16f00 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
16f10 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
16f20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
16f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16f40 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
16f50 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
16f60 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
16f70 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
16f80 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
16f90 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
16fa0 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
16fb0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
16fc0 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
16fd0 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
16fe0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
16ff0 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
17000 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
17010 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
17020 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
17030 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
17040 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
17050 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
17060 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
17070 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
17080 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
17090 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
170a0 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
170b0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
170c0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
170d0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
170e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
170f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17110 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
17120 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
17130 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
17140 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
17150 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
17160 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
17170 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
17180 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
17190 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
171a0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
171b0 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
171c0 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
171d0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
171e0 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
171f0 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
17200 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
17210 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
17220 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
17230 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
17240 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
17250 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
17260 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
17270 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
17280 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
17290 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
172a0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
172b0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
172c0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
172d0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
172e0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
172f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
17330 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
17340 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
17350 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
17360 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
17370 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
17380 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
17390 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
173a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
173b0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
173c0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
173d0 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
173e0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
173f0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
17400 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
17410 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
17440 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
17450 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17470 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
17480 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
17490 6c 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20  likelihood.     
174a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
174b0 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54      ** TK_SELECT
174c0 3a 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f  : 1st register o
174d0 66 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20  f result vector 
174e0 2a 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75  */.  ynVar iColu
174f0 6d 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  mn;         /* T
17500 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  K_COLUMN: column
17510 20 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20   index.  -1 for 
17520 72 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20  rowid..         
17530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17540 2a 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20  ** TK_VARIABLE: 
17550 76 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20  variable number 
17560 28 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20  (always >= 1).. 
17570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17580 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45          ** TK_SE
17590 4c 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c  LECT_COLUMN: col
175a0 75 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c  umn of the resul
175b0 74 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31  t vector */.  i1
175c0 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20  6 iAgg;         
175d0 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e       /* Which en
175e0 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d  try in pAggInfo-
175f0 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75  >aCol[] or ->aFu
17600 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52  nc[] */.  i16 iR
17610 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20  ightJoinTable;  
17620 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f   /* If EP_FromJo
17630 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61  in, the right ta
17640 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20  ble of the join 
17650 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20  */.  u8 op2;    
17660 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
17670 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67  K_REGISTER: orig
17680 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78  inal value of Ex
17690 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20  pr.op.          
176a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
176b0 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65  * TK_COLUMN: the
176c0 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72   value of p5 for
176d0 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20   OP_Column.     
176e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
176f0 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55      ** TK_AGG_FU
17700 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20  NCTION: nesting 
17710 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e  depth */.  AggIn
17720 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
17730 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f    /* Used by TK_
17740 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54  AGG_COLUMN and T
17750 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a  K_AGG_FUNCTION *
17760 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
17770 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61             /* Ta
17780 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d  ble for TK_COLUM
17790 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a  N expressions. *
177a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
177b0 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68  following are th
177c0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69  e meanings of bi
177d0 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66  ts in the Expr.f
177e0 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23  lags field..*/.#
177f0 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f  define EP_FromJo
17800 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20  in  0x000001 /* 
17810 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e  Originates in ON
17820 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66  /USING clause of
17830 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
17840 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20  define EP_Agg   
17850 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20      0x000002 /* 
17860 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  Contains one or 
17870 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66  more aggregate f
17880 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66  unctions */.#def
17890 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20  ine EP_Resolved 
178a0 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73   0x000004 /* IDs
178b0 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
178c0 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a  ved to COLUMNs *
178d0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72 72  /.#define EP_Err
178e0 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38 20  or     0x000008 
178f0 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63 6f  /* Expression co
17900 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
17910 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  re errors */.#de
17920 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63 74  fine EP_Distinct
17930 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41 67    0x000010 /* Ag
17940 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
17950 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20 6b   with DISTINCT k
17960 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e  eyword */.#defin
17970 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20 30  e EP_VarSelect 0
17980 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c 65  x000020 /* pSele
17990 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ct is correlated
179a0 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a  , not constant *
179b0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62 6c  /.#define EP_Dbl
179c0 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30 20  Quoted 0x000040 
179d0 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f  /* token.z was o
179e0 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e  riginally in "..
179f0 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ." */.#define EP
17a00 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30 30  _InfixFunc 0x000
17a10 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  080 /* True for 
17a20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69 6f  an infix functio
17a30 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65  n: LIKE, GLOB, e
17a40 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  tc */.#define EP
17a50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30 30  _Collate   0x000
17a60 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  100 /* Tree cont
17a70 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54  ains a TK_COLLAT
17a80 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64  E operator */.#d
17a90 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69 63  efine EP_Generic
17aa0 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20 49     0x000200 /* I
17ab0 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72  gnore COLLATE or
17ac0 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68 69   affinity on thi
17ad0 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  s tree */.#defin
17ae0 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20 30  e EP_IntValue  0
17af0 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65 67  x000400 /* Integ
17b00 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e  er value contain
17b10 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a  ed in u.iValue *
17b20 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49 73  /.#define EP_xIs
17b30 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30 20  Select 0x000800 
17b40 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73 20  /* x.pSelect is 
17b50 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73 65  valid (otherwise
17b60 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a   x.pList is) */.
17b70 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70 20  #define EP_Skip 
17b80 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f 2a       0x001000 /*
17b90 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72   COLLATE, AS, or
17ba0 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65   UNLIKELY */.#de
17bb0 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64 20  fine EP_Reduced 
17bc0 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45 78    0x002000 /* Ex
17bd0 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f 52  pr struct EXPR_R
17be0 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65 73  EDUCEDSIZE bytes
17bf0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
17c00 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78   EP_TokenOnly 0x
17c10 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20 73  004000 /* Expr s
17c20 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e  truct EXPR_TOKEN
17c30 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20 6f  ONLYSIZE bytes o
17c40 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  nly */.#define E
17c50 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30 30  P_Static    0x00
17c60 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20  8000 /* Held in 
17c70 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69  memory not obtai
17c80 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ned from malloc(
17c90 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  ) */.#define EP_
17ca0 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30 30  MemToken  0x0100
17cb0 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71  00 /* Need to sq
17cc0 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45 78  lite3DbFree() Ex
17cd0 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65  pr.zToken */.#de
17ce0 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63 65  fine EP_NoReduce
17cf0 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43 61    0x020000 /* Ca
17d00 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45 44  nnot EXPRDUP_RED
17d10 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a 2f  UCE this Expr */
17d20 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69  .#define EP_Unli
17d30 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20 2f  kely  0x040000 /
17d40 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20  * unlikely() or 
17d50 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e  likelihood() fun
17d60 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
17d70 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78   EP_ConstFunc 0x
17d80 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c 49  080000 /* A SQLI
17d90 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
17da0 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e   or _SLOCHNG fun
17db0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
17dc0 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78   EP_CanBeNull 0x
17dd0 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62 65  100000 /* Can be
17de0 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f   null despite NO
17df0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
17e00 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  t */.#define EP_
17e10 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30 30  Subquery  0x2000
17e20 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61  00 /* Tree conta
17e30 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54 20  ins a TK_SELECT 
17e40 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66  operator */.#def
17e50 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20 20  ine EP_Alias    
17e60 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73 20   0x400000 /* Is 
17e70 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20 72  an alias for a r
17e80 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e  esult set column
17e90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c   */.#define EP_L
17ea0 65 61 66 20 20 20 20 20 20 30 78 38 30 30 30 30  eaf      0x80000
17eb0 30 20 2f 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c  0 /* Expr.pLeft,
17ec0 20 2e 70 52 69 67 68 74 2c 20 2e 75 2e 70 53 65   .pRight, .u.pSe
17ed0 6c 65 63 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f  lect all NULL */
17ee0 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74  ../*.** Combinat
17ef0 69 6f 6e 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d  ions of two or m
17f00 6f 72 65 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a  ore EP_* flags.*
17f10 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 50 72 6f  /.#define EP_Pro
17f20 70 61 67 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61  pagate (EP_Colla
17f30 74 65 7c 45 50 5f 53 75 62 71 75 65 72 79 29 20  te|EP_Subquery) 
17f40 2f 2a 20 50 72 6f 70 61 67 61 74 65 20 74 68 65  /* Propagate the
17f50 73 65 20 62 69 74 73 20 75 70 20 74 72 65 65 20  se bits up tree 
17f60 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20  */../*.** These 
17f70 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75 73  macros can be us
17f80 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74 2c  ed to test, set,
17f90 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20 69   or clear bits i
17fa0 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
17fb0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
17fc0 65 66 69 6e 65 20 45 78 70 72 48 61 73 50 72 6f  efine ExprHasPro
17fd0 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
17fe0 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29  ((E)->flags&(P))
17ff0 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 45 78 70  !=0).#define Exp
18000 72 48 61 73 41 6c 6c 50 72 6f 70 65 72 74 79 28  rHasAllProperty(
18010 45 2c 50 29 20 20 28 28 28 45 29 2d 3e 66 6c 61  E,P)  (((E)->fla
18020 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64  gs&(P))==(P)).#d
18030 65 66 69 6e 65 20 45 78 70 72 53 65 74 50 72 6f  efine ExprSetPro
18040 70 65 72 74 79 28 45 2c 50 29 20 20 20 20 20 28  perty(E,P)     (
18050 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23  E)->flags|=(P).#
18060 64 65 66 69 6e 65 20 45 78 70 72 43 6c 65 61 72  define ExprClear
18070 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 20  Property(E,P)   
18080 28 45 29 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29  (E)->flags&=~(P)
18090 0a 0a 2f 2a 20 54 68 65 20 45 78 70 72 53 65 74  ../* The ExprSet
180a0 56 56 41 50 72 6f 70 65 72 74 79 28 29 20 6d 61  VVAProperty() ma
180b0 63 72 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20  cro is used for 
180c0 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20 56 61  Verification, Va
180d0 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64  lidation,.** and
180e0 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 20 6f   Accreditation o
180f0 6e 6c 79 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c  nly.  It works l
18100 69 6b 65 20 45 78 70 72 53 65 74 50 72 6f 70 65  ike ExprSetPrope
18110 72 74 79 28 29 20 64 75 72 69 6e 67 20 56 56 41  rty() during VVA
18120 0a 2a 2a 20 70 72 6f 63 65 73 73 65 73 20 62 75  .** processes bu
18130 74 20 69 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72  t is a no-op for
18140 20 64 65 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69   delivery..*/.#i
18150 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55  fdef SQLITE_DEBU
18160 47 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  G.# define ExprS
18170 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
18180 50 29 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d  P)  (E)->flags|=
18190 28 50 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  (P).#else.# defi
181a0 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
181b0 70 65 72 74 79 28 45 2c 50 29 0a 23 65 6e 64 69  perty(E,P).#endi
181c0 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
181d0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
181e0 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
181f0 20 72 65 71 75 69 72 65 64 20 62 79 20 61 20 6e   required by a n
18200 6f 72 6d 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74  ormal Expr.** st
18210 72 75 63 74 2c 20 61 6e 20 45 78 70 72 20 73 74  ruct, an Expr st
18220 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45 50  ruct with the EP
18230 5f 52 65 64 75 63 65 64 20 66 6c 61 67 20 73 65  _Reduced flag se
18240 74 20 69 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a  t in Expr.flags.
18250 2a 2a 20 61 6e 64 20 61 6e 20 45 78 70 72 20 73  ** and an Expr s
18260 74 72 75 63 74 20 77 69 74 68 20 74 68 65 20 45  truct with the E
18270 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67  P_TokenOnly flag
18280 20 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65   set..*/.#define
18290 20 45 58 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20   EXPR_FULLSIZE  
182a0 20 20 20 20 20 20 20 20 20 73 69 7a 65 6f 66 28           sizeof(
182b0 45 78 70 72 29 20 20 20 20 20 20 20 20 20 20 20  Expr)           
182c0 2f 2a 20 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a  /* Full size */.
182d0 23 64 65 66 69 6e 65 20 45 58 50 52 5f 52 45 44  #define EXPR_RED
182e0 55 43 45 44 53 49 5a 45 20 20 20 20 20 20 20 20  UCEDSIZE        
182f0 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 69 54  offsetof(Expr,iT
18300 61 62 6c 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e  able)  /* Common
18310 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 23 64 65   features */.#de
18320 66 69 6e 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f  fine EXPR_TOKENO
18330 4e 4c 59 53 49 5a 45 20 20 20 20 20 20 6f 66 66  NLYSIZE      off
18340 73 65 74 6f 66 28 45 78 70 72 2c 70 4c 65 66 74  setof(Expr,pLeft
18350 29 20 20 20 2f 2a 20 46 65 77 65 72 20 66 65 61  )   /* Fewer fea
18360 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  tures */../*.** 
18370 46 6c 61 67 73 20 70 61 73 73 65 64 20 74 6f 20  Flags passed to 
18380 74 68 65 20 73 71 6c 69 74 65 33 45 78 70 72 44  the sqlite3ExprD
18390 75 70 28 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53  up() function. S
183a0 65 65 20 74 68 65 20 68 65 61 64 65 72 20 63 6f  ee the header co
183b0 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73  mment.** above s
183c0 71 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20  qlite3ExprDup() 
183d0 66 6f 72 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a  for details..*/.
183e0 23 64 65 66 69 6e 65 20 45 58 50 52 44 55 50 5f  #define EXPRDUP_
183f0 52 45 44 55 43 45 20 20 20 20 20 20 20 20 20 30  REDUCE         0
18400 78 30 30 30 31 20 20 2f 2a 20 55 73 65 64 20 72  x0001  /* Used r
18410 65 64 75 63 65 64 2d 73 69 7a 65 20 45 78 70 72  educed-size Expr
18420 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a   nodes */../*.**
18430 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65   A list of expre
18440 73 73 69 6f 6e 73 2e 20 20 45 61 63 68 20 65 78  ssions.  Each ex
18450 70 72 65 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74  pression may opt
18460 69 6f 6e 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a  ionally have a.*
18470 2a 20 6e 61 6d 65 2e 20 20 41 6e 20 65 78 70 72  * name.  An expr
18480 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f  /name combinatio
18490 6e 20 63 61 6e 20 62 65 20 75 73 65 64 20 69 6e  n can be used in
184a0 20 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 73   several ways, s
184b0 75 63 68 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69  uch.** as the li
184c0 73 74 20 6f 66 20 22 65 78 70 72 20 41 53 20 49  st of "expr AS I
184d0 44 22 20 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77  D" fields follow
184e0 69 6e 67 20 61 20 22 53 45 4c 45 43 54 22 20 6f  ing a "SELECT" o
184f0 72 20 69 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74  r in the.** list
18500 20 6f 66 20 22 49 44 20 3d 20 65 78 70 72 22 20   of "ID = expr" 
18510 69 74 65 6d 73 20 69 6e 20 61 6e 20 55 50 44 41  items in an UPDA
18520 54 45 2e 20 20 41 20 6c 69 73 74 20 6f 66 20 65  TE.  A list of e
18530 78 70 72 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a  xpressions can.*
18540 2a 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 61  * also be used a
18550 73 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 74  s the argument t
18560 6f 20 61 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e  o a function, in
18570 20 77 68 69 63 68 20 63 61 73 65 20 74 68 65 20   which case the 
18580 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64  a.zName.** field
18590 20 69 73 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a   is not used..**
185a0 0a 2a 2a 20 42 79 20 64 65 66 61 75 6c 74 20 74  .** By default t
185b0 68 65 20 45 78 70 72 2e 7a 53 70 61 6e 20 66 69  he Expr.zSpan fi
185c0 65 6c 64 20 68 6f 6c 64 73 20 61 20 68 75 6d 61  eld holds a huma
185d0 6e 2d 72 65 61 64 61 62 6c 65 20 64 65 73 63 72  n-readable descr
185e0 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  iption of.** the
185f0 20 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74   expression that
18600 20 69 73 20 75 73 65 64 20 69 6e 20 74 68 65 20   is used in the 
18610 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20 65 72  generation of er
18620 72 6f 72 20 6d 65 73 73 61 67 65 73 20 61 6e 64  ror messages and
18630 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c  .** column label
18640 73 2e 20 20 49 6e 20 74 68 69 73 20 63 61 73 65  s.  In this case
18650 2c 20 45 78 70 72 2e 7a 53 70 61 6e 20 69 73 20  , Expr.zSpan is 
18660 74 79 70 69 63 61 6c 6c 79 20 74 68 65 20 74 65  typically the te
18670 78 74 20 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d  xt of a.** colum
18680 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 73 20  n expression as 
18690 69 74 20 65 78 69 73 74 73 20 69 6e 20 61 20 53  it exists in a S
186a0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
186b0 20 20 48 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a    However, if.**
186c0 20 74 68 65 20 62 53 70 61 6e 49 73 54 61 62 20   the bSpanIsTab 
186d0 66 6c 61 67 20 69 73 20 73 65 74 2c 20 74 68 65  flag is set, the
186e0 6e 20 7a 53 70 61 6e 20 69 73 20 6f 76 65 72 6c  n zSpan is overl
186f0 6f 61 64 65 64 20 74 6f 20 6d 65 61 6e 20 74 68  oaded to mean th
18700 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65  e name.** of the
18710 20 72 65 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69   result column i
18720 6e 20 74 68 65 20 66 6f 72 6d 3a 20 44 41 54 41  n the form: DATA
18730 42 41 53 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d  BASE.TABLE.COLUM
18740 4e 2e 20 20 54 68 69 73 20 6c 61 74 65 72 0a 2a  N.  This later.*
18750 2a 20 66 6f 72 6d 20 69 73 20 75 73 65 64 20 66  * form is used f
18760 6f 72 20 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69  or name resoluti
18770 6f 6e 20 77 69 74 68 20 6e 65 73 74 65 64 20 46  on with nested F
18780 52 4f 4d 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a  ROM clauses..*/.
18790 73 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 20  struct ExprList 
187a0 7b 0a 20 20 69 6e 74 20 6e 45 78 70 72 3b 20 20  {.  int nExpr;  
187b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
187c0 6d 62 65 72 20 6f 66 20 65 78 70 72 65 73 73 69  mber of expressi
187d0 6f 6e 73 20 6f 6e 20 74 68 65 20 6c 69 73 74 20  ons on the list 
187e0 2a 2f 0a 20 20 73 74 72 75 63 74 20 45 78 70 72  */.  struct Expr
187f0 4c 69 73 74 5f 69 74 65 6d 20 7b 20 2f 2a 20 46  List_item { /* F
18800 6f 72 20 65 61 63 68 20 65 78 70 72 65 73 73 69  or each expressi
18810 6f 6e 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a  on in the list *
18820 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
18830 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
18840 20 54 68 65 20 6c 69 73 74 20 6f 66 20 65 78 70   The list of exp
18850 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 20 20  ressions */.    
18860 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
18870 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
18880 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
18890 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
188a0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
188b0 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
188c0 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
188d0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
188e0 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
188f0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
18900 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
18910 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
18920 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
18930 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
18940 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
18950 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
18960 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
18970 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
18980 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
18990 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
189a0 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
189b0 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
189c0 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
189d0 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
189e0 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
189f0 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
18a00 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
18a10 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79      u16 iOrderBy
18a20 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72  Col;      /* For
18a30 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
18a40 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
18a50 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20  lt set */.      
18a60 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
18a70 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
18a80 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69   into Parse.aAli
18a90 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a  as[] for zName *
18aa0 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20  /.      } x;.   
18ab0 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70     int iConstExp
18ac0 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65  rReg;      /* Re
18ad0 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20  gister in which 
18ae0 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61  Expr value is ca
18af0 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b  ched */.    } u;
18b00 0a 20 20 7d 20 2a 61 3b 20 20 20 20 20 20 20 20  .  } *a;        
18b10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
18b20 6f 63 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  oc a power of tw
18b30 6f 20 67 72 65 61 74 65 72 20 6f 72 20 65 71 75  o greater or equ
18b40 61 6c 20 74 6f 20 6e 45 78 70 72 20 2a 2f 0a 7d  al to nExpr */.}
18b50 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
18b60 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
18b70 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20 62  ucture is used b
18b80 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f 20  y the parser to 
18b90 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74  record both.** t
18ba0 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66 6f  he parse tree fo
18bb0 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  r an expression 
18bc0 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20  and the span of 
18bd0 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20 61  input text for a
18be0 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e  n.** expression.
18bf0 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53  .*/.struct ExprS
18c00 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45  pan {.  Expr *pE
18c10 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  xpr;          /*
18c20 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   The expression 
18c30 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20  parse tree */.  
18c40 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61  const char *zSta
18c50 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63  rt;   /* First c
18c60 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75  haracter of inpu
18c70 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73  t text */.  cons
18c80 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20  t char *zEnd;   
18c90 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74    /* One charact
18ca0 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64 20  er past the end 
18cb0 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f  of input text */
18cc0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
18cd0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
18ce0 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c  tructure can hol
18cf0 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20  d a simple list 
18d00 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a  of identifiers,.
18d10 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20 6c  ** such as the l
18d20 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74  ist "a,b,c" in t
18d30 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61  he following sta
18d40 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20  tements:.**.**  
18d50 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20      INSERT INTO 
18d60 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20  t(a,b,c) VALUES 
18d70 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45  ...;.**      CRE
18d80 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e  ATE INDEX idx ON
18d90 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20   t(a,b,c);.**   
18da0 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47 45     CREATE TRIGGE
18db0 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55 50  R trig BEFORE UP
18dc0 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29  DATE ON t(a,b,c)
18dd0 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20   ...;.**.** The 
18de0 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65  IdList.a.idx fie
18df0 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e 20  ld is used when 
18e00 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72 65  the IdList repre
18e10 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f  sents the list o
18e20 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  f.** column name
18e30 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65 20  s after a table 
18e40 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52  name in an INSER
18e50 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  T statement.  In
18e60 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a   the statement.*
18e70 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20  *.**     INSERT 
18e80 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e  INTO t(a,b,c) ..
18e90 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69  ..**.** If "a" i
18ea0 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d  s the k-th colum
18eb0 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20  n of table "t", 
18ec0 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d  then IdList.a[0]
18ed0 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75  .idx==k..*/.stru
18ee0 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74  ct IdList {.  st
18ef0 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d  ruct IdList_item
18f00 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61   {.    char *zNa
18f10 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65  me;      /* Name
18f20 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66 69   of the identifi
18f30 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64  er */.    int id
18f40 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  x;          /* I
18f50 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62  ndex in some Tab
18f60 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63  le.aCol[] of a c
18f70 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d  olumn named zNam
18f80 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69  e */.  } *a;.  i
18f90 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20  nt nId;         
18fa0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65  /* Number of ide
18fb0 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20  ntifiers on the 
18fc0 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  list */.};../*.*
18fd0 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61  * The bitmask da
18fe0 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20 62  tatype defined b
18ff0 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72  elow is used for
19000 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
19010 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68  ations..**.** Ch
19020 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d  anging this from
19030 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33   a 64-bit to a 3
19040 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74  2-bit type limit
19050 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a  s the number of.
19060 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a  ** tables in a j
19070 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61  oin to 32 instea
19080 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74  d of 64.  But it
19090 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68   also reduces th
190a0 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65  e size.** of the
190b0 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38 20   library by 738 
190c0 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a  bytes on ix86..*
190d0 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
190e0 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74  BITMASK_TYPE.  t
190f0 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49  ypedef SQLITE_BI
19100 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61  TMASK_TYPE Bitma
19110 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  sk;.#else.  type
19120 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b  def u64 Bitmask;
19130 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
19140 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74  he number of bit
19150 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20  s in a Bitmask. 
19160 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69   "BMS" means "Bi
19170 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a  tMask Size"..*/.
19180 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69  #define BMS  ((i
19190 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61  nt)(sizeof(Bitma
191a0 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41  sk)*8))../*.** A
191b0 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73   bit in a Bitmas
191c0 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  k.*/.#define MAS
191d0 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69 74  KBIT(n)   (((Bit
191e0 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64  mask)1)<<(n)).#d
191f0 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28  efine MASKBIT32(
19200 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69  n) (((unsigned i
19210 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  nt)1)<<(n)).#def
19220 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20  ine ALLBITS     
19230 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a   ((Bitmask)-1)..
19240 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
19250 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64 65  ing structure de
19260 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d  scribes the FROM
19270 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
19280 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
19290 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20  * Each table or 
192a0 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65 20  subquery in the 
192b0 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61  FROM clause is a
192c0 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e   separate elemen
192d0 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c  t of.** the SrcL
192e0 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a  ist.a[] array..*
192f0 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64  *.** With the ad
19300 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70  dition of multip
19310 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70 70  le database supp
19320 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ort, the followi
19330 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
19340 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64  can also be used
19350 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20 70   to describe a p
19360 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20  articular table 
19370 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62 6c  such as the tabl
19380 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64  e that.** is mod
19390 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45  ified by an INSE
193a0 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55  RT, DELETE, or U
193b0 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e  PDATE statement.
193c0 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51    In standard SQ
193d0 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62  L,.** such a tab
193e0 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d  le must be a sim
193f0 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42  ple name: ID.  B
19400 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68  ut in SQLite, th
19410 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e  e table can.** n
19420 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65 64  ow be identified
19430 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20 6e   by a database n
19440 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e  ame, a dot, then
19450 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a   the table name:
19460 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68   ID.ID..**.** Th
19470 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74  e jointype start
19480 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68  s out showing th
19490 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77  e join type betw
194a0 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20  een the current 
194b0 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65  table.** and the
194c0 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74   next table on t
194d0 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61  he list.  The pa
194e0 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65 20  rser builds the 
194f0 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a  list this way..*
19500 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72 63  * But sqlite3Src
19510 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70  ListShiftJoinTyp
19520 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74 73  e() later shifts
19530 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73   the jointypes s
19540 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a  o that each.** j
19550 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73 65  ointype expresse
19560 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65  s the join betwe
19570 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64  en the table and
19580 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74 61   the previous ta
19590 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68  ble..**.** In th
195a0 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c  e colUsed field,
195b0 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20   the high-order 
195c0 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73 20  bit (bit 63) is 
195d0 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c 65  set if the table
195e0 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72  .** contains mor
195f0 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e  e than 63 column
19600 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20  s and the 64-th 
19610 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20  or later column 
19620 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75  is used..*/.stru
19630 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69  ct SrcList {.  i
19640 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20  nt nSrc;        
19650 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62  /* Number of tab
19660 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69 65  les or subquerie
19670 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c  s in the FROM cl
19680 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41  ause */.  u32 nA
19690 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75  lloc;      /* Nu
196a0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
196b0 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d  allocated in a[]
196c0 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75   below */.  stru
196d0 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20  ct SrcList_item 
196e0 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53  {.    Schema *pS
196f0 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d  chema;  /* Schem
19700 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73 20  a to which this 
19710 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f  item is fixed */
19720 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61  .    char *zData
19730 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f  base;  /* Name o
19740 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69  f database holdi
19750 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
19760 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
19770 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
19780 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  f the table */. 
19790 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b     char *zAlias;
197a0 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20       /* The "B" 
197b0 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53 20  part of a "A AS 
197c0 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d  B" phrase.  zNam
197d0 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a  e is the "A" */.
197e0 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b      Table *pTab;
197f0 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20        /* An SQL 
19800 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64  table correspond
19810 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a  ing to zName */.
19820 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c      Select *pSel
19830 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43  ect;  /* A SELEC
19840 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64  T statement used
19850 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74   in place of a t
19860 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20  able name */.   
19870 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62   int addrFillSub
19880 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66  ;  /* Address of
19890 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d   subroutine to m
198a0 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75 65  anifest a subque
198b0 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ry */.    int re
198c0 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52  gReturn;    /* R
198d0 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20  egister holding 
198e0 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f  return address o
198f0 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f  f addrFillSub */
19900 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
19910 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74  lt;    /* Regist
19920 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75  ers holding resu
19930 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74  lts of a co-rout
19940 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ine */.    struc
19950 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69  t {.      u8 joi
19960 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54  ntype;      /* T
19970 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77  ype of join betw
19980 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61  een this table a
19990 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  nd the previous 
199a0 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
199b0 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b  d notIndexed :1;
199c0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
199d0 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e  here is a NOT IN
199e0 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a  DEXED clause */.
199f0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69        unsigned i
19a00 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20  sIndexedBy :1;  
19a10 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72   /* True if ther
19a20 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20  e is an INDEXED 
19a30 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20  BY clause */.   
19a40 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61     unsigned isTa
19a50 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a  bFunc :1;     /*
19a60 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76   True if table-v
19a70 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73  alued-function s
19a80 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75  yntax */.      u
19a90 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c  nsigned isCorrel
19aa0 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75  ated :1;  /* Tru
19ab0 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20 69  e if sub-query i
19ac0 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a  s correlated */.
19ad0 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76        unsigned v
19ae0 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20  iaCoroutine :1; 
19af0 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20   /* Implemented 
19b00 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  as a co-routine 
19b10 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65  */.      unsigne
19b20 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a 31  d isRecursive :1
19b30 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20  ;   /* True for 
19b40 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72 65  recursive refere
19b50 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20  nce in WITH */. 
19b60 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66     } fg;.#ifndef
19b70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
19b80 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c  LAIN.    u8 iSel
19b90 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66  ectId;     /* If
19ba0 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65   pSelect!=0, the
19bb0 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73   id of the sub-s
19bc0 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a  elect in EQP */.
19bd0 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69  #endif.    int i
19be0 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20  Cursor;      /* 
19bf0 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72 20  The VDBE cursor 
19c00 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61  number used to a
19c10 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c 65  ccess this table
19c20 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f   */.    Expr *pO
19c30 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  n;        /* The
19c40 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20   ON clause of a 
19c50 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69  join */.    IdLi
19c60 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a  st *pUsing;   /*
19c70 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73   The USING claus
19c80 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20  e of a join */. 
19c90 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73     Bitmask colUs
19ca0 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31  ed;  /* Bit N (1
19cb0 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75  <<N) set if colu
19cc0 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20  mn N of pTab is 
19cd0 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f  used */.    unio
19ce0 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  n {.      char *
19cf0 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f  zIndexedBy;    /
19d00 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f  * Identifier fro
19d10 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a  m "INDEXED BY <z
19d20 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a  Index>" clause *
19d30 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73 74  /.      ExprList
19d40 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20   *pFuncArg;  /* 
19d50 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62  Arguments to tab
19d60 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
19d70 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a  on */.    } u1;.
19d80 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e      Index *pIBIn
19d90 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73  dex;  /* Index s
19da0 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73 70  tructure corresp
19db0 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e  onding to u1.zIn
19dc0 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61  dexedBy */.  } a
19dd0 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20  [1];            
19de0 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f   /* One entry fo
19df0 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69 65  r each identifie
19e00 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f  r on the list */
19e10 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69  .};../*.** Permi
19e20 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74  tted values of t
19e30 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69  he SrcList.a.joi
19e40 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23  ntype field.*/.#
19e50 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20  define JT_INNER 
19e60 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a      0x0001    /*
19e70 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e   Any kind of inn
19e80 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e  er or cross join
19e90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43   */.#define JT_C
19ea0 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32 20  ROSS     0x0002 
19eb0 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75     /* Explicit u
19ec0 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20  se of the CROSS 
19ed0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
19ee0 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20  ne JT_NATURAL   
19ef0 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75  0x0004    /* Tru
19f00 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c  e for a "natural
19f10 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e  " join */.#defin
19f20 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30  e JT_LEFT      0
19f30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74  x0008    /* Left
19f40 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23   outer join */.#
19f50 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20  define JT_RIGHT 
19f60 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a      0x0010    /*
19f70 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69   Right outer joi
19f80 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
19f90 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32 30  OUTER     0x0020
19fa0 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45      /* The "OUTE
19fb0 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72  R" keyword is pr
19fc0 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esent */.#define
19fd0 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78   JT_ERROR     0x
19fe0 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f  0040    /* unkno
19ff0 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65  wn or unsupporte
1a000 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a  d join type */..
1a010 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70  ./*.** Flags app
1a020 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68 65  ropriate for the
1a030 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61   wctrlFlags para
1a040 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33  meter of sqlite3
1a050 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20  WhereBegin().** 
1a060 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e 66  and the WhereInf
1a070 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d  o.wctrlFlags mem
1a080 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  ber..**.** Value
1a090 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
1a0a0 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
1a0b0 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45  t()):.**     WHE
1a0c0 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d  RE_USE_LIMIT  ==
1a0d0 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a   SF_FixedLimit.*
1a0e0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a0f0 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20  ORDERBY_NORMAL  
1a100 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70   0x0000 /* No-op
1a110 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1a120 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20  E_ORDERBY_MIN   
1a130 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44     0x0001 /* ORD
1a140 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1a150 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20   for min() func 
1a160 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a170 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20  _ORDERBY_MAX    
1a180 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45    0x0002 /* ORDE
1a190 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20  R BY processing 
1a1a0 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a  for max() func *
1a1b0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a1c0 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44 20  ONEPASS_DESIRED 
1a1d0 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20   0x0004 /* Want 
1a1e0 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55  to do one-pass U
1a1f0 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a  PDATE/DELETE */.
1a200 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1a210 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30  EPASS_MULTIROW 0
1a220 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53  x0008 /* ONEPASS
1a230 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74   is ok with mult
1a240 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1a250 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49  fine WHERE_DUPLI
1a260 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30  CATES_OK    0x00
1a270 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75  10 /* Ok to retu
1a280 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68  rn a row more th
1a290 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69  an once */.#defi
1a2a0 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43  ne WHERE_OR_SUBC
1a2b0 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32 30  LAUSE     0x0020
1a2c0 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61   /* Processing a
1a2d0 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70 61   sub-WHERE as pa
1a2e0 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20  rt of.          
1a2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a300 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74              ** t
1a310 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69  he OR optimizati
1a320 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  on  */.#define W
1a330 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20  HERE_GROUPBY    
1a340 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20        0x0040 /* 
1a350 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61 6c  pOrderBy is real
1a360 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  ly a GROUP BY */
1a370 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1a380 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20 20  ISTINCTBY       
1a390 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72  0x0080 /* pOrder
1a3a0 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44  by is really a D
1a3b0 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a  ISTINCT clause *
1a3c0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a3d0 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20  WANT_DISTINCT   
1a3e0 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f   0x0100 /* All o
1a3f0 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62  utput needs to b
1a400 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64  e distinct */.#d
1a410 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54  efine WHERE_SORT
1a420 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78 30  BYGROUP      0x0
1a430 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73  200 /* Support s
1a440 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72  qlite3WhereIsSor
1a450 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ted() */.#define
1a460 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c   WHERE_SEEK_TABL
1a470 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20 2f  E       0x0400 /
1a480 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73  * Do not defer s
1a490 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62  eeks on main tab
1a4a0 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  le */.#define WH
1a4b0 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49  ERE_ORDERBY_LIMI
1a4c0 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f  T    0x0800 /* O
1a4d0 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20  RDERBY+LIMIT on 
1a4e0 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a  the inner loop *
1a4f0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1a500 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1a510 20 30 78 31 30 30 30 20 20 20 20 6e 6f 74 20 63   0x1000    not c
1a520 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1a530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a540 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20           /*     
1a550 30 78 32 30 30 30 20 20 20 20 6e 6f 74 20 63 75  0x2000    not cu
1a560 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a  rrently used */.
1a570 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 55 53  #define WHERE_US
1a580 45 5f 4c 49 4d 49 54 20 20 20 20 20 20 20 20 30  E_LIMIT        0
1a590 78 34 30 30 30 20 2f 2a 20 55 73 65 20 74 68 65  x4000 /* Use the
1a5a0 20 4c 49 4d 49 54 20 69 6e 20 63 6f 73 74 20 65   LIMIT in cost e
1a5b0 73 74 69 6d 61 74 65 73 20 2a 2f 0a 20 20 20 20  stimates */.    
1a5c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a5d0 20 20 20 20 2f 2a 20 20 20 20 20 30 78 38 30 30      /*     0x800
1a5e0 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1a5f0 6c 79 20 75 73 65 64 20 2a 2f 0a 0a 2f 2a 20 41  ly used */../* A
1a600 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61  llowed return va
1a610 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65  lues from sqlite
1a620 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
1a630 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ().*/.#define WH
1a640 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4e 4f 4f  ERE_DISTINCT_NOO
1a650 50 20 20 20 20 20 20 30 20 20 2f 2a 20 44 49 53  P      0  /* DIS
1a660 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 6e 6f  TINCT keyword no
1a670 74 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e  t used */.#defin
1a680 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1a690 5f 55 4e 49 51 55 45 20 20 20 20 31 20 20 2f 2a  _UNIQUE    1  /*
1a6a0 20 4e 6f 20 64 75 70 6c 69 63 61 74 65 73 20 2a   No duplicates *
1a6b0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a6c0 44 49 53 54 49 4e 43 54 5f 4f 52 44 45 52 45 44  DISTINCT_ORDERED
1a6d0 20 20 20 32 20 20 2f 2a 20 41 6c 6c 20 64 75 70     2  /* All dup
1a6e0 6c 69 63 61 74 65 73 20 61 72 65 20 61 64 6a 61  licates are adja
1a6f0 63 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  cent */.#define 
1a700 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 55  WHERE_DISTINCT_U
1a710 4e 4f 52 44 45 52 45 44 20 33 20 20 2f 2a 20 44  NORDERED 3  /* D
1a720 75 70 6c 69 63 61 74 65 73 20 61 72 65 20 73 63  uplicates are sc
1a730 61 74 74 65 72 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a  attered */../*.*
1a740 2a 20 41 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  * A NameContext 
1a750 64 65 66 69 6e 65 73 20 61 20 63 6f 6e 74 65 78  defines a contex
1a760 74 20 69 6e 20 77 68 69 63 68 20 74 6f 20 72 65  t in which to re
1a770 73 6f 6c 76 65 20 74 61 62 6c 65 20 61 6e 64 20  solve table and 
1a780 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61 6d 65 73 2e  column.** names.
1a790 20 20 54 68 65 20 63 6f 6e 74 65 78 74 20 63 6f    The context co
1a7a0 6e 73 69 73 74 73 20 6f 66 20 61 20 6c 69 73 74  nsists of a list
1a7b0 20 6f 66 20 74 61 62 6c 65 73 20 28 74 68 65 20   of tables (the 
1a7c0 70 53 72 63 4c 69 73 74 29 20 66 69 65 6c 64 20  pSrcList) field 
1a7d0 61 6e 64 0a 2a 2a 20 61 20 6c 69 73 74 20 6f 66  and.** a list of
1a7e0 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1a7f0 6e 20 28 70 45 4c 69 73 74 29 2e 20 20 54 68 65  n (pEList).  The
1a800 20 6e 61 6d 65 64 20 65 78 70 72 65 73 73 69 6f   named expressio
1a810 6e 20 6c 69 73 74 20 6d 61 79 0a 2a 2a 20 62 65  n list may.** be
1a820 20 4e 55 4c 4c 2e 20 20 54 68 65 20 70 53 72 63   NULL.  The pSrc
1a830 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
1a840 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
1a850 6f 66 20 61 20 53 45 4c 45 43 54 20 6f 72 0a 2a  of a SELECT or.*
1a860 2a 20 74 6f 20 74 68 65 20 74 61 62 6c 65 20 62  * to the table b
1a870 65 69 6e 67 20 6f 70 65 72 61 74 65 64 20 6f 6e  eing operated on
1a880 20 62 79 20 49 4e 53 45 52 54 2c 20 55 50 44 41   by INSERT, UPDA
1a890 54 45 2c 20 6f 72 20 44 45 4c 45 54 45 2e 20 20  TE, or DELETE.  
1a8a0 54 68 65 0a 2a 2a 20 70 45 4c 69 73 74 20 63 6f  The.** pEList co
1a8b0 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65  rresponds to the
1a8c0 20 72 65 73 75 6c 74 20 73 65 74 20 6f 66 20 61   result set of a
1a8d0 20 53 45 4c 45 43 54 20 61 6e 64 20 69 73 20 4e   SELECT and is N
1a8e0 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f 74 68 65 72  ULL for.** other
1a8f0 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a   statements..**.
1a900 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 73 20  ** NameContexts 
1a910 63 61 6e 20 62 65 20 6e 65 73 74 65 64 2e 20 20  can be nested.  
1a920 57 68 65 6e 20 72 65 73 6f 6c 76 69 6e 67 20 6e  When resolving n
1a930 61 6d 65 73 2c 20 74 68 65 20 69 6e 6e 65 72 2d  ames, the inner-
1a940 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74 65 78 74 20  most.** context 
1a950 69 73 20 73 65 61 72 63 68 65 64 20 66 69 72 73  is searched firs
1a960 74 2e 20 20 49 66 20 6e 6f 20 6d 61 74 63 68 20  t.  If no match 
1a970 69 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 65  is found, the ne
1a980 78 74 20 6f 75 74 65 72 0a 2a 2a 20 63 6f 6e 74  xt outer.** cont
1a990 65 78 74 20 69 73 20 63 68 65 63 6b 65 64 2e 20  ext is checked. 
1a9a0 20 49 66 20 74 68 65 72 65 20 69 73 20 73 74 69   If there is sti
1a9b0 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c 20 74 68 65  ll no match, the
1a9c0 20 6e 65 78 74 20 63 6f 6e 74 65 78 74 0a 2a 2a   next context.**
1a9d0 20 69 73 20 63 68 65 63 6b 65 64 2e 20 20 54 68   is checked.  Th
1a9e0 69 73 20 70 72 6f 63 65 73 73 20 63 6f 6e 74 69  is process conti
1a9f0 6e 75 65 73 20 75 6e 74 69 6c 20 65 69 74 68 65  nues until eithe
1aa00 72 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  r a match is fou
1aa10 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c 20 63 6f 6e  nd.** or all con
1aa20 74 65 78 74 73 20 61 72 65 20 63 68 65 63 6b 2e  texts are check.
1aa30 20 20 57 68 65 6e 20 61 20 6d 61 74 63 68 20 69    When a match i
1aa40 73 20 66 6f 75 6e 64 2c 20 74 68 65 20 6e 52 65  s found, the nRe
1aa50 66 20 6d 65 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  f member of.** t
1aa60 68 65 20 63 6f 6e 74 65 78 74 20 63 6f 6e 74 61  he context conta
1aa70 69 6e 69 6e 67 20 74 68 65 20 6d 61 74 63 68 20  ining the match 
1aa80 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64 2e 0a  is incremented..
1aa90 2a 2a 0a 2a 2a 20 45 61 63 68 20 73 75 62 71 75  **.** Each subqu
1aaa0 65 72 79 20 67 65 74 73 20 61 20 6e 65 77 20 4e  ery gets a new N
1aab0 61 6d 65 43 6f 6e 74 65 78 74 2e 20 20 54 68 65  ameContext.  The
1aac0 20 70 4e 65 78 74 20 66 69 65 6c 64 20 70 6f 69   pNext field poi
1aad0 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 4e 61  nts to the.** Na
1aae0 6d 65 43 6f 6e 74 65 78 74 20 69 6e 20 74 68 65  meContext in the
1aaf0 20 70 61 72 65 6e 74 20 71 75 65 72 79 2e 20 20   parent query.  
1ab00 54 68 75 73 20 74 68 65 20 70 72 6f 63 65 73 73  Thus the process
1ab10 20 6f 66 20 73 63 61 6e 6e 69 6e 67 20 74 68 65   of scanning the
1ab20 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1ab30 6c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73  list corresponds
1ab40 20 74 6f 20 73 65 61 72 63 68 69 6e 67 20 74 68   to searching th
1ab50 72 6f 75 67 68 20 73 75 63 63 65 73 73 69 76 65  rough successive
1ab60 6c 79 20 6f 75 74 65 72 0a 2a 2a 20 73 75 62 71  ly outer.** subq
1ab70 75 65 72 69 65 73 20 6c 6f 6f 6b 69 6e 67 20 66  ueries looking f
1ab80 6f 72 20 61 20 6d 61 74 63 68 2e 0a 2a 2f 0a 73  or a match..*/.s
1ab90 74 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78  truct NameContex
1aba0 74 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  t {.  Parse *pPa
1abb0 72 73 65 3b 20 20 20 20 20 20 20 2f 2a 20 54 68  rse;       /* Th
1abc0 65 20 70 61 72 73 65 72 20 2a 2f 0a 20 20 53 72  e parser */.  Sr
1abd0 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
1abe0 20 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72     /* One or mor
1abf0 65 20 74 61 62 6c 65 73 20 75 73 65 64 20 74 6f  e tables used to
1ac00 20 72 65 73 6f 6c 76 65 20 6e 61 6d 65 73 20 2a   resolve names *
1ac10 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
1ac20 4c 69 73 74 3b 20 20 20 20 2f 2a 20 4f 70 74 69  List;    /* Opti
1ac30 6f 6e 61 6c 20 6c 69 73 74 20 6f 66 20 72 65 73  onal list of res
1ac40 75 6c 74 2d 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult-set columns 
1ac50 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20 2a 70 41  */.  AggInfo *pA
1ac60 67 67 49 6e 66 6f 3b 20 20 20 2f 2a 20 49 6e 66  ggInfo;   /* Inf
1ac70 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 61  ormation about a
1ac80 67 67 72 65 67 61 74 65 73 20 61 74 20 74 68 69  ggregates at thi
1ac90 73 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 4e 61 6d  s level */.  Nam
1aca0 65 43 6f 6e 74 65 78 74 20 2a 70 4e 65 78 74 3b  eContext *pNext;
1acb0 20 20 2f 2a 20 4e 65 78 74 20 6f 75 74 65 72 20    /* Next outer 
1acc0 6e 61 6d 65 20 63 6f 6e 74 65 78 74 2e 20 20 4e  name context.  N
1acd0 55 4c 4c 20 66 6f 72 20 6f 75 74 65 72 6d 6f 73  ULL for outermos
1ace0 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b  t */.  int nRef;
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1ad00 75 6d 62 65 72 20 6f 66 20 6e 61 6d 65 73 20 72  umber of names r
1ad10 65 73 6f 6c 76 65 64 20 62 79 20 74 68 69 73 20  esolved by this 
1ad20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 69 6e 74  context */.  int
1ad30 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20 20   nErr;          
1ad40 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
1ad50 72 72 6f 72 73 20 65 6e 63 6f 75 6e 74 65 72 65  rrors encountere
1ad60 64 20 77 68 69 6c 65 20 72 65 73 6f 6c 76 69 6e  d while resolvin
1ad70 67 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 75 31 36  g names */.  u16
1ad80 20 6e 63 46 6c 61 67 73 3b 20 20 20 20 20 20 20   ncFlags;       
1ad90 20 20 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72    /* Zero or mor
1ada0 65 20 4e 43 5f 2a 20 66 6c 61 67 73 20 64 65 66  e NC_* flags def
1adb0 69 6e 65 64 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  ined below */.};
1adc0 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
1add0 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 4e  values for the N
1ade0 61 6d 65 43 6f 6e 74 65 78 74 2c 20 6e 63 46 6c  ameContext, ncFl
1adf0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a  ags field..**.**
1ae00 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1ae10 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20  ts (all checked 
1ae20 76 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a  via assert()):.*
1ae30 2a 20 20 20 20 4e 43 5f 48 61 73 41 67 67 20 20  *    NC_HasAgg  
1ae40 20 20 3d 3d 20 53 46 5f 48 61 73 41 67 67 0a 2a    == SF_HasAgg.*
1ae50 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d 61 78 41 67  *    NC_MinMaxAg
1ae60 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67  g == SF_MinMaxAg
1ae70 67 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43  g == SQLITE_FUNC
1ae80 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a 2f 0a 23 64  _MINMAX.**.*/.#d
1ae90 65 66 69 6e 65 20 4e 43 5f 41 6c 6c 6f 77 41 67  efine NC_AllowAg
1aea0 67 20 20 30 78 30 30 30 31 20 20 2f 2a 20 41 67  g  0x0001  /* Ag
1aeb0 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e  gregate function
1aec0 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 68 65  s are allowed he
1aed0 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  re */.#define NC
1aee0 5f 50 61 72 74 49 64 78 20 20 20 30 78 30 30 30  _PartIdx   0x000
1aef0 32 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65  2  /* True if re
1af00 73 6f 6c 76 69 6e 67 20 61 20 70 61 72 74 69 61  solving a partia
1af10 6c 20 69 6e 64 65 78 20 57 48 45 52 45 20 2a 2f  l index WHERE */
1af20 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 73 43 68  .#define NC_IsCh
1af30 65 63 6b 20 20 20 30 78 30 30 30 34 20 20 2f 2a  eck   0x0004  /*
1af40 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1af50 6e 67 20 6e 61 6d 65 73 20 69 6e 20 61 20 43 48  ng names in a CH
1af60 45 43 4b 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ECK constraint *
1af70 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 6e 41  /.#define NC_InA
1af80 67 67 46 75 6e 63 20 30 78 30 30 30 38 20 20 2f  ggFunc 0x0008  /
1af90 2a 20 54 72 75 65 20 69 66 20 61 6e 61 6c 79 7a  * True if analyz
1afa0 69 6e 67 20 61 72 67 75 6d 65 6e 74 73 20 74 6f  ing arguments to
1afb0 20 61 6e 20 61 67 67 20 66 75 6e 63 20 2a 2f 0a   an agg func */.
1afc0 23 64 65 66 69 6e 65 20 4e 43 5f 48 61 73 41 67  #define NC_HasAg
1afd0 67 20 20 20 20 30 78 30 30 31 30 20 20 2f 2a 20  g    0x0010  /* 
1afe0 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 61 67 67 72  One or more aggr
1aff0 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20  egate functions 
1b000 73 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  seen */.#define 
1b010 4e 43 5f 49 64 78 45 78 70 72 20 20 20 30 78 30  NC_IdxExpr   0x0
1b020 30 32 30 20 20 2f 2a 20 54 72 75 65 20 69 66 20  020  /* True if 
1b030 72 65 73 6f 6c 76 69 6e 67 20 63 6f 6c 75 6d 6e  resolving column
1b040 73 20 6f 66 20 43 52 45 41 54 45 20 49 4e 44 45  s of CREATE INDE
1b050 58 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  X */.#define NC_
1b060 56 61 72 53 65 6c 65 63 74 20 30 78 30 30 34 30  VarSelect 0x0040
1b070 20 20 2f 2a 20 41 20 63 6f 72 72 65 6c 61 74 65    /* A correlate
1b080 64 20 73 75 62 71 75 65 72 79 20 68 61 73 20 62  d subquery has b
1b090 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  een seen */.#def
1b0a0 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67  ine NC_MinMaxAgg
1b0b0 20 30 78 31 30 30 30 20 20 2f 2a 20 6d 69 6e 2f   0x1000  /* min/
1b0c0 6d 61 78 20 61 67 67 72 65 67 61 74 65 73 20 73  max aggregates s
1b0d0 65 65 6e 2e 20 20 53 65 65 20 6e 6f 74 65 20 61  een.  See note a
1b0e0 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  bove */../*.** A
1b0f0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1b100 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
1b110 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 61  cture contains a
1b120 6c 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  ll information.*
1b130 2a 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65  * needed to gene
1b140 72 61 74 65 20 63 6f 64 65 20 66 6f 72 20 61 20  rate code for a 
1b150 73 69 6e 67 6c 65 20 53 45 4c 45 43 54 20 73 74  single SELECT st
1b160 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e  atement..**.** n
1b170 4c 69 6d 69 74 20 69 73 20 73 65 74 20 74 6f 20  Limit is set to 
1b180 2d 31 20 69 66 20 74 68 65 72 65 20 69 73 20 6e  -1 if there is n
1b190 6f 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2e 20  o LIMIT clause. 
1b1a0 20 6e 4f 66 66 73 65 74 20 69 73 20 73 65 74 20   nOffset is set 
1b1b0 74 6f 20 30 2e 0a 2a 2a 20 49 66 20 74 68 65 72  to 0..** If ther
1b1c0 65 20 69 73 20 61 20 4c 49 4d 49 54 20 63 6c 61  e is a LIMIT cla
1b1d0 75 73 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  use, the parser 
1b1e0 73 65 74 73 20 6e 4c 69 6d 69 74 20 74 6f 20 74  sets nLimit to t
1b1f0 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0a  he value of the.
1b200 2a 2a 20 6c 69 6d 69 74 20 61 6e 64 20 6e 4f 66  ** limit and nOf
1b210 66 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75  fset to the valu
1b220 65 20 6f 66 20 74 68 65 20 6f 66 66 73 65 74 20  e of the offset 
1b230 28 6f 72 20 30 20 69 66 20 74 68 65 72 65 20 69  (or 0 if there i
1b240 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66 73 65 74 29  s not.** offset)
1b250 2e 20 20 42 75 74 20 6c 61 74 65 72 20 6f 6e 2c  .  But later on,
1b260 20 6e 4c 69 6d 69 74 20 61 6e 64 20 6e 4f 66 66   nLimit and nOff
1b270 73 65 74 20 62 65 63 6f 6d 65 20 74 68 65 20 6d  set become the m
1b280 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f 6e 73 0a  emory locations.
1b290 2a 2a 20 69 6e 20 74 68 65 20 56 44 42 45 20 74  ** in the VDBE t
1b2a0 68 61 74 20 72 65 63 6f 72 64 20 74 68 65 20 6c  hat record the l
1b2b0 69 6d 69 74 20 61 6e 64 20 6f 66 66 73 65 74 20  imit and offset 
1b2c0 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a 0a 2a 2a 20  counters..**.** 
1b2d0 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 5d 20 65  addrOpenEphm[] e
1b2e0 6e 74 72 69 65 73 20 63 6f 6e 74 61 69 6e 20 74  ntries contain t
1b2f0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 4f 50  he address of OP
1b300 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f  _OpenEphemeral o
1b310 70 63 6f 64 65 73 2e 0a 2a 2a 20 54 68 65 73 65  pcodes..** These
1b320 20 61 64 64 72 65 73 73 65 73 20 6d 75 73 74 20   addresses must 
1b330 62 65 20 73 74 6f 72 65 64 20 73 6f 20 74 68 61  be stored so tha
1b340 74 20 77 65 20 63 61 6e 20 67 6f 20 62 61 63 6b  t we can go back
1b350 20 61 6e 64 20 66 69 6c 6c 20 69 6e 0a 2a 2a 20   and fill in.** 
1b360 74 68 65 20 50 34 5f 4b 45 59 49 4e 46 4f 20 61  the P4_KEYINFO a
1b370 6e 64 20 50 32 20 70 61 72 61 6d 65 74 65 72 73  nd P2 parameters
1b380 20 6c 61 74 65 72 2e 20 20 4e 65 69 74 68 65 72   later.  Neither
1b390 20 74 68 65 20 4b 65 79 49 6e 66 6f 20 6e 6f 72   the KeyInfo nor
1b3a0 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  .** the number o
1b3b0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 50 32 20  f columns in P2 
1b3c0 63 61 6e 20 62 65 20 63 6f 6d 70 75 74 65 64 20  can be computed 
1b3d0 61 74 20 74 68 65 20 73 61 6d 65 20 74 69 6d 65  at the same time
1b3e0 0a 2a 2a 20 61 73 20 74 68 65 20 4f 50 5f 4f 70  .** as the OP_Op
1b3f0 65 6e 45 70 68 6d 20 69 6e 73 74 72 75 63 74 69  enEphm instructi
1b400 6f 6e 20 69 73 20 63 6f 64 65 64 20 62 65 63 61  on is coded beca
1b410 75 73 65 20 6e 6f 74 0a 2a 2a 20 65 6e 6f 75 67  use not.** enoug
1b420 68 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62  h information ab
1b430 6f 75 74 20 74 68 65 20 63 6f 6d 70 6f 75 6e 64  out the compound
1b440 20 71 75 65 72 79 20 69 73 20 6b 6e 6f 77 6e 20   query is known 
1b450 61 74 20 74 68 61 74 20 70 6f 69 6e 74 2e 0a 2a  at that point..*
1b460 2a 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f  * The KeyInfo fo
1b470 72 20 61 64 64 72 4f 70 65 6e 54 72 61 6e 5b 30  r addrOpenTran[0
1b480 5d 20 61 6e 64 20 5b 31 5d 20 63 6f 6e 74 61 69  ] and [1] contai
1b490 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ns collating seq
1b4a0 75 65 6e 63 65 73 0a 2a 2a 20 66 6f 72 20 74 68  uences.** for th
1b4b0 65 20 72 65 73 75 6c 74 20 73 65 74 2e 20 20 54  e result set.  T
1b4c0 68 65 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61  he KeyInfo for a
1b4d0 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 20 63  ddrOpenEphm[2] c
1b4e0 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e  ontains collatin
1b4f0 67 0a 2a 2a 20 73 65 71 75 65 6e 63 65 73 20 66  g.** sequences f
1b500 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42 59 20  or the ORDER BY 
1b510 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
1b520 74 20 53 65 6c 65 63 74 20 7b 0a 20 20 45 78 70  t Select {.  Exp
1b530 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20  rList *pEList;  
1b540 20 20 20 20 2f 2a 20 54 68 65 20 66 69 65 6c 64      /* The field
1b550 73 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  s of the result 
1b560 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20  */.  u8 op;     
1b570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
1b580 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e 49 4f 4e 20  ne of: TK_UNION 
1b590 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e 54 45 52 53  TK_ALL TK_INTERS
1b5a0 45 43 54 20 54 4b 5f 45 58 43 45 50 54 20 2a 2f  ECT TK_EXCEPT */
1b5b0 0a 20 20 4c 6f 67 45 73 74 20 6e 53 65 6c 65 63  .  LogEst nSelec
1b5c0 74 52 6f 77 3b 20 20 20 20 20 2f 2a 20 45 73 74  tRow;     /* Est
1b5d0 69 6d 61 74 65 64 20 6e 75 6d 62 65 72 20 6f 66  imated number of
1b5e0 20 72 65 73 75 6c 74 20 72 6f 77 73 20 2a 2f 0a   result rows */.
1b5f0 20 20 75 33 32 20 73 65 6c 46 6c 61 67 73 3b 20    u32 selFlags; 
1b600 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
1b610 6f 75 73 20 53 46 5f 2a 20 76 61 6c 75 65 73 20  ous SF_* values 
1b620 2a 2f 0a 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  */.  int iLimit,
1b630 20 69 4f 66 66 73 65 74 3b 20 20 20 2f 2a 20 4d   iOffset;   /* M
1b640 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 73 20  emory registers 
1b650 68 6f 6c 64 69 6e 67 20 4c 49 4d 49 54 20 26 20  holding LIMIT & 
1b660 4f 46 46 53 45 54 20 63 6f 75 6e 74 65 72 73 20  OFFSET counters 
1b670 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
1b680 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 63 68 61  CE_ENABLED.  cha
1b690 72 20 7a 53 65 6c 4e 61 6d 65 5b 31 32 5d 3b 20  r zSelName[12]; 
1b6a0 20 20 20 20 2f 2a 20 53 79 6d 62 6f 6c 69 63 20      /* Symbolic 
1b6b0 6e 61 6d 65 20 6f 66 20 74 68 69 73 20 53 45 4c  name of this SEL
1b6c0 45 43 54 20 75 73 65 20 66 6f 72 20 64 65 62 75  ECT use for debu
1b6d0 67 67 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66 0a  gging */.#endif.
1b6e0 20 20 69 6e 74 20 61 64 64 72 4f 70 65 6e 45 70    int addrOpenEp
1b6f0 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20 4f 50 5f 4f  hm[2];   /* OP_O
1b700 70 65 6e 45 70 68 65 6d 20 6f 70 63 6f 64 65 73  penEphem opcodes
1b710 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 69 73   related to this
1b720 20 73 65 6c 65 63 74 20 2a 2f 0a 20 20 53 72 63   select */.  Src
1b730 4c 69 73 74 20 2a 70 53 72 63 3b 20 20 20 20 20  List *pSrc;     
1b740 20 20 20 20 2f 2a 20 54 68 65 20 46 52 4f 4d 20      /* The FROM 
1b750 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1b760 20 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20   *pWhere;       
1b770 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45 20     /* The WHERE 
1b780 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72  clause */.  Expr
1b790 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
1b7a0 20 20 20 2f 2a 20 54 68 65 20 47 52 4f 55 50 20     /* The GROUP 
1b7b0 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 45  BY clause */.  E
1b7c0 78 70 72 20 2a 70 48 61 76 69 6e 67 3b 20 20 20  xpr *pHaving;   
1b7d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 48 41 56        /* The HAV
1b7e0 49 4e 47 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ING clause */.  
1b7f0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1b800 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 4f 52  By;    /* The OR
1b810 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  DER BY clause */
1b820 0a 20 20 53 65 6c 65 63 74 20 2a 70 50 72 69 6f  .  Select *pPrio
1b830 72 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 72 69  r;        /* Pri
1b840 6f 72 20 73 65 6c 65 63 74 20 69 6e 20 61 20 63  or select in a c
1b850 6f 6d 70 6f 75 6e 64 20 73 65 6c 65 63 74 20 73  ompound select s
1b860 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20 20 53 65  tatement */.  Se
1b870 6c 65 63 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  lect *pNext;    
1b880 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 73 65 6c       /* Next sel
1b890 65 63 74 20 74 6f 20 74 68 65 20 6c 65 66 74 20  ect to the left 
1b8a0 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 2a 2f  in a compound */
1b8b0 0a 20 20 45 78 70 72 20 2a 70 4c 69 6d 69 74 3b  .  Expr *pLimit;
1b8c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 49 4d            /* LIM
1b8d0 49 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e  IT expression. N
1b8e0 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73  ULL means not us
1b8f0 65 64 2e 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  ed. */.  Expr *p
1b900 4f 66 66 73 65 74 3b 20 20 20 20 20 20 20 20 20  Offset;         
1b910 2f 2a 20 4f 46 46 53 45 54 20 65 78 70 72 65 73  /* OFFSET expres
1b920 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73  sion. NULL means
1b930 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20   not used. */.  
1b940 57 69 74 68 20 2a 70 57 69 74 68 3b 20 20 20 20  With *pWith;    
1b950 20 20 20 20 20 20 20 2f 2a 20 57 49 54 48 20 63         /* WITH c
1b960 6c 61 75 73 65 20 61 74 74 61 63 68 65 64 20 74  lause attached t
1b970 6f 20 74 68 69 73 20 73 65 6c 65 63 74 2e 20 4f  o this select. O
1b980 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f  r NULL. */.};../
1b990 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c  *.** Allowed val
1b9a0 75 65 73 20 66 6f 72 20 53 65 6c 65 63 74 2e 73  ues for Select.s
1b9b0 65 6c 46 6c 61 67 73 2e 20 20 54 68 65 20 22 53  elFlags.  The "S
1b9c0 46 22 20 70 72 65 66 69 78 20 73 74 61 6e 64 73  F" prefix stands
1b9d0 20 66 6f 72 0a 2a 2a 20 22 53 65 6c 65 63 74 20   for.** "Select 
1b9e0 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c  Flag"..**.** Val
1b9f0 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ue constraints (
1ba00 61 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20  all checked via 
1ba10 61 73 73 65 72 74 28 29 29 0a 2a 2a 20 20 20 20  assert()).**    
1ba20 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 3d   SF_HasAgg     =
1ba30 3d 20 4e 43 5f 48 61 73 41 67 67 0a 2a 2a 20 20  = NC_HasAgg.**  
1ba40 20 20 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20     SF_MinMaxAgg 
1ba50 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61 78 41 67 67   == NC_MinMaxAgg
1ba60 20 20 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46       == SQLITE_F
1ba70 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 20 20 20  UNC_MINMAX.**   
1ba80 20 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 20    SF_FixedLimit 
1ba90 3d 3d 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  == WHERE_USE_LIM
1baa0 49 54 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  IT.*/.#define SF
1bab0 5f 44 69 73 74 69 6e 63 74 20 20 20 20 20 20 20  _Distinct       
1bac0 30 78 30 30 30 30 31 20 20 2f 2a 20 4f 75 74 70  0x00001  /* Outp
1bad0 75 74 20 73 68 6f 75 6c 64 20 62 65 20 44 49 53  ut should be DIS
1bae0 54 49 4e 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  TINCT */.#define
1baf0 20 53 46 5f 41 6c 6c 20 20 20 20 20 20 20 20 20   SF_All         
1bb00 20 20 20 30 78 30 30 30 30 32 20 20 2f 2a 20 49     0x00002  /* I
1bb10 6e 63 6c 75 64 65 73 20 74 68 65 20 41 4c 4c 20  ncludes the ALL 
1bb20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
1bb30 6e 65 20 53 46 5f 52 65 73 6f 6c 76 65 64 20 20  ne SF_Resolved  
1bb40 20 20 20 20 20 30 78 30 30 30 30 34 20 20 2f 2a       0x00004  /*
1bb50 20 49 64 65 6e 74 69 66 69 65 72 73 20 68 61 76   Identifiers hav
1bb60 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64 20  e been resolved 
1bb70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 67  */.#define SF_Ag
1bb80 67 72 65 67 61 74 65 20 20 20 20 20 20 30 78 30  gregate      0x0
1bb90 30 30 30 38 20 20 2f 2a 20 43 6f 6e 74 61 69 6e  0008  /* Contain
1bba0 73 20 61 67 67 20 66 75 6e 63 74 69 6f 6e 73 20  s agg functions 
1bbb0 6f 72 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f  or a GROUP BY */
1bbc0 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 41  .#define SF_HasA
1bbd0 67 67 20 20 20 20 20 20 20 20 20 30 78 30 30 30  gg         0x000
1bbe0 31 30 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20  10  /* Contains 
1bbf0 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1bc00 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ons */.#define S
1bc10 46 5f 55 73 65 73 45 70 68 65 6d 65 72 61 6c 20  F_UsesEphemeral 
1bc20 20 30 78 30 30 30 32 30 20 20 2f 2a 20 55 73 65   0x00020  /* Use
1bc30 73 20 74 68 65 20 4f 70 65 6e 45 70 68 65 6d 65  s the OpenEpheme
1bc40 72 61 6c 20 6f 70 63 6f 64 65 20 2a 2f 0a 23 64  ral opcode */.#d
1bc50 65 66 69 6e 65 20 53 46 5f 45 78 70 61 6e 64 65  efine SF_Expande
1bc60 64 20 20 20 20 20 20 20 30 78 30 30 30 34 30 20  d       0x00040 
1bc70 20 2f 2a 20 73 71 6c 69 74 65 33 53 65 6c 65 63   /* sqlite3Selec
1bc80 74 45 78 70 61 6e 64 28 29 20 63 61 6c 6c 65 64  tExpand() called
1bc90 20 6f 6e 20 74 68 69 73 20 2a 2f 0a 23 64 65 66   on this */.#def
1bca0 69 6e 65 20 53 46 5f 48 61 73 54 79 70 65 49 6e  ine SF_HasTypeIn
1bcb0 66 6f 20 20 20 20 30 78 30 30 30 38 30 20 20 2f  fo    0x00080  /
1bcc0 2a 20 46 52 4f 4d 20 73 75 62 71 75 65 72 69 65  * FROM subquerie
1bcd0 73 20 68 61 76 65 20 54 61 62 6c 65 20 6d 65 74  s have Table met
1bce0 61 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e 65  adata */.#define
1bcf0 20 53 46 5f 43 6f 6d 70 6f 75 6e 64 20 20 20 20   SF_Compound    
1bd00 20 20 20 30 78 30 30 31 30 30 20 20 2f 2a 20 50     0x00100  /* P
1bd10 61 72 74 20 6f 66 20 61 20 63 6f 6d 70 6f 75 6e  art of a compoun
1bd20 64 20 71 75 65 72 79 20 2a 2f 0a 23 64 65 66 69  d query */.#defi
1bd30 6e 65 20 53 46 5f 56 61 6c 75 65 73 20 20 20 20  ne SF_Values    
1bd40 20 20 20 20 20 30 78 30 30 32 30 30 20 20 2f 2a       0x00200  /*
1bd50 20 53 79 6e 74 68 65 73 69 7a 65 64 20 66 72 6f   Synthesized fro
1bd60 6d 20 56 41 4c 55 45 53 20 63 6c 61 75 73 65 20  m VALUES clause 
1bd70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 75  */.#define SF_Mu
1bd80 6c 74 69 56 61 6c 75 65 20 20 20 20 20 30 78 30  ltiValue     0x0
1bd90 30 34 30 30 20 20 2f 2a 20 53 69 6e 67 6c 65 20  0400  /* Single 
1bda0 56 41 4c 55 45 53 20 74 65 72 6d 20 77 69 74 68  VALUES term with
1bdb0 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a   multiple rows *
1bdc0 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4e 65 73  /.#define SF_Nes
1bdd0 74 65 64 46 72 6f 6d 20 20 20 20 20 30 78 30 30  tedFrom     0x00
1bde0 38 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20  800  /* Part of 
1bdf0 61 20 70 61 72 65 6e 74 68 65 73 69 7a 65 64 20  a parenthesized 
1be00 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 23  FROM clause */.#
1be10 64 65 66 69 6e 65 20 53 46 5f 4d 69 6e 4d 61 78  define SF_MinMax
1be20 41 67 67 20 20 20 20 20 20 30 78 30 31 30 30 30  Agg      0x01000
1be30 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 63    /* Aggregate c
1be40 6f 6e 74 61 69 6e 69 6e 67 20 6d 69 6e 28 29 20  ontaining min() 
1be50 6f 72 20 6d 61 78 28 29 20 2a 2f 0a 23 64 65 66  or max() */.#def
1be60 69 6e 65 20 53 46 5f 52 65 63 75 72 73 69 76 65  ine SF_Recursive
1be70 20 20 20 20 20 20 30 78 30 32 30 30 30 20 20 2f        0x02000  /
1be80 2a 20 54 68 65 20 72 65 63 75 72 73 69 76 65 20  * The recursive 
1be90 70 61 72 74 20 6f 66 20 61 20 72 65 63 75 72 73  part of a recurs
1bea0 69 76 65 20 43 54 45 20 2a 2f 0a 23 64 65 66 69  ive CTE */.#defi
1beb0 6e 65 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74  ne SF_FixedLimit
1bec0 20 20 20 20 20 30 78 30 34 30 30 30 20 20 2f 2a       0x04000  /*
1bed0 20 6e 53 65 6c 65 63 74 52 6f 77 20 73 65 74 20   nSelectRow set 
1bee0 62 79 20 61 20 63 6f 6e 73 74 61 6e 74 20 4c 49  by a constant LI
1bef0 4d 49 54 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  MIT */.#define S
1bf00 46 5f 4d 61 79 62 65 43 6f 6e 76 65 72 74 20 20  F_MaybeConvert  
1bf10 20 30 78 30 38 30 30 30 20 20 2f 2a 20 4e 65 65   0x08000  /* Nee
1bf20 64 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e  d convertCompoun
1bf30 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72  dSelectToSubquer
1bf40 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  y() */.#define S
1bf50 46 5f 43 6f 6e 76 65 72 74 65 64 20 20 20 20 20  F_Converted     
1bf60 20 30 78 31 30 30 30 30 20 20 2f 2a 20 42 79 20   0x10000  /* By 
1bf70 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1bf80 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1bf90 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  ) */.#define SF_
1bfa0 49 6e 63 6c 75 64 65 48 69 64 64 65 6e 20 20 30  IncludeHidden  0
1bfb0 78 32 30 30 30 30 20 20 2f 2a 20 49 6e 63 6c 75  x20000  /* Inclu
1bfc0 64 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e  de hidden column
1bfd0 73 20 69 6e 20 6f 75 74 70 75 74 20 2a 2f 0a 0a  s in output */..
1bfe0 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72 65 73 75 6c  ./*.** The resul
1bff0 74 73 20 6f 66 20 61 20 53 45 4c 45 43 54 20 63  ts of a SELECT c
1c000 61 6e 20 62 65 20 64 69 73 74 72 69 62 75 74 65  an be distribute
1c010 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
1c020 73 2c 20 61 73 20 64 65 66 69 6e 65 64 0a 2a 2a  s, as defined.**
1c030 20 62 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   by one of the f
1c040 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 2e  ollowing macros.
1c050 20 20 54 68 65 20 22 53 52 54 22 20 70 72 65 66    The "SRT" pref
1c060 69 78 20 6d 65 61 6e 73 20 22 53 45 4c 45 43 54  ix means "SELECT
1c070 20 52 65 73 75 6c 74 0a 2a 2a 20 54 79 70 65 22   Result.** Type"
1c080 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1c090 55 6e 69 6f 6e 20 20 20 20 20 20 20 53 74 6f 72  Union       Stor
1c0a0 65 20 72 65 73 75 6c 74 73 20 61 73 20 61 20 6b  e results as a k
1c0b0 65 79 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ey in a temporar
1c0c0 79 20 69 6e 64 65 78 0a 2a 2a 20 20 20 20 20 20  y index.**      
1c0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1c0e0 64 65 6e 74 69 66 69 65 64 20 62 79 20 70 44 65  dentified by pDe
1c0f0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a  st->iSDParm..**.
1c100 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 63 65 70  **     SRT_Excep
1c110 74 20 20 20 20 20 20 52 65 6d 6f 76 65 20 72 65  t      Remove re
1c120 73 75 6c 74 73 20 66 72 6f 6d 20 74 68 65 20 74  sults from the t
1c130 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 20 70  emporary index p
1c140 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1c150 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 78 69  *.**     SRT_Exi
1c160 73 74 73 20 20 20 20 20 20 53 74 6f 72 65 20 61  sts      Store a
1c170 20 31 20 69 6e 20 6d 65 6d 6f 72 79 20 63 65 6c   1 in memory cel
1c180 6c 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  l pDest->iSDParm
1c190 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 0a 2a   if the result.*
1c1a0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c1b0 20 20 20 20 20 20 73 65 74 20 69 73 20 6e 6f 74        set is not
1c1c0 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   empty..**.**   
1c1d0 20 20 53 52 54 5f 44 69 73 63 61 72 64 20 20 20    SRT_Discard   
1c1e0 20 20 54 68 72 6f 77 20 74 68 65 20 72 65 73 75    Throw the resu
1c1f0 6c 74 73 20 61 77 61 79 2e 20 20 54 68 69 73 20  lts away.  This 
1c200 69 73 20 75 73 65 64 20 62 79 20 53 45 4c 45 43  is used by SELEC
1c210 54 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  T.**            
1c220 20 20 20 20 20 20 20 20 20 73 74 61 74 65 6d 65           stateme
1c230 6e 74 73 20 77 69 74 68 69 6e 20 74 72 69 67 67  nts within trigg
1c240 65 72 73 20 77 68 6f 73 65 20 6f 6e 6c 79 20 70  ers whose only p
1c250 75 72 70 6f 73 65 20 69 73 0a 2a 2a 20 20 20 20  urpose is.**    
1c260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c270 20 74 68 65 20 73 69 64 65 2d 65 66 66 65 63 74   the side-effect
1c280 73 20 6f 66 20 66 75 6e 63 74 69 6f 6e 73 2e 0a  s of functions..
1c290 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68 65  **.** All of the
1c2a0 20 61 62 6f 76 65 20 61 72 65 20 66 72 65 65 20   above are free 
1c2b0 74 6f 20 69 67 6e 6f 72 65 20 74 68 65 69 72 20  to ignore their 
1c2c0 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1c2d0 20 54 68 6f 73 65 20 74 68 61 74 0a 2a 2a 20 66   Those that.** f
1c2e0 6f 6c 6c 6f 77 20 6d 75 73 74 20 68 6f 6e 6f 72  ollow must honor
1c2f0 20 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c   the ORDER BY cl
1c300 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ause..**.**     
1c310 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20  SRT_Output      
1c320 47 65 6e 65 72 61 74 65 20 61 20 72 6f 77 20 6f  Generate a row o
1c330 66 20 6f 75 74 70 75 74 20 28 75 73 69 6e 67 20  f output (using 
1c340 74 68 65 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  the OP_ResultRow
1c350 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1c360 20 20 20 20 20 20 20 20 6f 70 63 6f 64 65 29 20          opcode) 
1c370 66 6f 72 20 65 61 63 68 20 72 6f 77 20 69 6e 20  for each row in 
1c380 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 2e 0a  the result set..
1c390 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4d 65  **.**     SRT_Me
1c3a0 6d 20 20 20 20 20 20 20 20 20 4f 6e 6c 79 20 76  m         Only v
1c3b0 61 6c 69 64 20 69 66 20 74 68 65 20 72 65 73 75  alid if the resu
1c3c0 6c 74 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  lt is a single c
1c3d0 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20 20 20 20 20  olumn..**       
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 74                St
1c3f0 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 63 6f  ore the first co
1c400 6c 75 6d 6e 20 6f 66 20 74 68 65 20 66 69 72 73  lumn of the firs
1c410 74 20 72 65 73 75 6c 74 20 72 6f 77 0a 2a 2a 20  t result row.** 
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 69 6e 20 72 65 67 69 73 74 65 72 20      in register 
1c440 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 74  pDest->iSDParm t
1c450 68 65 6e 20 61 62 61 6e 64 6f 6e 20 74 68 65 20  hen abandon the 
1c460 72 65 73 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  rest.**         
1c470 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1c480 68 65 20 71 75 65 72 79 2e 20 20 54 68 69 73 20  he query.  This 
1c490 64 65 73 74 69 6e 61 74 69 6f 6e 20 69 6d 70 6c  destination impl
1c4a0 69 65 73 20 22 4c 49 4d 49 54 20 31 22 2e 0a 2a  ies "LIMIT 1"..*
1c4b0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 53 65 74  *.**     SRT_Set
1c4c0 20 20 20 20 20 20 20 20 20 54 68 65 20 72 65 73           The res
1c4d0 75 6c 74 20 6d 75 73 74 20 62 65 20 61 20 73 69  ult must be a si
1c4e0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 20 20 53 74  ngle column.  St
1c4f0 6f 72 65 20 65 61 63 68 0a 2a 2a 20 20 20 20 20  ore each.**     
1c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c510 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 61 73  row of result as
1c520 20 74 68 65 20 6b 65 79 20 69 6e 20 74 61 62 6c   the key in tabl
1c530 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1c540 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1c550 20 20 20 20 20 20 20 20 20 41 70 70 6c 79 20 74           Apply t
1c560 68 65 20 61 66 66 69 6e 69 74 79 20 70 44 65 73  he affinity pDes
1c570 74 2d 3e 61 66 66 53 64 73 74 20 62 65 66 6f 72  t->affSdst befor
1c580 65 20 73 74 6f 72 69 6e 67 0a 2a 2a 20 20 20 20  e storing.**    
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5a0 20 72 65 73 75 6c 74 73 2e 20 20 55 73 65 64 20   results.  Used 
1c5b0 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 22 49 4e  to implement "IN
1c5c0 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 0a   (SELECT ...)"..
1c5d0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45 70  **.**     SRT_Ep
1c5e0 68 65 6d 54 61 62 20 20 20 20 43 72 65 61 74 65  hemTab    Create
1c5f0 20 61 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61   an temporary ta
1c600 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ble pDest->iSDPa
1c610 72 6d 20 61 6e 64 20 73 74 6f 72 65 0a 2a 2a 20  rm and store.** 
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c630 20 20 20 20 74 68 65 20 72 65 73 75 6c 74 20 74      the result t
1c640 68 65 72 65 2e 20 54 68 65 20 63 75 72 73 6f 72  here. The cursor
1c650 20 69 73 20 6c 65 66 74 20 6f 70 65 6e 20 61 66   is left open af
1c660 74 65 72 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ter.**          
1c670 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1c680 6e 69 6e 67 2e 20 20 54 68 69 73 20 69 73 20 6c  ning.  This is l
1c690 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20 65 78  ike SRT_Table ex
1c6a0 63 65 70 74 20 74 68 61 74 0a 2a 2a 20 20 20 20  cept that.**    
1c6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c6c0 20 74 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   this destinatio
1c6d0 6e 20 75 73 65 73 20 4f 50 5f 4f 70 65 6e 45 70  n uses OP_OpenEp
1c6e0 68 65 6d 65 72 61 6c 20 74 6f 20 63 72 65 61 74  hemeral to creat
1c6f0 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1c700 20 20 20 20 20 20 20 20 20 74 68 65 20 74 61 62           the tab
1c710 6c 65 20 66 69 72 73 74 2e 0a 2a 2a 0a 2a 2a 20  le first..**.** 
1c720 20 20 20 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e      SRT_Coroutin
1c730 65 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 63  e   Generate a c
1c740 6f 2d 72 6f 75 74 69 6e 65 20 74 68 61 74 20 72  o-routine that r
1c750 65 74 75 72 6e 73 20 61 20 6e 65 77 20 72 6f 77  eturns a new row
1c760 20 6f 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20   of.**          
1c770 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
1c780 74 73 20 65 61 63 68 20 74 69 6d 65 20 69 74 20  ts each time it 
1c790 69 73 20 69 6e 76 6f 6b 65 64 2e 20 20 54 68 65  is invoked.  The
1c7a0 20 65 6e 74 72 79 20 70 6f 69 6e 74 0a 2a 2a 20   entry point.** 
1c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c7c0 20 20 20 20 6f 66 20 74 68 65 20 63 6f 2d 72 6f      of the co-ro
1c7d0 75 74 69 6e 65 20 69 73 20 73 74 6f 72 65 64 20  utine is stored 
1c7e0 69 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73  in register pDes
1c7f0 74 2d 3e 69 53 44 50 61 72 6d 0a 2a 2a 20 20 20  t->iSDParm.**   
1c800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c810 20 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74    and the result
1c820 20 72 6f 77 20 69 73 20 73 74 6f 72 65 64 20 69   row is stored i
1c830 6e 20 70 44 65 73 74 2d 3e 6e 44 65 73 74 20 72  n pDest->nDest r
1c840 65 67 69 73 74 65 72 73 0a 2a 2a 20 20 20 20 20  egisters.**     
1c850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c860 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 70 44  starting with pD
1c870 65 73 74 2d 3e 69 53 64 73 74 2e 0a 2a 2a 0a 2a  est->iSdst..**.*
1c880 2a 20 20 20 20 20 53 52 54 5f 54 61 62 6c 65 20  *     SRT_Table 
1c890 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1c8a0 6c 74 73 20 69 6e 20 74 65 6d 70 6f 72 61 72 79  lts in temporary
1c8b0 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53   table pDest->iS
1c8c0 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 53 52  DParm..**     SR
1c8d0 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 54 68  T_Fifo        Th
1c8e0 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 45  is is like SRT_E
1c8f0 70 68 65 6d 54 61 62 20 65 78 63 65 70 74 20 74  phemTab except t
1c900 68 61 74 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a  hat the table.**
1c910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c920 20 20 20 20 20 69 73 20 61 73 73 75 6d 65 64 20       is assumed 
1c930 74 6f 20 61 6c 72 65 61 64 79 20 62 65 20 6f 70  to already be op
1c940 65 6e 2e 20 20 53 52 54 5f 46 69 66 6f 20 68 61  en.  SRT_Fifo ha
1c950 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1c960 20 20 20 20 20 20 20 20 20 74 68 65 20 61 64 64           the add
1c970 69 74 69 6f 6e 61 6c 20 70 72 6f 70 65 72 74 79  itional property
1c980 20 6f 66 20 62 65 69 6e 67 20 61 62 6c 65 20 74   of being able t
1c990 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20 20 20 20 20  o ignore.**     
1c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9b0 74 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  the ORDER BY cla
1c9c0 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
1c9d0 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20 53  RT_DistFifo    S
1c9e0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1c9f0 61 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  a temporary tabl
1ca00 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ca10 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1ca20 20 20 20 20 20 20 20 20 20 42 75 74 20 61 6c 73           But als
1ca30 6f 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  o use temporary 
1ca40 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1ca50 50 61 72 6d 2b 31 20 61 73 0a 2a 2a 20 20 20 20  Parm+1 as.**    
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 20 61 20 72 65 63 6f 72 64 20 6f 66 20 61 6c 6c   a record of all
1ca80 20 70 72 69 6f 72 20 72 65 73 75 6c 74 73 20 61   prior results a
1ca90 6e 64 20 69 67 6e 6f 72 65 20 61 6e 79 20 64 75  nd ignore any du
1caa0 70 6c 69 63 61 74 65 0a 2a 2a 20 20 20 20 20 20  plicate.**      
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1cac0 6f 77 73 2e 20 20 4e 61 6d 65 20 6d 65 61 6e 73  ows.  Name means
1cad0 3a 20 20 22 44 69 73 74 69 6e 63 74 20 46 69 66  :  "Distinct Fif
1cae0 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  o"..**.**     SR
1caf0 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 53 74  T_Queue       St
1cb00 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70  ore results in p
1cb10 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70 44  riority queue pD
1cb20 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 28 72 65  est->iSDParm (re
1cb30 61 6c 6c 79 0a 2a 2a 20 20 20 20 20 20 20 20 20  ally.**         
1cb40 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 20 69              an i
1cb50 6e 64 65 78 29 2e 20 20 41 70 70 65 6e 64 20 61  ndex).  Append a
1cb60 20 73 65 71 75 65 6e 63 65 20 6e 75 6d 62 65 72   sequence number
1cb70 20 73 6f 20 74 68 61 74 20 61 6c 6c 20 65 6e 74   so that all ent
1cb80 72 69 65 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  ries.**         
1cb90 20 20 20 20 20 20 20 20 20 20 20 20 61 72 65 20              are 
1cba0 64 69 73 74 69 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20  distinct..**.** 
1cbb0 20 20 20 20 53 52 54 5f 44 69 73 74 51 75 65 75      SRT_DistQueu
1cbc0 65 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74  e   Store result
1cbd0 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1cbe0 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1cbf0 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a 2a 20 20 20  rm only if.**   
1cc00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc10 20 20 74 68 65 20 73 61 6d 65 20 72 65 63 6f 72    the same recor
1cc20 64 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e  d has never been
1cc30 20 73 74 6f 72 65 64 20 62 65 66 6f 72 65 2e 20   stored before. 
1cc40 20 54 68 65 0a 2a 2a 20 20 20 20 20 20 20 20 20   The.**         
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64 65              inde
1cc60 78 20 61 74 20 70 44 65 73 74 2d 3e 69 53 44 50  x at pDest->iSDP
1cc70 61 72 6d 2b 31 20 68 6f 6c 64 20 61 6c 6c 20 70  arm+1 hold all p
1cc80 72 69 6f 72 20 73 74 6f 72 65 73 2e 0a 2a 2f 0a  rior stores..*/.
1cc90 23 64 65 66 69 6e 65 20 53 52 54 5f 55 6e 69 6f  #define SRT_Unio
1cca0 6e 20 20 20 20 20 20 20 20 31 20 20 2f 2a 20 53  n        1  /* S
1ccb0 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20 6b  tore result as k
1ccc0 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1ccd0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1cce0 78 63 65 70 74 20 20 20 20 20 20 20 32 20 20 2f  xcept       2  /
1ccf0 2a 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 20  * Remove result 
1cd00 66 72 6f 6d 20 61 20 55 4e 49 4f 4e 20 69 6e 64  from a UNION ind
1cd10 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ex */.#define SR
1cd20 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 20 33  T_Exists       3
1cd30 20 20 2f 2a 20 53 74 6f 72 65 20 31 20 69 66 20    /* Store 1 if 
1cd40 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 6e 6f  the result is no
1cd50 74 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66 69  t empty */.#defi
1cd60 6e 65 20 53 52 54 5f 44 69 73 63 61 72 64 20 20  ne SRT_Discard  
1cd70 20 20 20 20 34 20 20 2f 2a 20 44 6f 20 6e 6f 74      4  /* Do not
1cd80 20 73 61 76 65 20 74 68 65 20 72 65 73 75 6c 74   save the result
1cd90 73 20 61 6e 79 77 68 65 72 65 20 2a 2f 0a 23 64  s anywhere */.#d
1cda0 65 66 69 6e 65 20 53 52 54 5f 46 69 66 6f 20 20  efine SRT_Fifo  
1cdb0 20 20 20 20 20 20 20 35 20 20 2f 2a 20 53 74 6f         5  /* Sto
1cdc0 72 65 20 72 65 73 75 6c 74 20 61 73 20 64 61 74  re result as dat
1cdd0 61 20 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61  a with an automa
1cde0 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a 23 64 65  tic rowid */.#de
1cdf0 66 69 6e 65 20 53 52 54 5f 44 69 73 74 46 69 66  fine SRT_DistFif
1ce00 6f 20 20 20 20 20 36 20 20 2f 2a 20 4c 69 6b 65  o     6  /* Like
1ce10 20 53 52 54 5f 46 69 66 6f 2c 20 62 75 74 20 75   SRT_Fifo, but u
1ce20 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1ce30 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ly */.#define SR
1ce40 54 5f 51 75 65 75 65 20 20 20 20 20 20 20 20 37  T_Queue        7
1ce50 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1ce60 74 20 69 6e 20 61 6e 20 71 75 65 75 65 20 2a 2f  t in an queue */
1ce70 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1ce80 74 51 75 65 75 65 20 20 20 20 38 20 20 2f 2a 20  tQueue    8  /* 
1ce90 4c 69 6b 65 20 53 52 54 5f 51 75 65 75 65 2c 20  Like SRT_Queue, 
1cea0 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c  but unique resul
1ceb0 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a 2f 2a 20 54  ts only */../* T
1cec0 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75  he ORDER BY clau
1ced0 73 65 20 69 73 20 69 67 6e 6f 72 65 64 20 66 6f  se is ignored fo
1cee0 72 20 61 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f  r all of the abo
1cef0 76 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 67  ve */.#define Ig
1cf00 6e 6f 72 61 62 6c 65 4f 72 64 65 72 62 79 28 58  norableOrderby(X
1cf10 29 20 28 28 58 2d 3e 65 44 65 73 74 29 3c 3d 53  ) ((X->eDest)<=S
1cf20 52 54 5f 44 69 73 74 51 75 65 75 65 29 0a 0a 23  RT_DistQueue)..#
1cf30 64 65 66 69 6e 65 20 53 52 54 5f 4f 75 74 70 75  define SRT_Outpu
1cf40 74 20 20 20 20 20 20 20 39 20 20 2f 2a 20 4f 75  t       9  /* Ou
1cf50 74 70 75 74 20 65 61 63 68 20 72 6f 77 20 6f 66  tput each row of
1cf60 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69   result */.#defi
1cf70 6e 65 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20  ne SRT_Mem      
1cf80 20 20 20 31 30 20 20 2f 2a 20 53 74 6f 72 65 20     10  /* Store 
1cf90 72 65 73 75 6c 74 20 69 6e 20 61 20 6d 65 6d 6f  result in a memo
1cfa0 72 79 20 63 65 6c 6c 20 2a 2f 0a 23 64 65 66 69  ry cell */.#defi
1cfb0 6e 65 20 53 52 54 5f 53 65 74 20 20 20 20 20 20  ne SRT_Set      
1cfc0 20 20 20 31 31 20 20 2f 2a 20 53 74 6f 72 65 20     11  /* Store 
1cfd0 72 65 73 75 6c 74 73 20 61 73 20 6b 65 79 73 20  results as keys 
1cfe0 69 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23  in an index */.#
1cff0 64 65 66 69 6e 65 20 53 52 54 5f 45 70 68 65 6d  define SRT_Ephem
1d000 54 61 62 20 20 20 20 31 32 20 20 2f 2a 20 43 72  Tab    12  /* Cr
1d010 65 61 74 65 20 74 72 61 6e 73 69 65 6e 74 20 74  eate transient t
1d020 61 62 20 61 6e 64 20 73 74 6f 72 65 20 6c 69 6b  ab and store lik
1d030 65 20 53 52 54 5f 54 61 62 6c 65 20 2a 2f 0a 23  e SRT_Table */.#
1d040 64 65 66 69 6e 65 20 53 52 54 5f 43 6f 72 6f 75  define SRT_Corou
1d050 74 69 6e 65 20 20 20 31 33 20 20 2f 2a 20 47 65  tine   13  /* Ge
1d060 6e 65 72 61 74 65 20 61 20 73 69 6e 67 6c 65 20  nerate a single 
1d070 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1d080 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 54 61 62  .#define SRT_Tab
1d090 6c 65 20 20 20 20 20 20 20 31 34 20 20 2f 2a 20  le       14  /* 
1d0a0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73 20  Store result as 
1d0b0 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75 74  data with an aut
1d0c0 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f 0a  omatic rowid */.
1d0d0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1d0e0 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a 65 63  ce of this objec
1d0f0 74 20 64 65 73 63 72 69 62 65 73 20 77 68 65 72  t describes wher
1d100 65 20 74 6f 20 70 75 74 20 6f 66 20 74 68 65 20  e to put of the 
1d110 72 65 73 75 6c 74 73 20 6f 66 0a 2a 2a 20 61 20  results of.** a 
1d120 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74  SELECT statement
1d130 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65  ..*/.struct Sele
1d140 63 74 44 65 73 74 20 7b 0a 20 20 75 38 20 65 44  ctDest {.  u8 eD
1d150 65 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  est;            
1d160 2f 2a 20 48 6f 77 20 74 6f 20 64 69 73 70 6f 73  /* How to dispos
1d170 65 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73  e of the results
1d180 2e 20 20 4f 6e 20 6f 66 20 53 52 54 5f 2a 20 61  .  On of SRT_* a
1d190 62 6f 76 65 2e 20 2a 2f 0a 20 20 63 68 61 72 20  bove. */.  char 
1d1a0 2a 7a 41 66 66 53 64 73 74 3b 20 20 20 20 20 20  *zAffSdst;      
1d1b0 2f 2a 20 41 66 66 69 6e 69 74 79 20 75 73 65 64  /* Affinity used
1d1c0 20 77 68 65 6e 20 65 44 65 73 74 3d 3d 53 52 54   when eDest==SRT
1d1d0 5f 53 65 74 20 2a 2f 0a 20 20 69 6e 74 20 69 53  _Set */.  int iS
1d1e0 44 50 61 72 6d 3b 20 20 20 20 20 20 20 20 20 2f  DParm;         /
1d1f0 2a 20 41 20 70 61 72 61 6d 65 74 65 72 20 75 73  * A parameter us
1d200 65 64 20 62 79 20 74 68 65 20 65 44 65 73 74 20  ed by the eDest 
1d210 64 69 73 70 6f 73 61 6c 20 6d 65 74 68 6f 64 20  disposal method 
1d220 2a 2f 0a 20 20 69 6e 74 20 69 53 64 73 74 3b 20  */.  int iSdst; 
1d230 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 61 73            /* Bas
1d240 65 20 72 65 67 69 73 74 65 72 20 77 68 65 72 65  e register where
1d250 20 72 65 73 75 6c 74 73 20 61 72 65 20 77 72 69   results are wri
1d260 74 74 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  tten */.  int nS
1d270 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f  dst;           /
1d280 2a 20 4e 75 6d 62 65 72 20 6f 66 20 72 65 67 69  * Number of regi
1d290 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20  sters allocated 
1d2a0 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70  */.  ExprList *p
1d2b0 4f 72 64 65 72 42 79 3b 20 20 2f 2a 20 4b 65 79  OrderBy;  /* Key
1d2c0 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 20 53 52 54   columns for SRT
1d2d0 5f 51 75 65 75 65 20 61 6e 64 20 53 52 54 5f 44  _Queue and SRT_D
1d2e0 69 73 74 51 75 65 75 65 20 2a 2f 0a 7d 3b 0a 0a  istQueue */.};..
1d2f0 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67 20 63 6f 64  /*.** During cod
1d300 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f 66 20  e generation of 
1d310 73 74 61 74 65 6d 65 6e 74 73 20 74 68 61 74 20  statements that 
1d320 64 6f 20 69 6e 73 65 72 74 73 20 69 6e 74 6f 20  do inserts into 
1d330 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 0a 2a 2a  AUTOINCREMENT.**
1d340 20 74 61 62 6c 65 73 2c 20 74 68 65 20 66 6f 6c   tables, the fol
1d350 6c 6f 77 69 6e 67 20 69 6e 66 6f 72 6d 61 74 69  lowing informati
1d360 6f 6e 20 69 73 20 61 74 74 61 63 68 65 64 20 74  on is attached t
1d370 6f 20 74 68 65 20 54 61 62 6c 65 2e 75 2e 61 75  o the Table.u.au
1d380 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70 6f 69 6e 74  toInc.p.** point
1d390 65 72 20 6f 66 20 65 61 63 68 20 61 75 74 6f 69  er of each autoi
1d3a0 6e 63 72 65 6d 65 6e 74 20 74 61 62 6c 65 20 74  ncrement table t
1d3b0 6f 20 72 65 63 6f 72 64 20 73 6f 6d 65 20 73 69  o record some si
1d3c0 64 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74  de information t
1d3d0 68 61 74 0a 2a 2a 20 74 68 65 20 63 6f 64 65 20  hat.** the code 
1d3e0 67 65 6e 65 72 61 74 6f 72 20 6e 65 65 64 73 2e  generator needs.
1d3f0 20 20 57 65 20 68 61 76 65 20 74 6f 20 6b 65 65    We have to kee
1d400 70 20 70 65 72 2d 74 61 62 6c 65 20 61 75 74 6f  p per-table auto
1d410 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a 20 69 6e 66  increment.** inf
1d420 6f 72 6d 61 74 69 6f 6e 20 69 6e 20 63 61 73 65  ormation in case
1d430 20 69 6e 73 65 72 74 73 20 61 72 65 20 64 6f 6e   inserts are don
1d440 65 20 77 69 74 68 69 6e 20 74 72 69 67 67 65 72  e within trigger
1d450 73 2e 20 20 54 72 69 67 67 65 72 73 20 64 6f 20  s.  Triggers do 
1d460 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61 6c 6c 79 20  not.** normally 
1d470 63 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 69 72  coordinate their
1d480 20 61 63 74 69 76 69 74 69 65 73 2c 20 62 75 74   activities, but
1d490 20 77 65 20 64 6f 20 6e 65 65 64 20 74 6f 20 63   we do need to c
1d4a0 6f 6f 72 64 69 6e 61 74 65 20 74 68 65 0a 2a 2a  oordinate the.**
1d4b0 20 6c 6f 61 64 69 6e 67 20 61 6e 64 20 73 61 76   loading and sav
1d4c0 69 6e 67 20 6f 66 20 61 75 74 6f 69 6e 63 72 65  ing of autoincre
1d4d0 6d 65 6e 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ment information
1d4e0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 6f  ..*/.struct Auto
1d4f0 69 6e 63 49 6e 66 6f 20 7b 0a 20 20 41 75 74 6f  incInfo {.  Auto
1d500 69 6e 63 49 6e 66 6f 20 2a 70 4e 65 78 74 3b 20  incInfo *pNext; 
1d510 20 20 2f 2a 20 4e 65 78 74 20 69 6e 66 6f 20 62    /* Next info b
1d520 6c 6f 63 6b 20 69 6e 20 61 20 6c 69 73 74 20 6f  lock in a list o
1d530 66 20 74 68 65 6d 20 61 6c 6c 20 2a 2f 0a 20 20  f them all */.  
1d540 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1d550 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 74        /* Table t
1d560 68 69 73 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 72  his info block r
1d570 65 66 65 72 73 20 74 6f 20 2a 2f 0a 20 20 69 6e  efers to */.  in
1d580 74 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20  t iDb;          
1d590 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20      /* Index in 
1d5a0 73 71 6c 69 74 65 33 2e 61 44 62 5b 5d 20 6f 66  sqlite3.aDb[] of
1d5b0 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e   database holdin
1d5c0 67 20 70 54 61 62 20 2a 2f 0a 20 20 69 6e 74 20  g pTab */.  int 
1d5d0 72 65 67 43 74 72 3b 20 20 20 20 20 20 20 20 20  regCtr;         
1d5e0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1d5f0 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 74 68 65  ster holding the
1d600 20 72 6f 77 69 64 20 63 6f 75 6e 74 65 72 20 2a   rowid counter *
1d610 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a 65  /.};../*.** Size
1d620 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 63   of the column c
1d630 61 63 68 65 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ache.*/.#ifndef 
1d640 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48  SQLITE_N_COLCACH
1d650 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
1d660 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 20 31 30 0a  E_N_COLCACHE 10.
1d670 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 74  #endif../*.** At
1d680 20 6c 65 61 73 74 20 6f 6e 65 20 69 6e 73 74 61   least one insta
1d690 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
1d6a0 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
1d6b0 73 20 63 72 65 61 74 65 64 20 66 6f 72 20 65 61  s created for ea
1d6c0 63 68 0a 2a 2a 20 74 72 69 67 67 65 72 20 74 68  ch.** trigger th
1d6d0 61 74 20 6d 61 79 20 62 65 20 66 69 72 65 64 20  at may be fired 
1d6e0 77 68 69 6c 65 20 70 61 72 73 69 6e 67 20 61 6e  while parsing an
1d6f0 20 49 4e 53 45 52 54 2c 20 55 50 44 41 54 45 20   INSERT, UPDATE 
1d700 6f 72 20 44 45 4c 45 54 45 0a 2a 2a 20 73 74 61  or DELETE.** sta
1d710 74 65 6d 65 6e 74 2e 20 41 6c 6c 20 73 75 63 68  tement. All such
1d720 20 6f 62 6a 65 63 74 73 20 61 72 65 20 73 74 6f   objects are sto
1d730 72 65 64 20 69 6e 20 74 68 65 20 6c 69 6e 6b 65  red in the linke
1d740 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 61 74  d list headed at
1d750 0a 2a 2a 20 50 61 72 73 65 2e 70 54 72 69 67 67  .** Parse.pTrigg
1d760 65 72 50 72 67 20 61 6e 64 20 64 65 6c 65 74 65  erPrg and delete
1d770 64 20 6f 6e 63 65 20 73 74 61 74 65 6d 65 6e 74  d once statement
1d780 20 63 6f 6d 70 69 6c 61 74 69 6f 6e 20 68 61 73   compilation has
1d790 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d 70 6c 65 74   been.** complet
1d7a0 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20 56 64 62 65  ed..**.** A Vdbe
1d7b0 20 73 75 62 2d 70 72 6f 67 72 61 6d 20 74 68 61   sub-program tha
1d7c0 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
1d7d0 20 62 6f 64 79 20 61 6e 64 20 57 48 45 4e 20 63   body and WHEN c
1d7e0 6c 61 75 73 65 20 6f 66 20 74 72 69 67 67 65 72  lause of trigger
1d7f0 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e 70  .** TriggerPrg.p
1d800 54 72 69 67 67 65 72 2c 20 61 73 73 75 6d 69 6e  Trigger, assumin
1d810 67 20 61 20 64 65 66 61 75 6c 74 20 4f 4e 20 43  g a default ON C
1d820 4f 4e 46 4c 49 43 54 20 63 6c 61 75 73 65 20 6f  ONFLICT clause o
1d830 66 0a 2a 2a 20 54 72 69 67 67 65 72 50 72 67 2e  f.** TriggerPrg.
1d840 6f 72 63 6f 6e 66 2c 20 69 73 20 73 74 6f 72 65  orconf, is store
1d850 64 20 69 6e 20 74 68 65 20 54 72 69 67 67 65 72  d in the Trigger
1d860 50 72 67 2e 70 50 72 6f 67 72 61 6d 20 76 61 72  Prg.pProgram var
1d870 69 61 62 6c 65 2e 0a 2a 2a 20 54 68 65 20 50 61  iable..** The Pa
1d880 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1d890 6c 69 73 74 20 6e 65 76 65 72 20 63 6f 6e 74 61  list never conta
1d8a0 69 6e 73 20 74 77 6f 20 65 6e 74 72 69 65 73 20  ins two entries 
1d8b0 77 69 74 68 20 74 68 65 20 73 61 6d 65 0a 2a 2a  with the same.**
1d8c0 20 76 61 6c 75 65 73 20 66 6f 72 20 62 6f 74 68   values for both
1d8d0 20 70 54 72 69 67 67 65 72 20 61 6e 64 20 6f 72   pTrigger and or
1d8e0 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  conf..**.** The 
1d8f0 54 72 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d  TriggerPrg.aColm
1d900 61 73 6b 5b 30 5d 20 76 61 72 69 61 62 6c 65 20  ask[0] variable 
1d910 69 73 20 73 65 74 20 74 6f 20 61 20 6d 61 73 6b  is set to a mask
1d920 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e   of old.* column
1d930 73 0a 2a 2a 20 61 63 63 65 73 73 65 64 20 28 6f  s.** accessed (o
1d940 72 20 73 65 74 20 74 6f 20 30 20 66 6f 72 20 74  r set to 0 for t
1d950 72 69 67 67 65 72 73 20 66 69 72 65 64 20 61 73  riggers fired as
1d960 20 61 20 72 65 73 75 6c 74 20 6f 66 20 49 4e 53   a result of INS
1d970 45 52 54 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74  ERT.** statement
1d980 73 29 2e 20 53 69 6d 69 6c 61 72 6c 79 2c 20 74  s). Similarly, t
1d990 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61 43  he TriggerPrg.aC
1d9a0 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61 72 69 61 62  olmask[1] variab
1d9b0 6c 65 20 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20  le is set to.** 
1d9c0 61 20 6d 61 73 6b 20 6f 66 20 6e 65 77 2e 2a 20  a mask of new.* 
1d9d0 63 6f 6c 75 6d 6e 73 20 75 73 65 64 20 62 79 20  columns used by 
1d9e0 74 68 65 20 70 72 6f 67 72 61 6d 2e 0a 2a 2f 0a  the program..*/.
1d9f0 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
1da00 67 20 7b 0a 20 20 54 72 69 67 67 65 72 20 2a 70  g {.  Trigger *p
1da10 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 2f 2a  Trigger;      /*
1da20 20 54 72 69 67 67 65 72 20 74 68 69 73 20 70 72   Trigger this pr
1da30 6f 67 72 61 6d 20 77 61 73 20 63 6f 64 65 64 20  ogram was coded 
1da40 66 72 6f 6d 20 2a 2f 0a 20 20 54 72 69 67 67 65  from */.  Trigge
1da50 72 50 72 67 20 2a 70 4e 65 78 74 3b 20 20 20 20  rPrg *pNext;    
1da60 20 20 2f 2a 20 4e 65 78 74 20 65 6e 74 72 79 20    /* Next entry 
1da70 69 6e 20 50 61 72 73 65 2e 70 54 72 69 67 67 65  in Parse.pTrigge
1da80 72 50 72 67 20 6c 69 73 74 20 2a 2f 0a 20 20 53  rPrg list */.  S
1da90 75 62 50 72 6f 67 72 61 6d 20 2a 70 50 72 6f 67  ubProgram *pProg
1daa0 72 61 6d 3b 20 20 20 2f 2a 20 50 72 6f 67 72 61  ram;   /* Progra
1dab0 6d 20 69 6d 70 6c 65 6d 65 6e 74 69 6e 67 20 70  m implementing p
1dac0 54 72 69 67 67 65 72 2f 6f 72 63 6f 6e 66 20 2a  Trigger/orconf *
1dad0 2f 0a 20 20 69 6e 74 20 6f 72 63 6f 6e 66 3b 20  /.  int orconf; 
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
1daf0 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1db00 43 54 20 70 6f 6c 69 63 79 20 2a 2f 0a 20 20 75  CT policy */.  u
1db10 33 32 20 61 43 6f 6c 6d 61 73 6b 5b 32 5d 3b 20  32 aColmask[2]; 
1db20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 73 20         /* Masks 
1db30 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65 77 2e 2a 20  of old.*, new.* 
1db40 63 6f 6c 75 6d 6e 73 20 61 63 63 65 73 73 65 64  columns accessed
1db50 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
1db60 65 20 79 44 62 4d 61 73 6b 20 64 61 74 61 74 79  e yDbMask dataty
1db70 70 65 20 66 6f 72 20 74 68 65 20 62 69 74 6d 61  pe for the bitma
1db80 73 6b 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  sk of all attach
1db90 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
1dba0 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
1dbb0 41 54 54 41 43 48 45 44 3e 33 30 0a 20 20 74 79  ATTACHED>30.  ty
1dbc0 70 65 64 65 66 20 75 6e 73 69 67 6e 65 64 20 63  pedef unsigned c
1dbd0 68 61 72 20 79 44 62 4d 61 73 6b 5b 28 53 51 4c  har yDbMask[(SQL
1dbe0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1dbf0 2b 39 29 2f 38 5d 3b 0a 23 20 64 65 66 69 6e 65  +9)/8];.# define
1dc00 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29   DbMaskTest(M,I)
1dc10 20 20 20 20 28 28 28 4d 29 5b 28 49 29 2f 38 5d      (((M)[(I)/8]
1dc20 26 28 31 3c 3c 28 28 49 29 26 37 29 29 29 21 3d  &(1<<((I)&7)))!=
1dc30 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  0).# define DbMa
1dc40 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 6d  skZero(M)      m
1dc50 65 6d 73 65 74 28 28 4d 29 2c 30 2c 73 69 7a 65  emset((M),0,size
1dc60 6f 66 28 4d 29 29 0a 23 20 64 65 66 69 6e 65 20  of(M)).# define 
1dc70 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1dc80 20 20 20 28 4d 29 5b 28 49 29 2f 38 5d 7c 3d 28     (M)[(I)/8]|=(
1dc90 31 3c 3c 28 28 49 29 26 37 29 29 0a 23 20 64 65  1<<((I)&7)).# de
1dca0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1dcb0 72 6f 28 4d 29 20 20 20 73 71 6c 69 74 65 33 44  ro(M)   sqlite3D
1dcc0 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 0a  bMaskAllZero(M).
1dcd0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e  # define DbMaskN
1dce0 6f 6e 5a 65 72 6f 28 4d 29 20 20 20 28 73 71 6c  onZero(M)   (sql
1dcf0 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72  ite3DbMaskAllZer
1dd00 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 20  o(M)==0).#else. 
1dd10 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e 65   typedef unsigne
1dd20 64 20 69 6e 74 20 79 44 62 4d 61 73 6b 3b 0a 23  d int yDbMask;.#
1dd30 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65   define DbMaskTe
1dd40 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29  st(M,I)    (((M)
1dd50 26 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  &(((yDbMask)1)<<
1dd60 28 49 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69  (I)))!=0).# defi
1dd70 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29  ne DbMaskZero(M)
1dd80 20 20 20 20 20 20 28 4d 29 3d 30 0a 23 20 64 65        (M)=0.# de
1dd90 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d  fine DbMaskSet(M
1dda0 2c 49 29 20 20 20 20 20 28 4d 29 7c 3d 28 28 28  ,I)     (M)|=(((
1ddb0 79 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29  yDbMask)1)<<(I))
1ddc0 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b  .# define DbMask
1ddd0 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29  AllZero(M)   (M)
1dde0 3d 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  ==0.# define DbM
1ddf0 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1de00 28 4d 29 21 3d 30 0a 23 65 6e 64 69 66 0a 0a 2f  (M)!=0.#endif../
1de10 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20 70 61 72 73  *.** An SQL pars
1de20 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 41 20 63  er context.  A c
1de30 6f 70 79 20 6f 66 20 74 68 69 73 20 73 74 72 75  opy of this stru
1de40 63 74 75 72 65 20 69 73 20 70 61 73 73 65 64 20  cture is passed 
1de50 74 68 72 6f 75 67 68 0a 2a 2a 20 74 68 65 20 70  through.** the p
1de60 61 72 73 65 72 20 61 6e 64 20 64 6f 77 6e 20 69  arser and down i
1de70 6e 74 6f 20 61 6c 6c 20 74 68 65 20 70 61 72 73  nto all the pars
1de80 65 72 20 61 63 74 69 6f 6e 20 72 6f 75 74 69 6e  er action routin
1de90 65 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a  e in order to.**
1dea0 20 63 61 72 72 79 20 61 72 6f 75 6e 64 20 69 6e   carry around in
1deb0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 20 69  formation that i
1dec0 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  s global to the 
1ded0 65 6e 74 69 72 65 20 70 61 72 73 65 2e 0a 2a 2a  entire parse..**
1dee0 0a 2a 2a 20 54 68 65 20 73 74 72 75 63 74 75 72  .** The structur
1def0 65 20 69 73 20 64 69 76 69 64 65 64 20 69 6e 74  e is divided int
1df00 6f 20 74 77 6f 20 70 61 72 74 73 2e 20 20 57 68  o two parts.  Wh
1df10 65 6e 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  en the parser an
1df20 64 20 63 6f 64 65 0a 2a 2a 20 67 65 6e 65 72 61  d code.** genera
1df30 74 65 20 63 61 6c 6c 20 74 68 65 6d 73 65 6c 76  te call themselv
1df40 65 73 20 72 65 63 75 72 73 69 76 65 6c 79 2c 20  es recursively, 
1df50 74 68 65 20 66 69 72 73 74 20 70 61 72 74 20 6f  the first part o
1df60 66 20 74 68 65 20 73 74 72 75 63 74 75 72 65 0a  f the structure.
1df70 2a 2a 20 69 73 20 63 6f 6e 73 74 61 6e 74 20 62  ** is constant b
1df80 75 74 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  ut the second pa
1df90 72 74 20 69 73 20 72 65 73 65 74 20 61 74 20 74  rt is reset at t
1dfa0 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 61 6e 64  he beginning and
1dfb0 20 65 6e 64 20 6f 66 0a 2a 2a 20 65 61 63 68 20   end of.** each 
1dfc0 72 65 63 75 72 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a  recursion..**.**
1dfd0 20 54 68 65 20 6e 54 61 62 6c 65 4c 6f 63 6b 20   The nTableLock 
1dfe0 61 6e 64 20 61 54 61 62 6c 65 4c 6f 63 6b 20 76  and aTableLock v
1dff0 61 72 69 61 62 6c 65 73 20 61 72 65 20 6f 6e 6c  ariables are onl
1e000 79 20 75 73 65 64 20 69 66 20 74 68 65 20 73 68  y used if the sh
1e010 61 72 65 64 2d 63 61 63 68 65 0a 2a 2a 20 66 65  ared-cache.** fe
1e020 61 74 75 72 65 20 69 73 20 65 6e 61 62 6c 65 64  ature is enabled
1e030 20 28 69 66 20 73 71 6c 69 74 65 33 54 73 64 28   (if sqlite3Tsd(
1e040 29 2d 3e 75 73 65 53 68 61 72 65 64 44 61 74 61  )->useSharedData
1e050 20 69 73 20 74 72 75 65 29 2e 20 54 68 65 79 20   is true). They 
1e060 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 73  are.** used to s
1e070 74 6f 72 65 20 74 68 65 20 73 65 74 20 6f 66 20  tore the set of 
1e080 74 61 62 6c 65 2d 6c 6f 63 6b 73 20 72 65 71 75  table-locks requ
1e090 69 72 65 64 20 62 79 20 74 68 65 20 73 74 61 74  ired by the stat
1e0a0 65 6d 65 6e 74 20 62 65 69 6e 67 0a 2a 2a 20 63  ement being.** c
1e0b0 6f 6d 70 69 6c 65 64 2e 20 46 75 6e 63 74 69 6f  ompiled. Functio
1e0c0 6e 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  n sqlite3TableLo
1e0d0 63 6b 28 29 20 69 73 20 75 73 65 64 20 74 6f 20  ck() is used to 
1e0e0 61 64 64 20 65 6e 74 72 69 65 73 20 74 6f 20 74  add entries to t
1e0f0 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a 2a 2f 0a 73  he.** list..*/.s
1e100 74 72 75 63 74 20 50 61 72 73 65 20 7b 0a 20 20  truct Parse {.  
1e110 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
1e120 20 20 20 20 20 2f 2a 20 54 68 65 20 6d 61 69 6e       /* The main
1e130 20 64 61 74 61 62 61 73 65 20 73 74 72 75 63 74   database struct
1e140 75 72 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ure */.  char *z
1e150 45 72 72 4d 73 67 3b 20 20 20 20 20 20 20 2f 2a  ErrMsg;       /*
1e160 20 41 6e 20 65 72 72 6f 72 20 6d 65 73 73 61 67   An error messag
1e170 65 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 56 64  e */.  Vdbe *pVd
1e180 62 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  be;         /* A
1e190 6e 20 65 6e 67 69 6e 65 20 66 6f 72 20 65 78 65  n engine for exe
1e1a0 63 75 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  cuting database 
1e1b0 62 79 74 65 63 6f 64 65 20 2a 2f 0a 20 20 69 6e  bytecode */.  in
1e1c0 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20 20  t rc;           
1e1d0 20 20 20 2f 2a 20 52 65 74 75 72 6e 20 63 6f 64     /* Return cod
1e1e0 65 20 66 72 6f 6d 20 65 78 65 63 75 74 69 6f 6e  e from execution
1e1f0 20 2a 2f 0a 20 20 75 38 20 63 6f 6c 4e 61 6d 65   */.  u8 colName
1e200 73 53 65 74 3b 20 20 20 20 20 20 2f 2a 20 54 52  sSet;      /* TR
1e210 55 45 20 61 66 74 65 72 20 4f 50 5f 43 6f 6c 75  UE after OP_Colu
1e220 6d 6e 4e 61 6d 65 20 68 61 73 20 62 65 65 6e 20  mnName has been 
1e230 69 73 73 75 65 64 20 74 6f 20 70 56 64 62 65 20  issued to pVdbe 
1e240 2a 2f 0a 20 20 75 38 20 63 68 65 63 6b 53 63 68  */.  u8 checkSch
1e250 65 6d 61 3b 20 20 20 20 20 20 2f 2a 20 43 61 75  ema;      /* Cau
1e260 73 65 73 20 73 63 68 65 6d 61 20 63 6f 6f 6b 69  ses schema cooki
1e270 65 20 63 68 65 63 6b 20 61 66 74 65 72 20 61 6e  e check after an
1e280 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 38 20 6e   error */.  u8 n
1e290 65 73 74 65 64 3b 20 20 20 20 20 20 20 20 20 20  ested;          
1e2a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
1e2b0 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 74 68  sted calls to th
1e2c0 65 20 70 61 72 73 65 72 2f 63 6f 64 65 20 67 65  e parser/code ge
1e2d0 6e 65 72 61 74 6f 72 20 2a 2f 0a 20 20 75 38 20  nerator */.  u8 
1e2e0 6e 54 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20  nTempReg;       
1e2f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74    /* Number of t
1e300 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1e310 72 73 20 69 6e 20 61 54 65 6d 70 52 65 67 5b 5d  rs in aTempReg[]
1e320 20 2a 2f 0a 20 20 75 38 20 69 73 4d 75 6c 74 69   */.  u8 isMulti
1e330 57 72 69 74 65 3b 20 20 20 20 20 2f 2a 20 54 72  Write;     /* Tr
1e340 75 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20  ue if statement 
1e350 6d 61 79 20 6d 6f 64 69 66 79 2f 69 6e 73 65 72  may modify/inser
1e360 74 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20  t multiple rows 
1e370 2a 2f 0a 20 20 75 38 20 6d 61 79 41 62 6f 72 74  */.  u8 mayAbort
1e380 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ;         /* Tru
1e390 65 20 69 66 20 73 74 61 74 65 6d 65 6e 74 20 6d  e if statement m
1e3a0 61 79 20 74 68 72 6f 77 20 61 6e 20 41 42 4f 52  ay throw an ABOR
1e3b0 54 20 65 78 63 65 70 74 69 6f 6e 20 2a 2f 0a 20  T exception */. 
1e3c0 20 75 38 20 68 61 73 43 6f 6d 70 6f 75 6e 64 3b   u8 hasCompound;
1e3d0 20 20 20 20 20 20 2f 2a 20 4e 65 65 64 20 74 6f        /* Need to
1e3e0 20 69 6e 76 6f 6b 65 20 63 6f 6e 76 65 72 74 43   invoke convertC
1e3f0 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1e400 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 20 20 75  ubquery() */.  u
1e410 38 20 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 3b  8 okConstFactor;
1e420 20 20 20 20 2f 2a 20 4f 4b 20 74 6f 20 66 61 63      /* OK to fac
1e430 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74  tor out constant
1e440 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1e450 65 4c 6f 6f 6b 61 73 69 64 65 3b 20 2f 2a 20 4e  eLookaside; /* N
1e460 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73 20 6c  umber of times l
1e470 6f 6f 6b 61 73 69 64 65 20 68 61 73 20 62 65 65  ookaside has bee
1e480 6e 20 64 69 73 61 62 6c 65 64 20 2a 2f 0a 20 20  n disabled */.  
1e490 75 38 20 6e 43 6f 6c 43 61 63 68 65 3b 20 20 20  u8 nColCache;   
1e4a0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e4b0 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f  f entries in aCo
1e4c0 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a 20 20 69 6e  lCache[] */.  in
1e4d0 74 20 61 54 65 6d 70 52 65 67 5b 38 5d 3b 20 20  t aTempReg[8];  
1e4e0 20 20 20 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72     /* Holding ar
1e4f0 65 61 20 66 6f 72 20 74 65 6d 70 6f 72 61 72 79  ea for temporary
1e500 20 72 65 67 69 73 74 65 72 73 20 2a 2f 0a 20 20   registers */.  
1e510 69 6e 74 20 6e 52 61 6e 67 65 52 65 67 3b 20 20  int nRangeReg;  
1e520 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
1e530 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 72 65  the temporary re
1e540 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a  gister block */.
1e550 20 20 69 6e 74 20 69 52 61 6e 67 65 52 65 67 3b    int iRangeReg;
1e560 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
1e570 72 65 67 69 73 74 65 72 20 69 6e 20 74 65 6d 70  register in temp
1e580 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20 62  orary register b
1e590 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 45  lock */.  int nE
1e5a0 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  rr;            /
1e5b0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f  * Number of erro
1e5c0 72 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74  rs seen */.  int
1e5d0 20 6e 54 61 62 3b 20 20 20 20 20 20 20 20 20 20   nTab;          
1e5e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
1e5f0 72 65 76 69 6f 75 73 6c 79 20 61 6c 6c 6f 63 61  reviously alloca
1e600 74 65 64 20 56 44 42 45 20 63 75 72 73 6f 72 73  ted VDBE cursors
1e610 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 65 6d 3b 20   */.  int nMem; 
1e620 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e630 6d 62 65 72 20 6f 66 20 6d 65 6d 6f 72 79 20 63  mber of memory c
1e640 65 6c 6c 73 20 75 73 65 64 20 73 6f 20 66 61 72  ells used so far
1e650 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 65 74 3b 20   */.  int nSet; 
1e660 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e670 6d 62 65 72 20 6f 66 20 73 65 74 73 20 75 73 65  mber of sets use
1e680 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e  d so far */.  in
1e690 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20  t nOpAlloc;     
1e6a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e6b0 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20  slots allocated 
1e6c0 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a  for Vdbe.aOp[] *
1e6d0 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f  /.  int szOpAllo
1e6e0 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65  c;       /* Byte
1e6f0 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63  s of memory spac
1e700 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  e allocated for 
1e710 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1e720 69 6e 74 20 69 46 69 78 65 64 4f 70 3b 20 20 20  int iFixedOp;   
1e730 20 20 20 20 20 2f 2a 20 4e 65 76 65 72 20 62 61       /* Never ba
1e740 63 6b 20 6f 75 74 20 6f 70 63 6f 64 65 73 20 69  ck out opcodes i
1e750 46 69 78 65 64 4f 70 2d 31 20 6f 72 20 65 61 72  FixedOp-1 or ear
1e760 6c 69 65 72 20 2a 2f 0a 20 20 69 6e 74 20 63 6b  lier */.  int ck
1e770 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 20 2f  Base;          /
1e780 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20  * Base register 
1e790 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67 20 63  of data during c
1e7a0 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73  heck constraints
1e7b0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c 66 54   */.  int iSelfT
1e7c0 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 61  ab;        /* Ta
1e7d0 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  ble of an index 
1e7e0 77 68 6f 73 65 20 65 78 70 72 73 20 61 72 65 20  whose exprs are 
1e7f0 62 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f 0a 20  being coded */. 
1e800 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65 6c   int iCacheLevel
1e810 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63 68  ;     /* ColCach
1e820 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43 6f  e valid when aCo
1e830 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c 3c  lCache[].iLevel<
1e840 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f 0a  =iCacheLevel */.
1e850 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74 3b    int iCacheCnt;
1e860 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 65         /* Counte
1e870 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72 61  r used to genera
1e880 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 6c  te aColCache[].l
1e890 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69  ru values */.  i
1e8a0 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20 20  nt nLabel;      
1e8b0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1e8c0 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f 0a   labels used */.
1e8d0 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20 20    int *aLabel;  
1e8e0 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 20         /* Space 
1e8f0 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62 65  to hold the labe
1e900 6c 73 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 79  ls */.  struct y
1e910 43 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69  ColCache {.    i
1e920 6e 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20  nt iTable;      
1e930 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75       /* Table cu
1e940 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  rsor number */. 
1e950 20 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20     i16 iColumn; 
1e960 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c           /* Tabl
1e970 65 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20  e column number 
1e980 2a 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65  */.    u8 tempRe
1e990 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
1e9a0 69 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72  iReg is a temp r
1e9b0 65 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65  egister that nee
1e9c0 64 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a  ds to be freed *
1e9d0 2f 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c  /.    int iLevel
1e9e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1e9f0 65 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a  esting level */.
1ea00 20 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20      int iReg;   
1ea10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67            /* Reg
1ea20 20 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74   with value of t
1ea30 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65  his column. 0 me
1ea40 61 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20  ans none. */.   
1ea50 20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20   int lru;       
1ea60 20 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20         /* Least 
1ea70 72 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e  recently used en
1ea80 74 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c  try has the smal
1ea90 6c 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20  lest value */.  
1eaa0 7d 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49  } aColCache[SQLI
1eab0 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20  TE_N_COLCACHE]; 
1eac0 20 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68   /* One for each
1ead0 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e   column cache en
1eae0 74 72 79 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  try */.  ExprLis
1eaf0 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
1eb00 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
1eb10 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
1eb20 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
1eb30 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1eb40 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
1eb50 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
1eb60 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
1eb70 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
1eb80 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
1eb90 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
1eba0 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1ebb0 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
1ebc0 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
1ebd0 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
1ebe0 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
1ebf0 20 20 69 6e 74 20 63 6f 6f 6b 69 65 56 61 6c 75    int cookieValu
1ec00 65 5b 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54  e[SQLITE_MAX_ATT
1ec10 41 43 48 45 44 2b 32 5d 3b 20 20 2f 2a 20 56 61  ACHED+2];  /* Va
1ec20 6c 75 65 73 20 6f 66 20 63 6f 6f 6b 69 65 73 20  lues of cookies 
1ec30 74 6f 20 76 65 72 69 66 79 20 2a 2f 0a 20 20 69  to verify */.  i
1ec40 6e 74 20 72 65 67 52 6f 77 69 64 3b 20 20 20 20  nt regRowid;    
1ec50 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1ec60 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64 20 6f 66  holding rowid of
1ec70 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 65 6e   CREATE TABLE en
1ec80 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67  try */.  int reg
1ec90 52 6f 6f 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Root;         /*
1eca0 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e   Register holdin
1ecb0 67 20 72 6f 6f 74 20 70 61 67 65 20 6e 75 6d 62  g root page numb
1ecc0 65 72 20 66 6f 72 20 6e 65 77 20 6f 62 6a 65 63  er for new objec
1ecd0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
1ece0 41 72 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Arg;         /* 
1ecf0 4d 61 78 20 61 72 67 73 20 70 61 73 73 65 64 20  Max args passed 
1ed00 74 6f 20 75 73 65 72 20 66 75 6e 63 74 69 6f 6e  to user function
1ed10 20 62 79 20 73 75 62 2d 70 72 6f 67 72 61 6d 20   by sub-program 
1ed20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41  */.#if SELECTTRA
1ed30 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20 69 6e 74  CE_ENABLED.  int
1ed40 20 6e 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20   nSelect;       
1ed50 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 53    /* Number of S
1ed60 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 73  ELECT statements
1ed70 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e 74 20 6e   seen */.  int n
1ed80 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b 20 20 20  SelectIndent;   
1ed90 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f 20 69 6e  /* How far to in
1eda0 64 65 6e 74 20 53 45 4c 45 43 54 54 52 41 43 45  dent SELECTTRACE
1edb0 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e  () output */.#en
1edc0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
1edd0 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43  TE_OMIT_SHARED_C
1ede0 41 43 48 45 0a 20 20 69 6e 74 20 6e 54 61 62 6c  ACHE.  int nTabl
1edf0 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 2f 2a  eLock;        /*
1ee00 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 63 6b 73   Number of locks
1ee10 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63 6b 20 2a   in aTableLock *
1ee20 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b 20 2a 61  /.  TableLock *a
1ee30 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a 20 52 65  TableLock; /* Re
1ee40 71 75 69 72 65 64 20 74 61 62 6c 65 20 6c 6f 63  quired table loc
1ee50 6b 73 20 66 6f 72 20 73 68 61 72 65 64 2d 63 61  ks for shared-ca
1ee60 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 65 6e 64  che mode */.#end
1ee70 69 66 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f  if.  AutoincInfo
1ee80 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20 49 6e 66   *pAinc;  /* Inf
1ee90 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 41  ormation about A
1eea0 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20 63 6f 75  UTOINCREMENT cou
1eeb0 6e 74 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 20 49  nters */..  /* I
1eec0 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
1eed0 77 68 69 6c 65 20 63 6f 64 69 6e 67 20 74 72 69  while coding tri
1eee0 67 67 65 72 20 70 72 6f 67 72 61 6d 73 2e 20 2a  gger programs. *
1eef0 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
1ef00 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
1ef10 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
1ef20 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
1ef30 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
1ef40 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
1ef50 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
1ef60 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1ef70 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ed for */.  int 
1ef80 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
1ef90 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
1efa0 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1efb0 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
1efc0 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ABLE */.  u32 nQ
1efd0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
1efe0 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
1eff0 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
1f000 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
1f010 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
1f020 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1f030 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
1f040 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1f050 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
1f060 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1f070 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1f080 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1f090 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
1f0a0 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
1f0b0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1f0c0 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
1f0d0 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
1f0e0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1f0f0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1f100 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
1f110 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
1f120 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
1f130 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
1f140 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
1f150 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
1f160 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f170 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f180 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f190 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20  *************.  
1f1a0 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73  ** Above is cons
1f1b0 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63  tant between rec
1f1c0 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20  ursions.  Below 
1f1d0 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20  is reset before 
1f1e0 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65  and after.  ** e
1f1f0 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20  ach recursion.  
1f200 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74  The boundary bet
1f210 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72  ween these two r
1f220 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d  egions is determ
1f230 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20  ined.  ** using 
1f240 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 6e  offsetof(Parse,n
1f250 56 61 72 29 20 73 6f 20 74 68 65 20 6e 56 61 72  Var) so the nVar
1f260 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
1f270 68 65 20 66 69 72 73 74 20 66 69 65 6c 64 0a 20  he first field. 
1f280 20 2a 2a 20 69 6e 20 74 68 65 20 72 65 63 75 72   ** in the recur
1f290 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
1f2a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f2b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f2c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f2d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f2e0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 79 6e 56 61  *******/..  ynVa
1f2f0 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
1f300 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f310 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
1f320 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
1f330 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74   so far */.  int
1f340 20 6e 7a 56 61 72 3b 20 20 20 20 20 20 20 20 20   nzVar;         
1f350 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f360 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 6c   of available sl
1f370 6f 74 73 20 69 6e 20 61 7a 56 61 72 5b 5d 20 2a  ots in azVar[] *
1f380 2f 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72  /.  u8 iPkSortOr
1f390 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
1f3a0 20 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72   ASC or DESC for
1f3b0 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
1f3c0 20 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70   KEY */.  u8 exp
1f3d0 6c 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lain;           
1f3e0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
1f3f0 68 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20  he EXPLAIN flag 
1f400 69 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20  is found on the 
1f410 71 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66  query */.#ifndef
1f420 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
1f430 54 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64  TUALTABLE.  u8 d
1f440 65 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20  eclareVtab;     
1f450 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
1f460 20 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f   inside sqlite3_
1f470 64 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a  declare_vtab() *
1f480 2f 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63  /.  int nVtabLoc
1f490 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  k;            /*
1f4a0 20 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75   Number of virtu
1f4b0 61 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63  al tables to loc
1f4c0 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e  k */.#endif.  in
1f4d0 74 20 6e 41 6c 69 61 73 3b 20 20 20 20 20 20 20  t nAlias;       
1f4e0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f4f0 72 20 6f 66 20 61 6c 69 61 73 65 64 20 72 65 73  r of aliased res
1f500 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 73 20  ult set columns 
1f510 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 69 67 68 74  */.  int nHeight
1f520 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1f530 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74 72 65  * Expression tre
1f540 65 20 68 65 69 67 68 74 20 6f 66 20 63 75 72 72  e height of curr
1f550 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74 20 2a  ent sub-select *
1f560 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
1f570 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a 20 20  _OMIT_EXPLAIN.  
1f580 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b 20 20  int iSelectId;  
1f590 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 44 20            /* ID 
1f5a0 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c 65 63  of current selec
1f5b0 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  t for EXPLAIN ou
1f5c0 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20 69 4e  tput */.  int iN
1f5d0 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20 20 20  extSelectId;    
1f5e0 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76 61 69      /* Next avai
1f5f0 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49 44 20  lable select ID 
1f600 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75 74 70  for EXPLAIN outp
1f610 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 63  ut */.#endif.  c
1f620 68 61 72 20 2a 2a 61 7a 56 61 72 3b 20 20 20 20  har **azVar;    
1f630 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e           /* Poin
1f640 74 65 72 73 20 74 6f 20 6e 61 6d 65 73 20 6f 66  ters to names of
1f650 20 70 61 72 61 6d 65 74 65 72 73 20 2a 2f 0a 20   parameters */. 
1f660 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
1f670 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
1f680 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
1f690 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
1f6a0 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
1f6b0 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
1f6c0 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
1f6d0 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
1f6e0 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
1f6f0 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
1f700 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
1f710 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
1f720 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
1f730 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
1f740 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
1f750 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
1f760 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
1f770 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
1f780 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
1f790 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
1f7a0 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
1f7b0 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
1f7c0 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
1f7d0 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 20 20 54  callbacks */.  T
1f7e0 6f 6b 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b  oken sNameToken;
1f7f0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65           /* Toke
1f800 6e 20 77 69 74 68 20 75 6e 71 75 61 6c 69 66 69  n with unqualifi
1f810 65 64 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74  ed schema object
1f820 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e   name */.  Token
1f830 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20   sLastToken;    
1f840 20 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74       /* The last
1f850 20 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f   token parsed */
1f860 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
1f870 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c  OMIT_VIRTUALTABL
1f880 45 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20  E.  Token sArg; 
1f890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f8a0 20 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f   Complete text o
1f8b0 66 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d  f a module argum
1f8c0 65 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ent */.  Table *
1f8d0 2a 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  *apVtabLock;    
1f8e0 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
1f8f0 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   virtual tables 
1f900 6e 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20  needing locking 
1f910 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c  */.#endif.  Tabl
1f920 65 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20  e *pZombieTab;  
1f930 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
1f940 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74   Table objects t
1f950 6f 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63  o delete after c
1f960 6f 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69  ode gen */.  Tri
1f970 67 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65  ggerPrg *pTrigge
1f980 72 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64  rPrg;  /* Linked
1f990 20 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74   list of coded t
1f9a0 72 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74  riggers */.  Wit
1f9b0 68 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20  h *pWith;       
1f9c0 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e         /* Curren
1f9d0 74 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f  t WITH clause, o
1f9e0 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68  r NULL */.  With
1f9f0 20 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20   *pWithToFree;  
1fa00 20 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68        /* Free th
1fa10 69 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61  is WITH object a
1fa20 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65  t the end of the
1fa30 20 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a   parse */.};../*
1fa40 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
1fa50 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 73  if currently ins
1fa60 69 64 65 20 61 6e 20 73 71 6c 69 74 65 33 5f 64  ide an sqlite3_d
1fa70 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 63 61  eclare_vtab() ca
1fa80 6c 6c 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ll..*/.#ifdef SQ
1fa90 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
1faa0 4c 54 41 42 4c 45 0a 20 20 23 64 65 66 69 6e 65  LTABLE.  #define
1fab0 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42   IN_DECLARE_VTAB
1fac0 20 30 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69   0.#else.  #defi
1fad0 6e 65 20 49 4e 5f 44 45 43 4c 41 52 45 5f 56 54  ne IN_DECLARE_VT
1fae0 41 42 20 28 70 50 61 72 73 65 2d 3e 64 65 63 6c  AB (pParse->decl
1faf0 61 72 65 56 74 61 62 29 0a 23 65 6e 64 69 66 0a  areVtab).#endif.
1fb00 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1fb10 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1fb20 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 61  ing structure ca
1fb30 6e 20 62 65 20 64 65 63 6c 61 72 65 64 20 6f 6e  n be declared on
1fb40 20 61 20 73 74 61 63 6b 20 61 6e 64 20 75 73 65   a stack and use
1fb50 64 0a 2a 2a 20 74 6f 20 73 61 76 65 20 74 68 65  d.** to save the
1fb60 20 50 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74   Parse.zAuthCont
1fb70 65 78 74 20 76 61 6c 75 65 20 73 6f 20 74 68 61  ext value so tha
1fb80 74 20 69 74 20 63 61 6e 20 62 65 20 72 65 73 74  t it can be rest
1fb90 6f 72 65 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73  ored later..*/.s
1fba0 74 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78  truct AuthContex
1fbb0 74 20 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72  t {.  const char
1fbc0 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20   *zAuthContext; 
1fbd0 20 20 2f 2a 20 50 75 74 20 73 61 76 65 64 20 50    /* Put saved P
1fbe0 61 72 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78  arse.zAuthContex
1fbf0 74 20 68 65 72 65 20 2a 2f 0a 20 20 50 61 72 73  t here */.  Pars
1fc00 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1fc10 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 50          /* The P
1fc20 61 72 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  arse structure *
1fc30 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66  /.};../*.** Bitf
1fc40 69 65 6c 64 20 66 6c 61 67 73 20 66 6f 72 20 50  ield flags for P
1fc50 35 20 76 61 6c 75 65 20 69 6e 20 76 61 72 69 6f  5 value in vario
1fc60 75 73 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a  us opcodes..**.*
1fc70 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69  * Value constrai
1fc80 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69  nts (enforced vi
1fc90 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20  a assert()):.** 
1fca0 20 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48     OPFLAG_LENGTH
1fcb0 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
1fcc0 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20  _FUNC_LENGTH.** 
1fcd0 20 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46     OPFLAG_TYPEOF
1fce0 41 52 47 20 20 20 20 3d 3d 20 53 51 4c 49 54 45  ARG    == SQLITE
1fcf0 5f 46 55 4e 43 5f 54 59 50 45 4f 46 0a 2a 2a 20  _FUNC_TYPEOF.** 
1fd00 20 20 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53     OPFLAG_BULKCS
1fd10 52 20 20 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  R      == BTREE_
1fd20 42 55 4c 4b 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f  BULKLOAD.**    O
1fd30 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
1fd40 20 20 20 3d 3d 20 42 54 52 45 45 5f 53 45 45 4b     == BTREE_SEEK
1fd50 5f 45 51 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  _EQ.**    OPFLAG
1fd60 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20 3d 3d  _FORDELETE    ==
1fd70 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45   BTREE_FORDELETE
1fd80 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 41  .**    OPFLAG_SA
1fd90 56 45 50 4f 53 49 54 49 4f 4e 20 3d 3d 20 42 54  VEPOSITION == BT
1fda0 52 45 45 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  REE_SAVEPOSITION
1fdb0 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 41 55  .**    OPFLAG_AU
1fdc0 58 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54  XDELETE    == BT
1fdd0 52 45 45 5f 41 55 58 44 45 4c 45 54 45 0a 2a 2f  REE_AUXDELETE.*/
1fde0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1fdf0 4e 43 48 41 4e 47 45 20 20 20 20 20 20 20 30 78  NCHANGE       0x
1fe00 30 31 20 20 20 20 2f 2a 20 4f 50 5f 49 6e 73 65  01    /* OP_Inse
1fe10 72 74 3a 20 53 65 74 20 74 6f 20 75 70 64 61 74  rt: Set to updat
1fe20 65 20 64 62 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f  e db->nChange */
1fe30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1fe40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fe50 20 20 20 20 20 20 2f 2a 20 41 6c 73 6f 20 75 73        /* Also us
1fe60 65 64 20 69 6e 20 50 32 20 28 6e 6f 74 20 50 35  ed in P2 (not P5
1fe70 29 20 6f 66 20 4f 50 5f 44 65 6c 65 74 65 20 2a  ) of OP_Delete *
1fe80 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1fe90 5f 45 50 48 45 4d 20 20 20 20 20 20 20 20 20 30  _EPHEM         0
1fea0 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x01    /* OP_Col
1feb0 75 6d 6e 3a 20 45 70 68 65 6d 65 72 61 6c 20 6f  umn: Ephemeral o
1fec0 75 74 70 75 74 20 69 73 20 6f 6b 20 2a 2f 0a 23  utput is ok */.#
1fed0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 41  define OPFLAG_LA
1fee0 53 54 52 4f 57 49 44 20 20 20 20 20 30 78 30 32  STROWID     0x02
1fef0 20 20 20 20 2f 2a 20 53 65 74 20 74 6f 20 75 70      /* Set to up
1ff00 64 61 74 65 20 64 62 2d 3e 6c 61 73 74 52 6f 77  date db->lastRow
1ff10 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  id */.#define OP
1ff20 46 4c 41 47 5f 49 53 55 50 44 41 54 45 20 20 20  FLAG_ISUPDATE   
1ff30 20 20 20 30 78 30 34 20 20 20 20 2f 2a 20 54 68     0x04    /* Th
1ff40 69 73 20 4f 50 5f 49 6e 73 65 72 74 20 69 73 20  is OP_Insert is 
1ff50 61 6e 20 73 71 6c 20 55 50 44 41 54 45 20 2a 2f  an sql UPDATE */
1ff60 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
1ff70 41 50 50 45 4e 44 20 20 20 20 20 20 20 20 30 78  APPEND        0x
1ff80 30 38 20 20 20 20 2f 2a 20 54 68 69 73 20 69 73  08    /* This is
1ff90 20 6c 69 6b 65 6c 79 20 74 6f 20 62 65 20 61 6e   likely to be an
1ffa0 20 61 70 70 65 6e 64 20 2a 2f 0a 23 64 65 66 69   append */.#defi
1ffb0 6e 65 20 4f 50 46 4c 41 47 5f 55 53 45 53 45 45  ne OPFLAG_USESEE
1ffc0 4b 52 45 53 55 4c 54 20 30 78 31 30 20 20 20 20  KRESULT 0x10    
1ffd0 2f 2a 20 54 72 79 20 74 6f 20 61 76 6f 69 64 20  /* Try to avoid 
1ffe0 61 20 73 65 65 6b 20 69 6e 20 42 74 72 65 65 49  a seek in BtreeI
1fff0 6e 73 65 72 74 28 29 20 2a 2f 0a 23 69 66 64 65  nsert() */.#ifde
20000 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
20010 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 23  PREUPDATE_HOOK.#
20020 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
20030 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78 34 30  NOOP        0x40
20040 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65      /* OP_Delete
20050 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61 74 65   does pre-update
20060 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 65  -hook only */.#e
20070 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4f 50 46  ndif.#define OPF
20080 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20  LAG_LENGTHARG   
20090 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f    0x40    /* OP_
200a0 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64  Column only used
200b0 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f   for length() */
200c0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
200d0 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30 78  TYPEOFARG     0x
200e0 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  80    /* OP_Colu
200f0 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
20100 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65   typeof() */.#de
20110 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b  fine OPFLAG_BULK
20120 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20 20  CSR       0x01  
20130 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75    /* OP_Open** u
20140 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b  sed to open bulk
20150 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69   cursor */.#defi
20160 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51  ne OPFLAG_SEEKEQ
20170 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20 20          0x02    
20180 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72  /* OP_Open** cur
20190 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65 6b  sor uses EQ seek
201a0 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65   only */.#define
201b0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
201c0 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a  E     0x08    /*
201d0 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20   OP_Open should 
201e0 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c  use BTREE_FORDEL
201f0 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE */.#define O
20200 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20  PFLAG_P2ISREG   
20210 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50      0x10    /* P
20220 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69  2 to OP_Open** i
20230 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d  s a register num
20240 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ber */.#define O
20250 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20  PFLAG_PERMUTE   
20260 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
20270 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74  P_Compare: use t
20280 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a  he permutation *
20290 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
202a0 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30  _SAVEPOSITION  0
202b0 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x02    /* OP_Del
202c0 65 74 65 3a 20 6b 65 65 70 20 63 75 72 73 6f 72  ete: keep cursor
202d0 20 70 6f 73 69 74 69 6f 6e 20 2a 2f 0a 23 64 65   position */.#de
202e0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44  fine OPFLAG_AUXD
202f0 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20  ELETE     0x04  
20300 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20    /* OP_Delete: 
20310 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54  index in a DELET
20320 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  E op */../*. * E
20330 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
20340 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
20350 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
20360 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
20370 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
20380 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20   Trigger.. *. * 
20390 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
203a0 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
203b0 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
203c0 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
203d0 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
203e0 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
203f0 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
20400 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
20410 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20  presents the. * 
20420 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
20430 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
20440 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
20450 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
20460 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
20470 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
20480 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
20490 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
204a0 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
204b0 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
204c0 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
204d0 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
204e0 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
204f0 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
20500 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
20510 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
20520 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
20530 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
20540 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
20550 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
20560 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
20570 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
20580 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
20590 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
205a0 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
205b0 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
205c0 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
205d0 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
205e0 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
205f0 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
20600 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
20610 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
20620 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
20630 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
20640 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
20650 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
20660 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
20670 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
20680 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
20690 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
206a0 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
206b0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
206c0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
206d0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
206e0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
206f0 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
20700 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
20710 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
20720 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
20730 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
20740 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
20750 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
20760 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
20770 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
20780 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
20790 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
207a0 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
207b0 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
207c0 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
207d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
207e0 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
207f0 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
20800 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
20810 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
20820 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
20830 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
20840 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
20850 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
20860 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
20870 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
20880 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
20890 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
208a0 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
208b0 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
208c0 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
208d0 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
208e0 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
208f0 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
20900 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
20910 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
20920 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
20930 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
20940 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
20950 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
20960 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
20970 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
20980 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  which..**.** If 
20990 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
209a0 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
209b0 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
209c0 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
209d0 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
209e0 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
209f0 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
20a00 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
20a10 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
20a20 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
20a30 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
20a40 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
20a50 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
20a60 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
20a70 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
20a80 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
20a90 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
20aa0 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
20ab0 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
20ac0 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65  .. *. * Instance
20ad0 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
20ae0 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
20af0 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
20b00 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
20b10 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
20b20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
20b30 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
20b40 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
20b50 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61  mber of the. * a
20b60 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
20b70 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
20b80 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
20b90 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
20ba0 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
20bb0 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
20bc0 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
20bd0 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ram.. *. * The "
20be0 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
20bf0 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
20c00 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
20c10 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
20c20 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
20c30 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
20c40 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
20c50 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
20c60 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
20c70 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66   the. * value of
20c80 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
20c90 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
20ca0 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
20cb0 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
20cc0 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
20cd0 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
20ce0 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
20cf0 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
20d00 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
20d10 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
20d20 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
20d30 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
20d40 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
20d50 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
20d60 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
20d70 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  L.. * zTarget   
20d80 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
20d90 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
20da0 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
20db0 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
20dc0 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
20dd0 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
20de0 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
20df0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
20e00 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
20e10 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
20e20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
20e30 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
20e40 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
20e50 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
20e60 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
20e70 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
20e80 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .... *          
20e90 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
20ea0 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
20eb0 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
20ec0 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
20ed0 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
20ee0 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
20ef0 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
20f00 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
20f10 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
20f20 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
20f30 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
20f40 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
20f50 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
20f60 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
20f70 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
20f80 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
20f90 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
20fa0 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70   NULL.. *. * (op
20fb0 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20   == TK_UPDATE). 
20fc0 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
20fd0 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
20fe0 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
20ff0 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  ate.. * pWhere  
21000 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
21010 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
21020 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
21030 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
21040 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
21050 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
21060 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
21070 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
21080 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
21090 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
210a0 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
210b0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
210c0 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
210d0 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
210e0 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
210f0 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
21100 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
21110 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63  nt.. *. */.struc
21120 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
21130 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
21140 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
21150 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
21160 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
21170 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
21180 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
21190 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
211a0 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
211b0 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
211c0 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
211d0 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
211e0 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
211f0 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
21200 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
21210 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
21220 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
21230 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
21240 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
21250 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
21260 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
21270 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
21280 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
21290 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
212a0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
212b0 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
212c0 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
212d0 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
212e0 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
212f0 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
21300 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
21310 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
21320 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
21330 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
21340 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
21350 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
21360 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
21370 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
21380 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
21390 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
213a0 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
213b0 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
213c0 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
213d0 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
213e0 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
213f0 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
21400 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
21410 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
21420 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
21430 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
21440 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
21450 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74  * explicit..*/.t
21460 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
21470 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
21480 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
21490 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
214a0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
214b0 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
214c0 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
214d0 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
214e0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
214f0 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
21500 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
21510 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
21520 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
21530 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
21540 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
21550 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
21560 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
21570 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
21580 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
21590 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
215a0 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
215b0 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
215c0 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
215d0 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
215e0 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
215f0 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
21600 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
21610 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
21620 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
21630 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
21640 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
21650 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
21660 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
21670 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
21680 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
21690 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
216a0 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
216b0 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
216c0 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
216d0 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
216e0 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
216f0 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
21700 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
21710 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
21720 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
21730 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
21740 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
21750 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
21760 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
21770 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
21780 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
21790 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
217a0 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20   u32  nChar;    
217b0 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
217c0 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
217d0 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
217e0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
217f0 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
21800 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
21810 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d  Text */.  u32  m
21820 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
21830 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
21840 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30  d allocation.  0
21850 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75   for no malloc u
21860 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61  sage */.  u8   a
21870 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
21880 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
21890 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
218a0 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72  BIG */.  u8   pr
218b0 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a  intfFlags;    /*
218c0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66   SQLITE_PRINTF f
218d0 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  lags below */.};
218e0 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
218f0 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66  M_NOMEM   1.#def
21900 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f  ine STRACCUM_TOO
21910 42 49 47 20 20 32 0a 23 64 65 66 69 6e 65 20 53  BIG  2.#define S
21920 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54  QLITE_PRINTF_INT
21930 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49  ERNAL 0x01  /* I
21940 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79  nternal-use-only
21950 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f   converters allo
21960 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wed */.#define S
21970 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
21980 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53  FUNC  0x02  /* S
21990 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  QL function argu
219a0 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74  ments to VXPrint
219b0 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  f */.#define SQL
219c0 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f  ITE_PRINTF_MALLO
219d0 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75  CED 0x04  /* Tru
219e0 65 20 69 66 20 78 54 65 78 74 20 69 73 20 61 6c  e if xText is al
219f0 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f  located space */
21a00 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c  ..#define isMall
21a10 6f 63 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e  oced(X)  (((X)->
21a20 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51  printfFlags & SQ
21a30 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c  LITE_PRINTF_MALL
21a40 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a  OCED)!=0).../*.*
21a50 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
21a60 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
21a70 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
21a80 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
21a90 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
21aa0 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
21ab0 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
21ac0 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
21ad0 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
21ae0 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
21af0 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
21b00 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
21b10 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
21b20 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
21b30 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
21b40 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
21b50 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
21b60 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
21b70 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64   /* 0 for main d
21b80 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20  atabase.  1 for 
21b90 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54  TEMP, 2.. for AT
21ba0 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20  TACHed */.  int 
21bb0 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
21bc0 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
21bd0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
21be0 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
21bf0 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
21c00 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
21c10 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
21c20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
21c30 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
21c40 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
21c50 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
21c60 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
21c70 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
21c80 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
21c90 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
21ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21cb0 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
21cc0 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
21cd0 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
21ce0 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
21cf0 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21d00 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
21d10 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
21d20 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
21d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21d40 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
21d50 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
21d60 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
21d70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21d80 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
21d90 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
21da0 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
21db0 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
21dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21dd0 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
21de0 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
21df0 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
21e00 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
21e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
21e30 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
21e40 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
21e50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
21e60 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
21e70 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
21e80 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
21e90 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
21ea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
21eb0 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
21ec0 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
21ed0 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
21ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ef0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
21f00 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
21f10 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ount */.  int nS
21f20 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20  tmtSpill;       
21f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
21f40 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c  tmt-journal spil
21f50 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68  l-to-disk thresh
21f60 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  old */.  sqlite3
21f70 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
21f80 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
21f90 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
21fa0 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
21fb0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
21fc0 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
21fd0 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
21fe0 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
21ff0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
22000 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
22010 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
22020 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
22030 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
22040 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
22050 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
22060 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
22070 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
22080 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
22090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
220a0 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
220b0 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
220c0 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
220d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
220e0 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
220f0 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
22100 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
22110 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
22120 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
22130 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
22140 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
22150 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
22160 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
22170 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
22180 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
22190 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20  oid *pScratch;  
221a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
221b0 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f   /* Scratch memo
221c0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63  ry */.  int szSc
221d0 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
221e0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
221f0 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63  e of each scratc
22200 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  h buffer */.  in
22210 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20  t nScratch;     
22220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22230 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72  /* Number of scr
22240 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a  atch buffers */.
22250 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
22260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22270 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
22280 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
22290 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
222a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222b0 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
222c0 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
222d0 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
222e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
222f0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
22300 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
22310 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
22320 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
22330 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
22340 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
22350 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
22360 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
22370 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
22380 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
22390 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
223a0 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
223b0 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20    u32 szPma;    
223c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223d0 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53      /* Maximum S
223e0 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a  orter PMA size *
223f0 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65  /.  /* The above
22400 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61   might be initia
22410 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72  lized to non-zer
22420 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  o.  The followin
22430 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73  g need to always
22440 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  .  ** initially 
22450 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72  be zero, however
22460 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69  . */.  int isIni
22470 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
22480 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
22490 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a   after initializ
224a0 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68  ation has finish
224b0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72  ed */.  int inPr
224c0 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20  ogress;         
224d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
224e0 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69  e while initiali
224f0 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  zation in progre
22500 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75  ss */.  int isMu
22510 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20  texInit;        
22520 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22530 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20  e after mutexes 
22540 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
22550 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f  */.  int isMallo
22560 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  cInit;          
22570 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
22580 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
22590 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
225a0 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74  int isPCacheInit
225b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
225c0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
225d0 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
225e0 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  lized */.  int n
225f0 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20  RefInitMutex;   
22600 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22610 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20  Number of users 
22620 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f  of pInitMutex */
22630 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
22640 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20   *pInitMutex;   
22650 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73       /* Mutex us
22660 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e  ed by sqlite3_in
22670 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20  itialize() */.  
22680 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69  void (*xLog)(voi
22690 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
226a0 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e  r*); /* Function
226b0 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a   for logging */.
226c0 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b    void *pLogArg;
226d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
226e0 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
226f0 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67  argument to xLog
22700 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
22710 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
22720 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f  G.  void(*xSqllo
22730 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  g)(void*,sqlite3
22740 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
22750 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71  nt);.  void *pSq
22760 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a  llogArg;.#endif.
22770 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44  #ifdef SQLITE_VD
22780 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a  BE_COVERAGE.  /*
22790 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
227a0 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20  allback (if not 
227b0 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64  NULL) is invoked
227c0 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62   on every VDBE b
227d0 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61  ranch.  ** opera
227e0 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63  tion.  Set the c
227f0 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51  allback using SQ
22800 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44  LITE_TESTCTRL_VD
22810 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a  BE_COVERAGE..  *
22820 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65  /.  void (*xVdbe
22830 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e  Branch)(void*,in
22840 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54  t iSrcLine,u8 eT
22850 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a  his,u8 eMx);  /*
22860 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   Callback */.  v
22870 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68  oid *pVdbeBranch
22880 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228a0 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
228b0 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64  argument */.#end
228c0 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
228d0 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54  E_OMIT_BUILTIN_T
228e0 45 53 54 0a 20 20 69 6e 74 20 28 2a 78 54 65 73  EST.  int (*xTes
228f0 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74 29 3b  tCallback)(int);
22900 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76 6f 6b          /* Invok
22910 65 64 20 62 79 20 73 71 6c 69 74 65 33 46 61 75  ed by sqlite3Fau
22920 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e 64 69  ltSim() */.#endi
22930 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c 74 69  f.  int bLocalti
22940 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20 20 20  meFault;        
22950 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
22960 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d 65 28   fail localtime(
22970 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74  ) calls */.  int
22980 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72 65 73   iOnceResetThres
22990 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20 20 2f  hold;          /
229a0 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65 74 20  * When to reset 
229b0 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65 72 73  OP_Once counters
229c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
229d0 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64  is macro is used
229e0 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72   inside of asser
229f0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
22a00 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a  o indicate that.
22a10 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20 69 73  ** the assert is
22a20 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61   only valid on a
22a30 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74   well-formed dat
22a40 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20  abase.  Instead 
22a50 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  of:.**.**     as
22a60 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a  sert( X );.**.**
22a70 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a   One writes:.**.
22a80 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
22a90 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29   || CORRUPT_DB )
22aa0 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f  ;.**.** CORRUPT_
22ab0 44 42 20 69 73 20 74 72 75 65 20 64 75 72 69 6e  DB is true durin
22ac0 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69  g normal operati
22ad0 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20  on.  CORRUPT_DB 
22ae0 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74  does not indicat
22af0 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61  e.** that the da
22b00 74 61 62 61 73 65 20 69 73 20 64 65 66 69 6e 69  tabase is defini
22b10 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e  tely corrupt, on
22b20 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67 68 74  ly that it might
22b30 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20   be corrupt..** 
22b40 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61  For most test ca
22b50 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20  ses, CORRUPT_DB 
22b60 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20  is set to false 
22b70 75 73 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a  using a special.
22b80 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
22b90 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73  control().  This
22ba0 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28   enables assert(
22bb0 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
22bc0 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20  prove.** things 
22bd0 74 68 61 74 20 61 72 65 20 61 6c 77 61 79 73 20  that are always 
22be0 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f  true for well-fo
22bf0 72 6d 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a  rmed databases..
22c00 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55  */.#define CORRU
22c10 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43  PT_DB  (sqlite3C
22c20 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75  onfig.neverCorru
22c30 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f  pt==0)../*.** Co
22c40 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61  ntext pointer pa
22c50 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67  ssed down throug
22c60 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e  h the tree-walk.
22c70 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65  .*/.struct Walke
22c80 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61  r {.  Parse *pPa
22c90 72 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  rse;            
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78  /* Parser contex
22cc0 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  t.  */.  int (*x
22cd0 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61  ExprCallback)(Wa
22ce0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20  lker*, Expr*);  
22cf0 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66     /* Callback f
22d00 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a  or expressions *
22d10 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63  /.  int (*xSelec
22d20 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65  tCallback)(Walke
22d30 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a  r*,Select*);  /*
22d40 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   Callback for SE
22d50 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20  LECTs */.  void 
22d60 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63  (*xSelectCallbac
22d70 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  k2)(Walker*,Sele
22d80 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63  ct*);/* Second c
22d90 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
22da0 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c  CTs */.  int wal
22db0 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20 20 20  kerDepth;       
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22dd0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22de0 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20  subqueries */.  
22df0 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20  u8 eCode;       
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73            /* A s
22e20 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20  mall processing 
22e30 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20  code */.  union 
22e40 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {               
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e60 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74      /* Extra dat
22e70 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a  a for callback *
22e80 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78  /.    NameContex
22e90 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20  t *pNC;         
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22eb0 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65   /* Naming conte
22ec0 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b  xt */.    int n;
22ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65       /* A counte
22f00 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75  r */.    int iCu
22f10 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
22f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f30 20 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20      /* A cursor 
22f40 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72  number */.    Sr
22f50 63 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b  cList *pSrcList;
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 20 20 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d           /* FROM
22f80 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73   clause */.    s
22f90 74 72 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a  truct SrcCount *
22fa0 70 53 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20  pSrcCount;      
22fb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75            /* Cou
22fc0 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66  nting column ref
22fd0 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73  erences */.    s
22fe0 74 72 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a  truct CCurHint *
22ff0 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20  pCCurHint;      
23000 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65            /* Use
23010 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48  d by codeCursorH
23020 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74  int() */.    int
23030 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20   *aiCol;        
23040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23050 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79          /* array
23060 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   of column index
23070 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
23080 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43   IdxCover *pIdxC
23090 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  over;           
230a0 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f       /* Check fo
230b0 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65  r index coverage
230c0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
230d0 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
230e0 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
230f0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
23100 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
23110 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
23120 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
23130 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
23140 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
23150 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
23160 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
23170 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
23180 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
23190 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
231a0 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
231b0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
231c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61  nt sqlite3ExprWa
231d0 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
231e0 45 78 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52  Expr*);../*.** R
231f0 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
23200 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
23210 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
23220 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
23230 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
23240 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
23250 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
23260 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
23270 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
23280 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
23290 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
232a0 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
232b0 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
232c0 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
232d0 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
232e0 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
232f0 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
23300 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
23310 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
23320 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73  cture represents
23330 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72   a set of one or
23340 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63   more CTEs.** (c
23350 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
23360 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64  essions) created
23370 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54   by a single WIT
23380 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  H clause..*/.str
23390 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74  uct With {.  int
233a0 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20   nCte;          
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
233c0 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69  Number of CTEs i
233d0 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
233e0 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75  e */.  With *pOu
233f0 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ter;            
23400 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69         /* Contai
23410 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65  ning WITH clause
23420 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73  , or NULL */.  s
23430 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20  truct Cte {     
23440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23450 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69  * For each CTE i
23460 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
23470 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61  e.... */.    cha
23480 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
234a0 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45  Name of this CTE
234b0 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
234c0 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20   *pCols;        
234d0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
234e0 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75  of explicit colu
234f0 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c  mn names, or NUL
23500 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  L */.    Select 
23510 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
23520 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
23530 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68  definition of th
23540 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f  is CTE */.    co
23550 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72  nst char *zCteEr
23560 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
23570 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   Error message f
23580 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65  or circular refe
23590 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b  rences */.  } a[
235a0 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53  1];.};..#ifdef S
235b0 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
235c0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
235d0 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62   the TreeView ob
235e0 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72  ject is used for
235f0 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f   printing the co
23600 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61  ntent of.** data
23610 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73   structures on s
23620 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
23630 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65  f() using a tree
23640 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73  -like view..*/.s
23650 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b  truct TreeView {
23660 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20  .  int iLevel;  
23670 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
23680 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65  ich level of the
23690 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20   tree we are on 
236a0 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31  */.  u8  bLine[1
236b0 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  00];         /* 
236c0 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e  Draw vertical in
236d0 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69   column i if bLi
236e0 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f  ne[i] is true */
236f0 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
23700 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f  LITE_DEBUG */../
23710 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49  *.** Assuming zI
23720 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  n points to the 
23730 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20  first byte of a 
23740 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c  UTF-8 character,
23750 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20  .** advance zIn 
23760 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
23770 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68  first byte of th
23780 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61  e next UTF-8 cha
23790 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  racter..*/.#defi
237a0 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55  ne SQLITE_SKIP_U
237b0 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20  TF8(zIn) {      
237c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
237d0 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e    \.  if( (*(zIn
237e0 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20  ++))>=0xc0 ){   
237f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23800 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
23810 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20   while( (*zIn & 
23820 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a  0xc0)==0x80 ){ z
23830 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20  In++; }         
23840 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20      \.  }       
23850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d               \.}
23880 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
23890 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73  TE_*_BKPT macros
238a0 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73   are substitutes
238b0 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63   for the error c
238c0 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65  odes with.** the
238d0 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77   same name but w
238e0 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54  ithout the _BKPT
238f0 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20   suffix.  These 
23900 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a  macros invoke.**
23910 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72   routines that r
23920 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e  eport the line-n
23930 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74  umber on which t
23940 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61  he error origina
23950 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c  ted.** using sql
23960 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65  ite3_log().  The
23970 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70   routines also p
23980 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69  rovide a conveni
23990 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20  ent place.** to 
239a0 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62  set a debugger b
239b0 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e  reakpoint..*/.in
239c0 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
239d0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
239e0 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
239f0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
23a00 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
23a10 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20  r(int);.#define 
23a20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
23a30 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75  KPT sqlite3Corru
23a40 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
23a50 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
23a60 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c  _MISUSE_BKPT sql
23a70 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
23a80 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
23a90 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
23aa0 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61  N_BKPT sqlite3Ca
23ab0 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49  ntopenError(__LI
23ac0 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c  NE__).#ifdef SQL
23ad0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
23ae0 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
23af0 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  r(int);.  int sq
23b00 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
23b10 72 72 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65 66  rror(int);.# def
23b20 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  ine SQLITE_NOMEM
23b30 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d  _BKPT sqlite3Nom
23b40 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
23b50 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
23b60 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
23b70 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e  PT sqlite3Ioerrn
23b80 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
23b90 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  __).#else.# defi
23ba0 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f  ne SQLITE_NOMEM_
23bb0 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45  BKPT SQLITE_NOME
23bc0 4d 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  M.# define SQLIT
23bd0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b  E_IOERR_NOMEM_BK
23be0 50 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  PT SQLITE_IOERR_
23bf0 4e 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a  NOMEM.#endif../*
23c00 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53  .** FTS3 and FTS
23c10 34 20 62 6f 74 68 20 72 65 71 75 69 72 65 20 76  4 both require v
23c20 69 72 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70  irtual table sup
23c30 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69  port.*/.#if defi
23c40 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
23c50 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20  VIRTUALTABLE).# 
23c60 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
23c70 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66  BLE_FTS3.# undef
23c80 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
23c90 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  TS4.#endif../*.*
23ca0 2a 20 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79  * FTS4 is really
23cb0 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f   an extension fo
23cc0 72 20 46 54 53 33 2e 20 20 49 74 20 69 73 20 65  r FTS3.  It is e
23cd0 6e 61 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65  nabled using the
23ce0 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  .** SQLITE_ENABL
23cf0 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42  E_FTS3 macro.  B
23d00 75 74 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66  ut to avoid conf
23d10 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61  usion we also ca
23d20 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  ll.** the SQLITE
23d30 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63  _ENABLE_FTS4 mac
23d40 72 6f 20 74 6f 20 73 65 72 76 65 20 61 73 20 61  ro to serve as a
23d50 6e 20 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49  n alias for SQLI
23d60 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a  TE_ENABLE_FTS3..
23d70 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
23d80 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
23d90 34 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  4) && !defined(S
23da0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
23db0 33 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  3).# define SQLI
23dc0 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31  TE_ENABLE_FTS3 1
23dd0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
23de0 68 65 20 63 74 79 70 65 2e 68 20 68 65 61 64 65  he ctype.h heade
23df0 72 20 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20  r is needed for 
23e00 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d  non-ASCII system
23e10 73 2e 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a  s.  It is also.*
23e20 2a 20 6e 65 65 64 65 64 20 62 79 20 46 54 53 33  * needed by FTS3
23e30 20 77 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e   when FTS3 is in
23e40 63 6c 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d  cluded in the am
23e50 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23  algamation..*/.#
23e60 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
23e70 54 45 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20  TE_ASCII) || \. 
23e80 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
23e90 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20  TE_ENABLE_FTS3) 
23ea0 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  && defined(SQLIT
23eb0 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29  E_AMALGAMATION))
23ec0 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70  .# include <ctyp
23ed0 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  e.h>.#endif../*.
23ee0 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
23ef0 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68   macros mimic th
23f00 65 20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61  e standard libra
23f10 72 79 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75  ry functions tou
23f20 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61  pper(),.** isspa
23f30 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c  ce(), isalnum(),
23f40 20 69 73 64 69 67 69 74 28 29 20 61 6e 64 20 69   isdigit() and i
23f50 73 78 64 69 67 69 74 28 29 2c 20 72 65 73 70 65  sxdigit(), respe
23f60 63 74 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20  ctively. The.** 
23f70 73 71 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20  sqlite versions 
23f80 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53  only work for AS
23f90 43 49 49 20 63 68 61 72 61 63 74 65 72 73 2c 20  CII characters, 
23fa0 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f  regardless of lo
23fb0 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  cale..*/.#ifdef 
23fc0 53 51 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64  SQLITE_ASCII.# d
23fd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75  efine sqlite3Tou
23fe0 70 70 65 72 28 78 29 20 20 28 28 78 29 26 7e 28  pper(x)  ((x)&~(
23ff0 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b  sqlite3CtypeMap[
24000 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24010 78 29 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66  x)]&0x20)).# def
24020 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73 70 61  ine sqlite3Isspa
24030 63 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ce(x)   (sqlite3
24040 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
24050 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
24060 31 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  1).# define sqli
24070 74 65 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20  te3Isalnum(x)   
24080 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
24090 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
240a0 28 78 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66  (x)]&0x06).# def
240b0 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70  ine sqlite3Isalp
240c0 68 61 28 78 29 20 20 20 28 73 71 6c 69 74 65 33  ha(x)   (sqlite3
240d0 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
240e0 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
240f0 32 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  2).# define sqli
24100 74 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20  te3Isdigit(x)   
24110 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70  (sqlite3CtypeMap
24120 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
24130 28 78 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66  (x)]&0x04).# def
24140 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
24150 67 69 74 28 78 29 20 20 28 73 71 6c 69 74 65 33  git(x)  (sqlite3
24160 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e  CtypeMap[(unsign
24170 65 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 30  ed char)(x)]&0x0
24180 38 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  8).# define sqli
24190 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20  te3Tolower(x)   
241a0 28 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c  (sqlite3UpperToL
241b0 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63  ower[(unsigned c
241c0 68 61 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69  har)(x)]).# defi
241d0 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74  ne sqlite3Isquot
241e0 65 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43  e(x)   (sqlite3C
241f0 74 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65  typeMap[(unsigne
24200 64 20 63 68 61 72 29 28 78 29 5d 26 30 78 38 30  d char)(x)]&0x80
24210 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
24220 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28   sqlite3Toupper(
24230 78 29 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e  x)   toupper((un
24240 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
24250 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24260 33 49 73 73 70 61 63 65 28 78 29 20 20 20 69 73  3Isspace(x)   is
24270 73 70 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20  space((unsigned 
24280 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
24290 6e 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75  ne sqlite3Isalnu
242a0 6d 28 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28  m(x)   isalnum((
242b0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
242c0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
242d0 74 65 33 49 73 61 6c 70 68 61 28 78 29 20 20 20  te3Isalpha(x)   
242e0 69 73 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65  isalpha((unsigne
242f0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
24300 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69  fine sqlite3Isdi
24310 67 69 74 28 78 29 20 20 20 69 73 64 69 67 69 74  git(x)   isdigit
24320 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
24330 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
24340 6c 69 74 65 33 49 73 78 64 69 67 69 74 28 78 29  lite3Isxdigit(x)
24350 20 20 69 73 78 64 69 67 69 74 28 28 75 6e 73 69    isxdigit((unsi
24360 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
24370 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
24380 6f 6c 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f  olower(x)   tolo
24390 77 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68  wer((unsigned ch
243a0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
243b0 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
243c0 78 29 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c  x)   ((x)=='"'||
243d0 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d  (x)=='\''||(x)==
243e0 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23  '['||(x)=='`').#
243f0 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
24400 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
24410 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e  EOPTION_DIAGS.in
24420 74 20 73 71 6c 69 74 65 33 49 73 49 64 43 68 61  t sqlite3IsIdCha
24430 72 28 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  r(u8);.#endif../
24440 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75  *.** Internal fu
24450 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65  nction prototype
24460 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33  s.*/.int sqlite3
24470 53 74 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68  StrICmp(const ch
24480 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  ar*,const char*)
24490 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  ;.int sqlite3Str
244a0 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72  len30(const char
244b0 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
244c0 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75  3ColumnType(Colu
244d0 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66  mn*,char*);.#def
244e0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49  ine sqlite3StrNI
244f0 43 6d 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e  Cmp sqlite3_strn
24500 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65  icmp..int sqlite
24510 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64  3MallocInit(void
24520 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
24530 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a  allocEnd(void);.
24540 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
24550 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a  loc(u64);.void *
24560 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72  sqlite3MallocZer
24570 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  o(u64);.void *sq
24580 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
24590 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  o(sqlite3*, u64)
245a0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44  ;.void *sqlite3D
245b0 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74  bMallocRaw(sqlit
245c0 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  e3*, u64);.void 
245d0 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
245e0 52 61 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  RawNN(sqlite3*, 
245f0 75 36 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  u64);.char *sqli
24600 74 65 33 44 62 53 74 72 44 75 70 28 73 71 6c 69  te3DbStrDup(sqli
24610 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
24620 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
24630 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
24640 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
24650 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
24660 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a  te3Realloc(void*
24670 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
24680 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72  lite3DbReallocOr
24690 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Free(sqlite3 *, 
246a0 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
246b0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
246c0 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  lloc(sqlite3 *, 
246d0 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f  void *, u64);.vo
246e0 69 64 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  id sqlite3DbFree
246f0 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a  (sqlite3*, void*
24700 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  );.int sqlite3Ma
24710 6c 6c 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b  llocSize(void*);
24720 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61  .int sqlite3DbMa
24730 6c 6c 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33  llocSize(sqlite3
24740 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  *, void*);.void 
24750 2a 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d  *sqlite3ScratchM
24760 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64  alloc(int);.void
24770 20 73 71 6c 69 74 65 33 53 63 72 61 74 63 68 46   sqlite3ScratchF
24780 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
24790 20 2a 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c   *sqlite3PageMal
247a0 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
247b0 71 6c 69 74 65 33 50 61 67 65 46 72 65 65 28 76  qlite3PageFree(v
247c0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  oid*);.void sqli
247d0 74 65 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74  te3MemSetDefault
247e0 28 76 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20  (void);.#ifndef 
247f0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
24800 54 49 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71  TIN_TEST.void sq
24810 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f  lite3BenignMallo
24820 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28  cHooks(void (*)(
24830 76 6f 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28  void), void (*)(
24840 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69  void));.#endif.i
24850 6e 74 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65  nt sqlite3HeapNe
24860 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a  arlyFull(void);.
24870 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d  ./*.** On system
24880 73 20 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61  s with ample sta
24890 63 6b 20 73 70 61 63 65 20 61 6e 64 20 74 68 61  ck space and tha
248a0 74 20 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61  t support alloca
248b0 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20  (), make.** use 
248c0 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f  of alloca() to o
248d0 62 74 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20  btain space for 
248e0 6c 61 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20  large automatic 
248f0 6f 62 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66  objects.  By def
24900 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20  ault,.** obtain 
24910 73 70 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f  space from mallo
24920 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61  c()..**.** The a
24930 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20  lloca() routine 
24940 6e 65 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55  never returns NU
24950 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63  LL.  This will c
24960 61 75 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a  ause code paths.
24970 2a 2a 20 74 68 61 74 20 64 65 61 6c 20 77 69 74  ** that deal wit
24980 68 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  h sqlite3StackAl
24990 6c 6f 63 28 29 20 66 61 69 6c 75 72 65 73 20 74  loc() failures t
249a0 6f 20 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65  o be unreachable
249b0 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
249c0 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20  TE_USE_ALLOCA.# 
249d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
249e0 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  ackAllocRaw(D,N)
249f0 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64     alloca(N).# d
24a00 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
24a10 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29  ckAllocZero(D,N)
24a20 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28    memset(alloca(
24a30 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69  N), 0, N).# defi
24a40 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
24a50 72 65 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23  ree(D,P).#else.#
24a60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
24a70 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e  tackAllocRaw(D,N
24a80 29 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  )   sqlite3DbMal
24a90 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65  locRaw(D,N).# de
24aa0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
24ab0 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20  kAllocZero(D,N) 
24ac0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
24ad0 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69  Zero(D,N).# defi
24ae0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46  ne sqlite3StackF
24af0 72 65 65 28 44 2c 50 29 20 20 20 20 20 20 20 73  ree(D,P)       s
24b00 71 6c 69 74 65 33 44 62 46 72 65 65 28 44 2c 50  qlite3DbFree(D,P
24b10 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20  ).#endif../* Do 
24b20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d  not allow both M
24b30 45 4d 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59  EMSYS5 and MEMSY
24b40 53 33 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64  S3 to be defined
24b50 20 74 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74   together.  If t
24b60 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61  hey.** are, disa
24b70 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23  ble MEMSYS3.*/.#
24b80 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
24b90 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73  BLE_MEMSYS5.cons
24ba0 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65  t sqlite3_mem_me
24bb0 74 68 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65  thods *sqlite3Me
24bc0 6d 47 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64  mGetMemsys5(void
24bd0 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45  );.#undef SQLITE
24be0 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a  _ENABLE_MEMSYS3.
24bf0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
24c00 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53  LITE_ENABLE_MEMS
24c10 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65  YS3.const sqlite
24c20 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73  3_mem_methods *s
24c30 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73  qlite3MemGetMems
24c40 79 73 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69  ys3(void);.#endi
24c50 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  f...#ifndef SQLI
24c60 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20  TE_MUTEX_OMIT.  
24c70 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
24c80 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c  thods const *sql
24c90 69 74 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78  ite3DefaultMutex
24ca0 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65  (void);.  sqlite
24cb0 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20  3_mutex_methods 
24cc0 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f  const *sqlite3No
24cd0 6f 70 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20  opMutex(void);. 
24ce0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
24cf0 73 71 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f  sqlite3MutexAllo
24d00 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  c(int);.  int sq
24d10 6c 69 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76  lite3MutexInit(v
24d20 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  oid);.  int sqli
24d30 74 65 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64  te3MutexEnd(void
24d40 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  );.#endif.#if !d
24d50 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55  efined(SQLITE_MU
24d60 54 45 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65  TEX_OMIT) && !de
24d70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54  fined(SQLITE_MUT
24d80 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20  EX_NOOP).  void 
24d90 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
24da0 72 69 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73  rier(void);.#els
24db0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
24dc0 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28  e3MemoryBarrier(
24dd0 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65  ).#endif..sqlite
24de0 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53  3_int64 sqlite3S
24df0 74 61 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b  tatusValue(int);
24e00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
24e10 74 75 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b  tusUp(int, int);
24e20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
24e30 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74  tusDown(int, int
24e40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
24e50 74 61 74 75 73 48 69 67 68 77 61 74 65 72 28 69  tatusHighwater(i
24e60 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63  nt, int);../* Ac
24e70 63 65 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20  cess to mutexes 
24e80 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  used by sqlite3_
24e90 73 74 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69  status() */.sqli
24ea0 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74  te3_mutex *sqlit
24eb0 65 33 50 63 61 63 68 65 31 4d 75 74 65 78 28 76  e3Pcache1Mutex(v
24ec0 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75  oid);.sqlite3_mu
24ed0 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  tex *sqlite3Mall
24ee0 6f 63 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a  ocMutex(void);..
24ef0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
24f00 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49  MIT_FLOATING_POI
24f10 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  NT.  int sqlite3
24f20 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23  IsNaN(double);.#
24f30 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
24f40 6c 69 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30  lite3IsNaN(X)  0
24f50 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
24f60 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
24f70 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
24f80 63 74 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f  cture holds info
24f90 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51  rmation about SQ
24fa0 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61  L.** functions a
24fb0 72 67 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72  rguments that ar
24fc0 65 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  e the parameters
24fd0 20 74 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29   to the printf()
24fe0 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74   function..*/.st
24ff0 72 75 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d  ruct PrintfArgum
25000 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72  ents {.  int nAr
25010 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
25020 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65    /* Total numbe
25030 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a  r of arguments *
25040 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20  /.  int nUsed;  
25050 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
25060 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  Number of argume
25070 6e 74 73 20 75 73 65 64 20 73 6f 20 66 61 72 20  nts used so far 
25080 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c  */.  sqlite3_val
25090 75 65 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a  ue **apArg;   /*
250a0 20 54 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61   The argument va
250b0 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64  lues */.};..void
250c0 20 73 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66   sqlite3VXPrintf
250d0 28 53 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73  (StrAccum*, cons
250e0 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74  t char*, va_list
250f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58  );.void sqlite3X
25100 50 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a  Printf(StrAccum*
25110 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
25120 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ..);.char *sqlit
25130 65 33 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  e3MPrintf(sqlite
25140 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
25150 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ...);.char *sqli
25160 74 65 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69  te3VMPrintf(sqli
25170 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
25180 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20  , va_list);.#if 
25190 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
251a0 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
251b0 28 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f  (SQLITE_HAVE_OS_
251c0 54 52 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71  TRACE).  void sq
251d0 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66  lite3DebugPrintf
251e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  (const char*, ..
251f0 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  .);.#endif.#if d
25200 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
25210 53 54 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69  ST).  void *sqli
25220 74 65 33 54 65 73 74 54 65 78 74 54 6f 50 74 72  te3TestTextToPtr
25230 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  (const char*);.#
25240 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e  endif..#if defin
25250 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
25260 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
25270 72 65 65 56 69 65 77 45 78 70 72 28 54 72 65 65  reeViewExpr(Tree
25280 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
25290 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20  r*, u8);.  void 
252a0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 42  sqlite3TreeViewB
252b0 61 72 65 45 78 70 72 4c 69 73 74 28 54 72 65 65  areExprList(Tree
252c0 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70  View*, const Exp
252d0 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
252e0 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
252f0 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
25300 4c 69 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20  List(TreeView*, 
25310 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c  const ExprList*,
25320 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a   u8, const char*
25330 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
25340 33 54 72 65 65 56 69 65 77 53 65 6c 65 63 74 28  3TreeViewSelect(
25350 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74  TreeView*, const
25360 20 53 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20   Select*, u8);. 
25370 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
25380 65 56 69 65 77 57 69 74 68 28 54 72 65 65 56 69  eViewWith(TreeVi
25390 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a  ew*, const With*
253a0 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a  , u8);.#endif...
253b0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 74 53  void sqlite3SetS
253c0 74 72 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73  tring(char **, s
253d0 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63  qlite3*, const c
253e0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
253f0 74 65 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73  te3ErrorMsg(Pars
25400 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e*, const char*,
25410 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69   ...);.void sqli
25420 74 65 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a  te3Dequote(char*
25430 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
25440 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c  okenInit(Token*,
25450 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
25460 74 65 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63  te3KeywordCode(c
25470 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
25480 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
25490 71 6c 69 74 65 33 52 75 6e 50 61 72 73 65 72 28  qlite3RunParser(
254a0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
254b0 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76  ar*, char **);.v
254c0 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73  oid sqlite3Finis
254d0 68 43 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b  hCoding(Parse*);
254e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54  .int sqlite3GetT
254f0 65 6d 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a  empReg(Parse*);.
25500 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
25510 61 73 65 54 65 6d 70 52 65 67 28 50 61 72 73 65  aseTempReg(Parse
25520 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
25530 74 65 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28  te3GetTempRange(
25540 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
25550 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
25560 54 65 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a  TempRange(Parse*
25570 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ,int,int);.void 
25580 73 71 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70  sqlite3ClearTemp
25590 52 65 67 43 61 63 68 65 28 50 61 72 73 65 2a 29  RegCache(Parse*)
255a0 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
255b0 44 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65  DEBUG.int sqlite
255c0 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28  3NoTempsInRange(
255d0 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b  Parse*,int,int);
255e0 0a 23 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71  .#endif.Expr *sq
255f0 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73  lite3ExprAlloc(s
25600 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
25610 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45  t Token*,int);.E
25620 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
25630 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
25640 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
25650 20 73 71 6c 69 74 65 33 45 78 70 72 41 74 74 61   sqlite3ExprAtta
25660 63 68 53 75 62 74 72 65 65 73 28 73 71 6c 69 74  chSubtrees(sqlit
25670 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c  e3*,Expr*,Expr*,
25680 45 78 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71  Expr*);.Expr *sq
25690 6c 69 74 65 33 50 45 78 70 72 28 50 61 72 73 65  lite3PExpr(Parse
256a0 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45  *, int, Expr*, E
256b0 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
256c0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
256d0 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28  3PExprAddSelect(
256e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53  Parse*, Expr*, S
256f0 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73  elect*);.Expr *s
25700 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
25710 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
25720 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
25730 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
25740 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
25750 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
25760 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
25770 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
25780 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
25790 73 71 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74  sqlite3ExprDelet
257a0 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72  e(sqlite3*, Expr
257b0 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71  *);.ExprList *sq
257c0 6c 69 74 65 33 45 78 70 72 4c 69 73 74 41 70 70  lite3ExprListApp
257d0 65 6e 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  end(Parse*,ExprL
257e0 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  ist*,Expr*);.Exp
257f0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
25800 70 72 4c 69 73 74 41 70 70 65 6e 64 56 65 63 74  prListAppendVect
25810 6f 72 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  or(Parse*,ExprLi
25820 73 74 2a 2c 49 64 4c 69 73 74 2a 2c 45 78 70 72  st*,IdList*,Expr
25830 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25840 45 78 70 72 4c 69 73 74 53 65 74 53 6f 72 74 4f  ExprListSetSortO
25850 72 64 65 72 28 45 78 70 72 4c 69 73 74 2a 2c 69  rder(ExprList*,i
25860 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25870 33 45 78 70 72 4c 69 73 74 53 65 74 4e 61 6d 65  3ExprListSetName
25880 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74  (Parse*,ExprList
25890 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76  *,Token*,int);.v
258a0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
258b0 69 73 74 53 65 74 53 70 61 6e 28 50 61 72 73 65  istSetSpan(Parse
258c0 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72  *,ExprList*,Expr
258d0 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Span*);.void sql
258e0 69 74 65 33 45 78 70 72 4c 69 73 74 44 65 6c 65  ite3ExprListDele
258f0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 45 78 70  te(sqlite3*, Exp
25900 72 4c 69 73 74 2a 29 3b 0a 75 33 32 20 73 71 6c  rList*);.u32 sql
25910 69 74 65 33 45 78 70 72 4c 69 73 74 46 6c 61 67  ite3ExprListFlag
25920 73 28 63 6f 6e 73 74 20 45 78 70 72 4c 69 73 74  s(const ExprList
25930 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
25940 6e 69 74 28 73 71 6c 69 74 65 33 2a 2c 20 63 68  nit(sqlite3*, ch
25950 61 72 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ar**);.int sqlit
25960 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 28 76  e3InitCallback(v
25970 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 68 61 72 2a  oid*, int, char*
25980 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 76 6f 69 64  *, char**);.void
25990 20 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 50   sqlite3Pragma(P
259a0 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
259b0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b  en*,Token*,int);
259c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73  .void sqlite3Res
259d0 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f  etAllSchemasOfCo
259e0 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  nnection(sqlite3
259f0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25a00 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28 73  ResetOneSchema(s
25a10 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
25a20 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61 70  id sqlite3Collap
25a30 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79 28  seDatabaseArray(
25a40 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
25a50 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e 74  sqlite3CommitInt
25a60 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71 6c  ernalChanges(sql
25a70 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
25a80 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d 6e  ite3DeleteColumn
25a90 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c 54  Names(sqlite3*,T
25aa0 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  able*);.int sqli
25ab0 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78  te3ColumnsFromEx
25ac0 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45 78  prList(Parse*,Ex
25ad0 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c  prList*,i16*,Col
25ae0 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  umn**);.void sql
25af0 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f 6c  ite3SelectAddCol
25b00 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61 74  umnTypeAndCollat
25b10 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
25b20 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c  *,Select*);.Tabl
25b30 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c 74  e *sqlite3Result
25b40 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72 73  SetOfSelect(Pars
25b50 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f 69  e*,Select*);.voi
25b60 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61 73  d sqlite3OpenMas
25b70 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20 2a  terTable(Parse *
25b80 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a 73  , int);.Index *s
25b90 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
25ba0 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a 69  Index(Table*);.i
25bb0 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  16 sqlite3Column
25bc0 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c 20  OfIndex(Index*, 
25bd0 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  i16);.void sqlit
25be0 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61 72  e3StartTable(Par
25bf0 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  se*,Token*,Token
25c00 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
25c10 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 45  t);.#if SQLITE_E
25c20 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f 4c  NABLE_HIDDEN_COL
25c30 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c 69  UMNS.  void sqli
25c40 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74  te3ColumnPropert
25c50 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62 6c  iesFromName(Tabl
25c60 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65  e*, Column*);.#e
25c70 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
25c80 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
25c90 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c 43  tiesFromName(T,C
25ca0 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65  ) /* no-op */.#e
25cb0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
25cc0 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  3AddColumn(Parse
25cd0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29  *,Token*,Token*)
25ce0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
25cf0 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a 2c  dNotNull(Parse*,
25d00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
25d10 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65 79  te3AddPrimaryKey
25d20 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
25d30 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  t*, int, int, in
25d40 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25d50 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61 69  AddCheckConstrai
25d60 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  nt(Parse*, Expr*
25d70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
25d80 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28 50  ddDefaultValue(P
25d90 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a 29  arse*,ExprSpan*)
25da0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
25db0 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61 72  dCollateType(Par
25dc0 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  se*, Token*);.vo
25dd0 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61 62  id sqlite3EndTab
25de0 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  le(Parse*,Token*
25df0 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65 63  ,Token*,u8,Selec
25e00 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
25e10 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20 63  ParseUri(const c
25e20 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
25e30 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c 0a  ,unsigned int*,.
25e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25e50 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73 2a      sqlite3_vfs*
25e60 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a 2a  *,char**,char **
25e70 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74 65  );.Btree *sqlite
25e80 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28 73  3DbNameToBtree(s
25e90 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
25ea0 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53 51  ar*);..#ifdef SQ
25eb0 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
25ec0 4e 5f 54 45 53 54 0a 23 20 64 65 66 69 6e 65 20  N_TEST.# define 
25ed0 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28  sqlite3FaultSim(
25ee0 58 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c  X) SQLITE_OK.#el
25ef0 73 65 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  se.  int sqlite3
25f00 46 61 75 6c 74 53 69 6d 28 69 6e 74 29 3b 0a 23  FaultSim(int);.#
25f10 65 6e 64 69 66 0a 0a 42 69 74 76 65 63 20 2a 73  endif..Bitvec *s
25f20 71 6c 69 74 65 33 42 69 74 76 65 63 43 72 65 61  qlite3BitvecCrea
25f30 74 65 28 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c  te(u32);.int sql
25f40 69 74 65 33 42 69 74 76 65 63 54 65 73 74 28 42  ite3BitvecTest(B
25f50 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
25f60 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
25f70 65 73 74 4e 6f 74 4e 75 6c 6c 28 42 69 74 76 65  estNotNull(Bitve
25f80 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
25f90 6c 69 74 65 33 42 69 74 76 65 63 53 65 74 28 42  lite3BitvecSet(B
25fa0 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 76 6f  itvec*, u32);.vo
25fb0 69 64 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  id sqlite3Bitvec
25fc0 43 6c 65 61 72 28 42 69 74 76 65 63 2a 2c 20 75  Clear(Bitvec*, u
25fd0 33 32 2c 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  32, void*);.void
25fe0 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 44 65   sqlite3BitvecDe
25ff0 73 74 72 6f 79 28 42 69 74 76 65 63 2a 29 3b 0a  stroy(Bitvec*);.
26000 75 33 32 20 73 71 6c 69 74 65 33 42 69 74 76 65  u32 sqlite3Bitve
26010 63 53 69 7a 65 28 42 69 74 76 65 63 2a 29 3b 0a  cSize(Bitvec*);.
26020 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
26030 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54  MIT_BUILTIN_TEST
26040 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76  .int sqlite3Bitv
26050 65 63 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e  ecBuiltinTest(in
26060 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a  t,int*);.#endif.
26070 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33  .RowSet *sqlite3
26080 52 6f 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74  RowSetInit(sqlit
26090 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69  e3*, void*, unsi
260a0 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20  gned int);.void 
260b0 73 71 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65  sqlite3RowSetCle
260c0 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69  ar(RowSet*);.voi
260d0 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49  d sqlite3RowSetI
260e0 6e 73 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69  nsert(RowSet*, i
260f0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
26100 52 6f 77 53 65 74 54 65 73 74 28 52 6f 77 53 65  RowSetTest(RowSe
26110 74 2a 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20  t*, int iBatch, 
26120 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
26130 33 52 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53  3RowSetNext(RowS
26140 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69  et*, i64*);..voi
26150 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 56  d sqlite3CreateV
26160 69 65 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  iew(Parse*,Token
26170 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
26180 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
26190 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66  *,int,int);..#if
261a0 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
261b0 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21  _OMIT_VIEW) || !
261c0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
261d0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
261e0 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56  ).  int sqlite3V
261f0 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
26200 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  s(Parse*,Table*)
26210 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
26220 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
26230 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20  olumnNames(A,B) 
26240 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51  0.#endif..#if SQ
26250 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45  LITE_MAX_ATTACHE
26260 44 3e 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  D>30.  int sqlit
26270 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e3DbMaskAllZero(
26280 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66  yDbMask);.#endif
26290 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f  .void sqlite3Dro
262a0 70 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53  pTable(Parse*, S
262b0 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
262c0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
262d0 43 6f 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61  CodeDropTable(Pa
262e0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
262f0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26300 6c 69 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65  lite3DeleteTable
26310 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
26320 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
26330 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52  TE_OMIT_AUTOINCR
26340 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c  EMENT.  void sql
26350 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e  ite3Autoincremen
26360 74 42 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50  tBegin(Parse *pP
26370 61 72 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71  arse);.  void sq
26380 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
26390 6e 74 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61  ntEnd(Parse *pPa
263a0 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  rse);.#else.# de
263b0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f  fine sqlite3Auto
263c0 69 6e 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58  incrementBegin(X
263d0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
263e0 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
263f0 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69  nd(X).#endif.voi
26400 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28  d sqlite3Insert(
26410 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
26420 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73  , Select*, IdLis
26430 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a  t*, int);.void *
26440 73 71 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f  sqlite3ArrayAllo
26450 63 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f  cate(sqlite3*,vo
26460 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74  id*,int,int*,int
26470 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69  *);.IdList *sqli
26480 74 65 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28  te3IdListAppend(
26490 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74  sqlite3*, IdList
264a0 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
264b0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64  sqlite3IdListInd
264c0 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74  ex(IdList*,const
264d0 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74   char*);.SrcList
264e0 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74   *sqlite3SrcList
264f0 45 6e 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a  Enlarge(sqlite3*
26500 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
26510 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a   int);.SrcList *
26520 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
26530 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53  pend(sqlite3*, S
26540 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c  rcList*, Token*,
26550 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73   Token*);.SrcLis
26560 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
26570 74 41 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28  tAppendFromTerm(
26580 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
26590 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
265a0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
265b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
265c0 20 20 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20          Token*, 
265d0 53 65 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20  Select*, Expr*, 
265e0 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  IdList*);.void s
265f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64  qlite3SrcListInd
26600 65 78 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20  exedBy(Parse *, 
26610 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e  SrcList *, Token
26620 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
26630 33 53 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73  3SrcListFuncArgs
26640 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
26650 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69  *, ExprList*);.i
26660 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65  nt sqlite3Indexe
26670 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20  dByLookup(Parse 
26680 2a 2c 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  *, struct SrcLis
26690 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20  t_item *);.void 
266a0 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68  sqlite3SrcListSh
266b0 69 66 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c  iftJoinType(SrcL
266c0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
266d0 74 65 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e  te3SrcListAssign
266e0 43 75 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20  Cursors(Parse*, 
266f0 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20  SrcList*);.void 
26700 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c  sqlite3IdListDel
26710 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64  ete(sqlite3*, Id
26720 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
26730 69 74 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74  ite3SrcListDelet
26740 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  e(sqlite3*, SrcL
26750 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  ist*);.Index *sq
26760 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64  lite3AllocateInd
26770 65 78 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33  exObject(sqlite3
26780 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a  *,i16,int,char**
26790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
267a0 72 65 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  reateIndex(Parse
267b0 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
267c0 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73  SrcList*,ExprLis
267d0 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20  t*,int,Token*,. 
267e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267f0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20           Expr*, 
26800 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
26810 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49  oid sqlite3DropI
26820 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63  ndex(Parse*, Src
26830 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
26840 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50   sqlite3Select(P
26850 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
26860 53 65 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65  SelectDest*);.Se
26870 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c  lect *sqlite3Sel
26880 65 63 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78  ectNew(Parse*,Ex
26890 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a  prList*,SrcList*
268a0 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
268b0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
268c0 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a             Expr*
268d0 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45  ,ExprList*,u32,E
268e0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69  xpr*,Expr*);.voi
268f0 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
26900 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
26910 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20  Select*);.Table 
26920 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c  *sqlite3SrcListL
26930 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72  ookup(Parse*, Sr
26940 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  cList*);.int sql
26950 69 74 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50  ite3IsReadOnly(P
26960 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
26970 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26980 33 4f 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65  3OpenTable(Parse
26990 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74  *, int iCur, int
269a0 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e   iDb, Table*, in
269b0 74 29 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28  t);.#if defined(
269c0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50  SQLITE_ENABLE_UP
269d0 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49  DATE_DELETE_LIMI
269e0 54 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  T) && !defined(S
269f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55  QLITE_OMIT_SUBQU
26a00 45 52 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74  ERY).Expr *sqlit
26a10 65 33 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72  e3LimitWhere(Par
26a20 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70  se*,SrcList*,Exp
26a30 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70  r*,ExprList*,Exp
26a40 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b  r*,Expr*,char*);
26a50 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
26a60 69 74 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50  ite3DeleteFrom(P
26a70 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
26a80 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
26a90 6c 69 74 65 33 55 70 64 61 74 65 28 50 61 72 73  lite3Update(Pars
26aa0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
26ab0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
26ac0 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20  int);.WhereInfo 
26ad0 2a 73 71 6c 69 74 65 33 57 68 65 72 65 42 65 67  *sqlite3WhereBeg
26ae0 69 6e 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73  in(Parse*,SrcLis
26af0 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73  t*,Expr*,ExprLis
26b00 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36  t*,ExprList*,u16
26b10 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
26b20 74 65 33 57 68 65 72 65 45 6e 64 28 57 68 65 72  te3WhereEnd(Wher
26b30 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20  eInfo*);.LogEst 
26b40 73 71 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70  sqlite3WhereOutp
26b50 75 74 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65  utRowCount(Where
26b60 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
26b70 74 65 33 57 68 65 72 65 49 73 44 69 73 74 69 6e  te3WhereIsDistin
26b80 63 74 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ct(WhereInfo*);.
26b90 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
26ba0 49 73 4f 72 64 65 72 65 64 28 57 68 65 72 65 49  IsOrdered(WhereI
26bb0 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nfo*);.int sqlit
26bc0 65 33 57 68 65 72 65 4f 72 64 65 72 65 64 49 6e  e3WhereOrderedIn
26bd0 6e 65 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66  nerLoop(WhereInf
26be0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
26bf0 57 68 65 72 65 49 73 53 6f 72 74 65 64 28 57 68  WhereIsSorted(Wh
26c00 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
26c10 71 6c 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69  qlite3WhereConti
26c20 6e 75 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e  nueLabel(WhereIn
26c30 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
26c40 33 57 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c  3WhereBreakLabel
26c50 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
26c60 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b  t sqlite3WhereOk
26c70 4f 6e 65 50 61 73 73 28 57 68 65 72 65 49 6e 66  OnePass(WhereInf
26c80 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69  o*, int*);.#defi
26c90 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20  ne ONEPASS_OFF  
26ca0 20 20 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20      0        /* 
26cb0 55 73 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e  Use of ONEPASS n
26cc0 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64  ot allowed */.#d
26cd0 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49  efine ONEPASS_SI
26ce0 4e 47 4c 45 20 20 20 31 20 20 20 20 20 20 20 20  NGLE   1        
26cf0 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64  /* ONEPASS valid
26d00 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f   for a single ro
26d10 77 20 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66  w update */.#def
26d20 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54  ine ONEPASS_MULT
26d30 49 20 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a  I    2        /*
26d40 20 4f 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69   ONEPASS is vali
26d50 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72  d for multiple r
26d60 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ows */.void sqli
26d70 74 65 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49  te3ExprCodeLoadI
26d80 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65  ndexColumn(Parse
26d90 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
26da0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
26db0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
26dc0 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  tColumn(Parse*, 
26dd0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
26de0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
26df0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
26e00 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50  GetColumnToReg(P
26e10 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
26e20 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
26e30 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
26e40 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
26e50 62 6c 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65  ble(Vdbe*, Table
26e60 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
26e70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26e80 78 70 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73  xprCodeMove(Pars
26e90 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
26ea0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26eb0 45 78 70 72 43 61 63 68 65 53 74 6f 72 65 28 50  ExprCacheStore(P
26ec0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
26ed0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26ee0 74 65 33 45 78 70 72 43 61 63 68 65 50 75 73 68  te3ExprCachePush
26ef0 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
26f00 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
26f10 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  op(Parse*);.void
26f20 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
26f30 65 52 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20  eRemove(Parse*, 
26f40 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26f50 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65  sqlite3ExprCache
26f60 43 6c 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76  Clear(Parse*);.v
26f70 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
26f80 61 63 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e  acheAffinityChan
26f90 67 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20  ge(Parse*, int, 
26fa0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26fb0 65 33 45 78 70 72 43 6f 64 65 28 50 61 72 73 65  e3ExprCode(Parse
26fc0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
26fd0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26fe0 43 6f 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c  CodeCopy(Parse*,
26ff0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
27000 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
27010 64 65 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72  deFactorable(Par
27020 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29  se*, Expr*, int)
27030 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27040 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50 61 72  prCodeAtInit(Par
27050 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
27060 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
27070 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
27080 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
27090 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
270a0 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
270b0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
270c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
270d0 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28  xprCodeAndCache(
270e0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
270f0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27100 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
27110 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
27120 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  t*, int, int, u8
27130 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
27140 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20  E_ECEL_DUP      
27150 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e  0x01  /* Deep, n
27160 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65  ot shallow copie
27170 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
27180 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20  ITE_ECEL_FACTOR 
27190 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f    0x02  /* Facto
271a0 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74  r out constant t
271b0 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
271c0 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20  SQLITE_ECEL_REF 
271d0 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73       0x04  /* Us
271e0 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  e ExprList.u.x.i
271f0 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 76 6f  OrderByCol */.vo
27200 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49 66  id sqlite3ExprIf
27210 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45 78 70  True(Parse*, Exp
27220 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
27230 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 49  oid sqlite3ExprI
27240 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c 20 45  fFalse(Parse*, E
27250 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
27260 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27270 72 49 66 46 61 6c 73 65 44 75 70 28 50 61 72 73  rIfFalseDup(Pars
27280 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
27290 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c  int);.Table *sql
272a0 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 73 71  ite3FindTable(sq
272b0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
272c0 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
272d0 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45  ;.#define LOCATE
272e0 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a 23 64  _VIEW    0x01.#d
272f0 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e 4f 45  efine LOCATE_NOE
27300 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c 65 20  RR   0x02.Table 
27310 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
27320 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32 20 66  ble(Parse*,u32 f
27330 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61 72 2a  lags,const char*
27340 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
27350 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f  Table *sqlite3Lo
27360 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28 50 61  cateTableItem(Pa
27370 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 73  rse*,u32 flags,s
27380 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74  truct SrcList_it
27390 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71  em *);.Index *sq
273a0 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78 28 73  lite3FindIndex(s
273b0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
273c0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
273d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
273e0 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 61  nlinkAndDeleteTa
273f0 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ble(sqlite3*,int
27400 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
27410 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e  oid sqlite3Unlin
27420 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65 78 28  kAndDeleteIndex(
27430 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e  sqlite3*,int,con
27440 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
27450 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28 50 61  sqlite3Vacuum(Pa
27460 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  rse*,Token*);.in
27470 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75  t sqlite3RunVacu
27480 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74  um(char**, sqlit
27490 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  e3*, int);.char 
274a0 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d  *sqlite3NameFrom
274b0 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a 2c 20  Token(sqlite3*, 
274c0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
274d0 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72 65 28  ite3ExprCompare(
274e0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
274f0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
27500 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
27510 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
27520 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
27530 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
27540 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45 78 70  sExpr(Expr*, Exp
27550 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  r*, int);.void s
27560 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a  qlite3ExprAnalyz
27570 65 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65  eAggregates(Name
27580 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29  Context*, Expr*)
27590 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
275a0 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74  prAnalyzeAggList
275b0 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78  (NameContext*,Ex
275c0 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
275d0 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64  lite3ExprCovered
275e0 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69  ByIndex(Expr*, i
275f0 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a  nt iCur, Index *
27600 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pIdx);.int sqlit
27610 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68  e3FunctionUsesTh
27620 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63  isSrc(Expr*, Src
27630 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71  List*);.Vdbe *sq
27640 6c 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72  lite3GetVdbe(Par
27650 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  se*);.#ifndef SQ
27660 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
27670 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69  N_TEST.void sqli
27680 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
27690 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
276a0 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
276b0 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64  tate(void);.#end
276c0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
276d0 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
276e0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
276f0 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
27700 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
27710 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27720 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
27730 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
27740 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
27750 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
27760 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
27770 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
27780 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72   sqlite3CommitTr
27790 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
277a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
277b0 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69  ollbackTransacti
277c0 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
277d0 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
277e0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
277f0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
27800 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
27810 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  nts(sqlite3 *);.
27820 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76  void sqlite3Leav
27830 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f  eMutexAndCloseZo
27840 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a  mbie(sqlite3*);.
27850 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
27860 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
27870 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
27880 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f  rIsConstantNotJo
27890 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  in(Expr*);.int s
278a0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
278b0 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45  tantOrFunction(E
278c0 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  xpr*, u8);.int s
278d0 71 6c 69 74 65 33 45 78 70 72 49 73 54 61 62 6c  qlite3ExprIsTabl
278e0 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c  eConstant(Expr*,
278f0 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  int);.#ifdef SQL
27900 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f  ITE_ENABLE_CURSO
27910 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69  R_HINTS.int sqli
27920 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53  te3ExprContainsS
27930 75 62 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a  ubquery(Expr*);.
27940 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74  #endif.int sqlit
27950 65 33 45 78 70 72 49 73 49 6e 74 65 67 65 72 28  e3ExprIsInteger(
27960 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  Expr*, int*);.in
27970 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e  t sqlite3ExprCan
27980 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70  BeNull(const Exp
27990 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
279a0 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e  ExprNeedsNoAffin
279b0 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20  ityChange(const 
279c0 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e  Expr*, char);.in
279d0 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64  t sqlite3IsRowid
279e0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  (const char*);.v
279f0 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72  oid sqlite3Gener
27a00 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20  ateRowDelete(.  
27a10 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c    Parse*,Table*,
27a20 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74  Trigger*,int,int
27a30 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75  ,int,i16,u8,u8,u
27a40 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  8,int);.void sql
27a50 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49  ite3GenerateRowI
27a60 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72 73 65  ndexDelete(Parse
27a70 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
27a80 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
27a90 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65  .int sqlite3Gene
27aa0 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72  rateIndexKey(Par
27ab0 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74  se*, Index*, int
27ac0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
27ad0 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f  ,Index*,int);.vo
27ae0 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
27af0 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61  ePartIdxLabel(Pa
27b00 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
27b10 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43  sqlite3GenerateC
27b20 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28  onstraintChecks(
27b30 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
27b40 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  t*,int,int,int,i
27b50 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  nt,.            
27b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b70 20 20 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69           u8,u8,i
27b80 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 76  nt,int*,int*);.v
27b90 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
27ba0 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
27bb0 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
27bc0 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
27bd0 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
27be0 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
27bf0 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
27c00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38   Table*, int, u8
27c10 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
27c20 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
27c30 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
27c40 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
27c50 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
27c60 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
27c70 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
27c80 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
27c90 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
27ca0 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
27cb0 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
27cc0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
27cd0 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
27ce0 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
27cf0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
27d00 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
27d10 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
27d20 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
27d30 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
27d40 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
27d50 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
27d60 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
27d70 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
27d80 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
27d90 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
27da0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
27db0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
27dc0 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
27dd0 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
27de0 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
27df0 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
27e00 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
27e10 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
27e20 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ect*,int);.#if S
27e30 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
27e40 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ED.void sqlite3S
27e50 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c  electSetName(Sel
27e60 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ect*,const char*
27e70 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
27e80 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  e sqlite3SelectS
27e90 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64  etName(A,B).#end
27ea0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
27eb0 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63  nsertBuiltinFunc
27ec0 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b  s(FuncDef*,int);
27ed0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
27ee0 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
27ef0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
27f00 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  r*,int,u8,u8);.v
27f10 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
27f20 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
27f30 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
27f40 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
27f50 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
27f60 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
27f70 69 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43  ite3RegisterPerC
27f80 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e  onnectionBuiltin
27f90 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
27fa0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
27fb0 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
27fc0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
27fd0 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
27fe0 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
27ff0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
28000 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
28010 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
28020 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
28030 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
28040 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
28050 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
28060 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
28070 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
28080 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
28090 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
280a0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
280b0 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
280c0 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
280d0 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
280e0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
280f0 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
28100 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
28110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
28120 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
28130 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
28140 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
28150 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
28160 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
28170 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
28180 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
28190 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
281a0 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
281b0 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
281c0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
281d0 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
281e0 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
281f0 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
28200 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
28210 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
28220 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
28230 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
28240 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
28250 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
28260 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
28270 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
28280 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
28290 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
282a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
282b0 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
282c0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
282d0 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
282e0 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
282f0 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
28300 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
28310 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
28320 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
28330 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
28340 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
28350 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
28360 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
28370 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
28380 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
28390 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
283a0 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
283b0 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
283c0 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69  ,Select*);.  Tri
283d0 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
283e0 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
283f0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
28400 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
28410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28430 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29       Select*,u8)
28440 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
28450 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
28460 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
28470 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
28480 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
28490 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
284a0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
284b0 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
284c0 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
284d0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
284e0 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
284f0 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
28500 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28510 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
28520 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
28530 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
28540 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
28550 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
28560 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
28570 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
28580 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
28590 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
285a0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
285b0 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
285c0 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
285d0 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20  : (p)).# define 
285e0 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
285f0 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
28600 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  evel==0).#else.#
28610 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
28620 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
28630 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
28640 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
28650 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
28660 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
28670 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
28680 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
28690 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
286a0 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
286b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
286c0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
286d0 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
286e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
286f0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
28700 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
28710 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
28720 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
28730 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
28740 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
28750 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
28760 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
28770 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69  evel(p) 1.# defi
28780 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
28790 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
287a0 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
287b0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
287c0 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
287d0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
287e0 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
287f0 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
28800 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
28810 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
28820 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
28830 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
28840 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
28850 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
28860 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
28870 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
28880 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
28890 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
288a0 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
288b0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
288c0 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
288d0 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
288e0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
288f0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
28900 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
28910 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
28920 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
28930 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
28940 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
28950 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
28960 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
28970 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
28980 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
28990 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
289a0 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
289b0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
289c0 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
289d0 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
289e0 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
289f0 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
28a00 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
28a10 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
28a20 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
28a30 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28a40 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
28a50 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
28a60 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
28a70 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
28a80 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
28a90 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
28aa0 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
28ab0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
28ac0 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
28ad0 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
28ae0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
28af0 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
28b00 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
28b10 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
28b20 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
28b30 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
28b40 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
28b50 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
28b60 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
28b70 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
28b80 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
28b90 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
28ba0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
28bb0 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
28bc0 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
28bd0 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
28be0 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
28bf0 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
28c00 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
28c10 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
28c20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
28c30 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
28c40 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
28c50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
28c60 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74  f16ByteLen(const
28c70 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
28c80 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71  t nChar);.int sq
28c90 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
28ca0 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
28cb0 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
28cc0 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
28cd0 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
28ce0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
28cf0 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45  ogEst(u64);.LogE
28d00 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
28d10 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73  Add(LogEst,LogEs
28d20 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
28d30 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
28d40 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ABLE.LogEst sqli
28d50 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75  te3LogEstFromDou
28d60 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e  ble(double);.#en
28d70 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
28d80 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
28d90 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c  MT_SCANSTATUS) |
28da0 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
28db0 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
28dc0 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c  AT3_OR_STAT4) ||
28dd0 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
28de0 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53  QLITE_EXPLAIN_ES
28df0 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36  TIMATED_ROWS).u6
28e00 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  4 sqlite3LogEstT
28e10 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65  oInt(LogEst);.#e
28e20 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74  ndif../*.** Rout
28e30 69 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64  ines to read and
28e40 20 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d   write variable-
28e50 6c 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e  length integers.
28e60 20 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a    These used to.
28e70 2a 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f  ** be defined lo
28e80 63 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77  cally, but now w
28e90 65 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74  e use the varint
28ea0 20 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65   routines in the
28eb0 20 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e   util.c.** file.
28ec0 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50  .*/.int sqlite3P
28ed0 75 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65  utVarint(unsigne
28ee0 64 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75  d char*, u64);.u
28ef0 38 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69  8 sqlite3GetVari
28f00 6e 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  nt(const unsigne
28f10 64 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29  d char *, u64 *)
28f20 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56  ;.u8 sqlite3GetV
28f30 61 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e  arint32(const un
28f40 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75  signed char *, u
28f50 33 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  32 *);.int sqlit
28f60 65 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20  e3VarintLen(u64 
28f70 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  v);../*.** The c
28f80 6f 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f  ommon case is fo
28f90 72 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65  r a varint to be
28fa0 20 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20   a single byte. 
28fb0 20 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a   They following.
28fc0 2a 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65  ** macros handle
28fd0 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   the common case
28fe0 20 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65   without a proce
28ff0 64 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74  dure call, but t
29000 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  hen call.** the 
29010 70 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61  procedure for la
29020 72 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f  rger varints..*/
29030 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69  .#define getVari
29040 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
29050 75 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78  u8)((*(A)<(u8)0x
29060 38 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28  80)?((B)=(u32)*(
29070 41 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74  A)),1:sqlite3Get
29080 56 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33  Varint32((A),(u3
29090 32 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69  2 *)&(B))).#defi
290a0 6e 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41  ne putVarint32(A
290b0 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28  ,B)  \.  (u8)(((
290c0 75 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38  u32)(B)<(u32)0x8
290d0 30 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e  0)?(*(A)=(unsign
290e0 65 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c  ed char)(B)),1:\
290f0 0a 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  .  sqlite3PutVar
29100 69 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64  int((A),(B))).#d
29110 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20  efine getVarint 
29120 20 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72     sqlite3GetVar
29130 69 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56  int.#define putV
29140 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
29150 50 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73  PutVarint...cons
29160 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49  t char *sqlite3I
29170 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28  ndexAffinityStr(
29180 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
29190 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54  );.void sqlite3T
291a0 61 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62  ableAffinity(Vdb
291b0 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
291c0 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f  ;.char sqlite3Co
291d0 6d 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78  mpareAffinity(Ex
291e0 70 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20  pr *pExpr, char 
291f0 61 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74  aff2);.int sqlit
29200 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f  e3IndexAffinityO
29210 6b 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  k(Expr *pExpr, c
29220 68 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79  har idx_affinity
29230 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54  );.char sqlite3T
29240 61 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  ableColumnAffini
29250 74 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a  ty(Table*,int);.
29260 63 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72  char sqlite3Expr
29270 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
29280 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
29290 65 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63  e3Atoi64(const c
292a0 68 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c  har*, i64*, int,
292b0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
292c0 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63  3DecOrHexToI64(c
292d0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
292e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
292f0 72 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69  rrorWithMsg(sqli
29300 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
29310 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69   char*,...);.voi
29320 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73  d sqlite3Error(s
29330 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f  qlite3*,int);.vo
29340 69 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d  id sqlite3System
29350 45 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69  Error(sqlite3*,i
29360 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  nt);.void *sqlit
29370 65 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69  e3HexToBlob(sqli
29380 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
29390 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20   *z, int n);.u8 
293a0 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28  sqlite3HexToInt(
293b0 69 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69  int h);.int sqli
293c0 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50  te3TwoPartName(P
293d0 61 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c  arse *, Token *,
293e0 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20   Token *, Token 
293f0 2a 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65  **);..#if define
29400 64 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52  d(SQLITE_NEED_ER
29410 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68  R_NAME).const ch
29420 61 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61  ar *sqlite3ErrNa
29430 6d 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  me(int);.#endif.
29440 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c  .const char *sql
29450 69 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b  ite3ErrStr(int);
29460 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64  .int sqlite3Read
29470 53 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50  Schema(Parse *pP
29480 61 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  arse);.CollSeq *
29490 73 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53  sqlite3FindCollS
294a0 65 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65  eq(sqlite3*,u8 e
294b0 6e 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nc, const char*,
294c0 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  int);.CollSeq *s
294d0 71 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c  qlite3LocateColl
294e0 53 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73  Seq(Parse *pPars
294f0 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e  e, const char*zN
29500 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  ame);.CollSeq *s
29510 71 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65  qlite3ExprCollSe
29520 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  q(Parse *pParse,
29530 20 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45   Expr *pExpr);.E
29540 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
29550 41 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28  AddCollateToken(
29560 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
29570 78 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  xpr*, const Toke
29580 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  n*, int);.Expr *
29590 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
295a0 6c 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73  llateString(Pars
295b0 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63  e*,Expr*,const c
295c0 68 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  har*);.Expr *sql
295d0 69 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c  ite3ExprSkipColl
295e0 61 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20  ate(Expr*);.int 
295f0 73 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c  sqlite3CheckColl
29600 53 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c  Seq(Parse *, Col
29610 6c 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  lSeq *);.int sql
29620 69 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e  ite3CheckObjectN
29630 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e  ame(Parse *, con
29640 73 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64  st char *);.void
29650 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
29660 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a  hanges(sqlite3 *
29670 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
29680 74 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a  te3AddInt64(i64*
29690 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ,i64);.int sqlit
296a0 65 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c  e3SubInt64(i64*,
296b0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
296c0 33 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69  3MulInt64(i64*,i
296d0 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
296e0 41 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23  AbsInt32(int);.#
296f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
29700 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f  BLE_8_3_NAMES.vo
29710 69 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75  id sqlite3FileSu
29720 66 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72  ffix3(const char
29730 2a 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65  *, char*);.#else
29740 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29750 33 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59  3FileSuffix3(X,Y
29760 29 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69  ).#endif.u8 sqli
29770 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f  te3GetBoolean(co
29780 6e 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b  nst char *z,u8);
29790 0a 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71  ..const void *sq
297a0 6c 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73  lite3ValueText(s
297b0 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75  qlite3_value*, u
297c0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  8);.int sqlite3V
297d0 61 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65  alueBytes(sqlite
297e0 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76  3_value*, u8);.v
297f0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
29800 53 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76  SetStr(sqlite3_v
29810 61 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  alue*, int, cons
29820 74 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20  t void *,u8,.   
29830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29840 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69       void(*)(voi
29850 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  d*));.void sqlit
29860 65 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73  e3ValueSetNull(s
29870 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a  qlite3_value*);.
29880 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
29890 65 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61  eFree(sqlite3_va
298a0 6c 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76  lue*);.sqlite3_v
298b0 61 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c  alue *sqlite3Val
298c0 75 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29  ueNew(sqlite3 *)
298d0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55  ;.char *sqlite3U
298e0 74 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20  tf16to8(sqlite3 
298f0 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  *, const void*, 
29900 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
29910 6c 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78  lite3ValueFromEx
29920 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78  pr(sqlite3 *, Ex
29930 70 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71  pr *, u8, u8, sq
29940 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b  lite3_value **);
29950 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
29960 75 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28  ueApplyAffinity(
29970 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c  sqlite3_value *,
29980 20 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65   u8, u8);.#ifnde
29990 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
299a0 41 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e  ATION.extern con
299b0 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
299c0 20 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72   sqlite3OpcodePr
299d0 6f 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e  operty[];.extern
299e0 20 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69   const char sqli
299f0 74 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a  te3StrBINARY[];.
29a00 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73  extern const uns
29a10 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74  igned char sqlit
29a20 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d  e3UpperToLower[]
29a30 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  ;.extern const u
29a40 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
29a50 69 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a  ite3CtypeMap[];.
29a60 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b  extern const Tok
29a70 65 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b  en sqlite3IntTok
29a80 65 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51  ens[];.extern SQ
29a90 4c 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20  LITE_WSD struct 
29aa0 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71  Sqlite3Config sq
29ab0 6c 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74  lite3Config;.ext
29ac0 65 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20  ern FuncDefHash 
29ad0 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75  sqlite3BuiltinFu
29ae0 6e 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66  nctions;.#ifndef
29af0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
29b00 0a 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69  .extern int sqli
29b10 74 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a  te3PendingByte;.
29b20 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f  #endif.#endif.vo
29b30 69 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61  id sqlite3RootPa
29b40 67 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a  geMoved(sqlite3*
29b50 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
29b60 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
29b70 69 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f  index(Parse*, To
29b80 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  ken*, Token*);.v
29b90 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72  oid sqlite3Alter
29ba0 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
29bb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
29bc0 65 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61  erRenameTable(Pa
29bd0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
29be0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
29bf0 69 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e  ite3GetToken(con
29c00 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
29c10 20 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64   *, int *);.void
29c20 20 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61   sqlite3NestedPa
29c30 72 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73  rse(Parse*, cons
29c40 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76  t char*, ...);.v
29c50 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72  oid sqlite3Expir
29c60 65 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65  ePreparedStateme
29c70 6e 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  nts(sqlite3*);.i
29c80 6e 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75  nt sqlite3CodeSu
29c90 62 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20  bselect(Parse*, 
29ca0 45 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  Expr *, int, int
29cb0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
29cc0 65 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a  electPrep(Parse*
29cd0 2c 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43  , Select*, NameC
29ce0 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73  ontext*);.void s
29cf0 71 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e  qlite3SelectWron
29d00 67 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50  gNumTermsError(P
29d10 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65  arse *pParse, Se
29d20 6c 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71  lect *p);.int sq
29d30 6c 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61  lite3MatchSpanNa
29d40 6d 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  me(const char*, 
29d50 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
29d60 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
29d70 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
29d80 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61  te3ResolveExprNa
29d90 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  mes(NameContext*
29da0 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
29db0 6c 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72  lite3ResolveExpr
29dc0 4c 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ListNames(NameCo
29dd0 6e 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74  ntext*, ExprList
29de0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
29df0 52 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d  ResolveSelectNam
29e00 65 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  es(Parse*, Selec
29e10 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a  t*, NameContext*
29e20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29e30 65 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65  esolveSelfRefere
29e40 6e 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  nce(Parse*,Table
29e50 2a 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72  *,int,Expr*,Expr
29e60 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
29e70 74 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47  te3ResolveOrderG
29e80 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53  roupBy(Parse*, S
29e90 65 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74  elect*, ExprList
29ea0 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
29eb0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
29ec0 75 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20  umnDefault(Vdbe 
29ed0 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
29ee0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29ef0 74 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64  te3AlterFinishAd
29f00 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c  dColumn(Parse *,
29f10 20 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20   Token *);.void 
29f20 73 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69  sqlite3AlterBegi
29f30 6e 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65  nAddColumn(Parse
29f40 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a   *, SrcList *);.
29f50 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33  CollSeq *sqlite3
29f60 47 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65  GetCollSeq(Parse
29f70 2a 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a  *, u8, CollSeq *
29f80 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
29f90 63 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69  char sqlite3Affi
29fa0 6e 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63  nityType(const c
29fb0 68 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64  har*, u8*);.void
29fc0 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28   sqlite3Analyze(
29fd0 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20  Parse*, Token*, 
29fe0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
29ff0 69 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61  ite3InvokeBusyHa
2a000 6e 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65  ndler(BusyHandle
2a010 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2a020 46 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c  FindDb(sqlite3*,
2a030 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
2a040 6c 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28  lite3FindDbName(
2a050 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2a060 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2a070 6c 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61  lite3AnalysisLoa
2a080 64 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69  d(sqlite3*,int i
2a090 44 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  DB);.void sqlite
2a0a0 33 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70  3DeleteIndexSamp
2a0b0 6c 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64  les(sqlite3*,Ind
2a0c0 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
2a0d0 65 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28  e3DefaultRowEst(
2a0e0 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
2a0f0 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b  lite3RegisterLik
2a100 65 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74  eFunctions(sqlit
2a110 65 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  e3*, int);.int s
2a120 71 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63  qlite3IsLikeFunc
2a130 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78  tion(sqlite3*,Ex
2a140 70 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b  pr*,int*,char*);
2a150 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68  .void sqlite3Sch
2a160 65 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29  emaClear(void *)
2a170 3b 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65  ;.Schema *sqlite
2a180 33 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74  3SchemaGet(sqlit
2a190 65 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a  e3 *, Btree *);.
2a1a0 69 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d  int sqlite3Schem
2a1b0 61 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33  aToIndex(sqlite3
2a1c0 20 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b   *db, Schema *);
2a1d0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2a1e0 33 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71  3KeyInfoAlloc(sq
2a1f0 6c 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b  lite3*,int,int);
2a200 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79  .void sqlite3Key
2a210 49 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66  InfoUnref(KeyInf
2a220 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71  o*);.KeyInfo *sq
2a230 6c 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28  lite3KeyInfoRef(
2a240 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2a250 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2a260 66 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a  foOfIndex(Parse*
2a270 2c 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65  , Index*);.#ifde
2a280 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69  f SQLITE_DEBUG.i
2a290 6e 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  nt sqlite3KeyInf
2a2a0 6f 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79  oIsWriteable(Key
2a2b0 49 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69  Info*);.#endif.i
2a2c0 6e 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  nt sqlite3Create
2a2d0 46 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20  Func(sqlite3 *, 
2a2e0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
2a2f0 74 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a  t, int, void *,.
2a300 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74    void (*)(sqlit
2a310 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2a320 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a  sqlite3_value **
2a330 29 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71  ),.  void (*)(sq
2a340 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
2a350 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
2a360 20 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73   **), void (*)(s
2a370 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29  qlite3_context*)
2a380 2c 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74  ,.  FuncDestruct
2a390 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a  or *pDestructor.
2a3a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2a3b0 6f 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a  omFault(sqlite3*
2a3c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
2a3d0 6f 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a  omClear(sqlite3*
2a3e0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70  );.int sqlite3Ap
2a3f0 69 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64  iExit(sqlite3 *d
2a400 62 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  b, int);.int sql
2a410 69 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61  ite3OpenTempData
2a420 62 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a  base(Parse *);..
2a430 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2a440 63 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75  ccumInit(StrAccu
2a450 6d 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68  m*, sqlite3*, ch
2a460 61 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  ar*, int, int);.
2a470 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2a480 63 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63  ccumAppend(StrAc
2a490 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
2a4a0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2a4b0 74 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e  te3StrAccumAppen
2a4c0 64 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63  dAll(StrAccum*,c
2a4d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
2a4e0 64 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43  d sqlite3AppendC
2a4f0 68 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e  har(StrAccum*,in
2a500 74 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73  t,char);.char *s
2a510 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69  qlite3StrAccumFi
2a520 6e 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b  nish(StrAccum*);
2a530 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72  .void sqlite3Str
2a540 41 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63  AccumReset(StrAc
2a550 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2a560 74 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69  te3SelectDestIni
2a570 74 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e  t(SelectDest*,in
2a580 74 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71  t,int);.Expr *sq
2a590 6c 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d  lite3CreateColum
2a5a0 6e 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c  nExpr(sqlite3 *,
2a5b0 20 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c   SrcList *, int,
2a5c0 20 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c   int);..void sql
2a5d0 69 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72  ite3BackupRestar
2a5e0 74 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70  t(sqlite3_backup
2a5f0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2a600 33 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71  3BackupUpdate(sq
2a610 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20  lite3_backup *, 
2a620 50 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a  Pgno, const u8 *
2a630 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  );..#ifndef SQLI
2a640 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
2a650 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2a660 43 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20  CheckIN(Parse*, 
2a670 45 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20  Expr*);.#else.# 
2a680 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2a690 70 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53  prCheckIN(x,y) S
2a6a0 51 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a  QLITE_OK.#endif.
2a6b0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2a6c0 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
2a6d0 54 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65  TAT4.void sqlite
2a6e0 33 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e  3AnalyzeFunction
2a6f0 73 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c  s(void);.int sql
2a700 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65  ite3Stat4ProbeSe
2a710 74 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73  tValue(.    Pars
2a720 65 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b  e*,Index*,Unpack
2a730 65 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a  edRecord**,Expr*
2a740 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a  ,int,int,int*);.
2a750 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2a760 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61  ValueFromExpr(Pa
2a770 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c  rse*, Expr*, u8,
2a780 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a   sqlite3_value**
2a790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a7a0 74 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e  tat4ProbeFree(Un
2a7b0 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a  packedRecord*);.
2a7c0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34  int sqlite3Stat4
2a7d0 43 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c  Column(sqlite3*,
2a7e0 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2a7f0 74 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f  t, int, sqlite3_
2a800 76 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73  value**);.char s
2a810 71 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d  qlite3IndexColum
2a820 6e 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65  nAffinity(sqlite
2a830 33 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29  3*, Index*, int)
2a840 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2a850 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f  The interface to
2a860 20 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72   the LEMON-gener
2a870 61 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 76  ated parser.*/.v
2a880 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 72 73  oid *sqlite3Pars
2a890 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29  erAlloc(void*(*)
2a8a0 28 75 36 34 29 29 3b 0a 76 6f 69 64 20 73 71 6c  (u64));.void sql
2a8b0 69 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76  ite3ParserFree(v
2a8c0 6f 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f  oid*, void(*)(vo
2a8d0 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69  id*));.void sqli
2a8e0 74 65 33 50 61 72 73 65 72 28 76 6f 69 64 2a 2c  te3Parser(void*,
2a8f0 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72   int, Token, Par
2a900 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59 59 54  se*);.#ifdef YYT
2a910 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45 50 54  RACKMAXSTACKDEPT
2a920 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 50  H.  int sqlite3P
2a930 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b 28 76  arserStackPeak(v
2a940 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76  oid*);.#endif..v
2a950 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 4c  oid sqlite3AutoL
2a960 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28 73 71  oadExtensions(sq
2a970 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66  lite3*);.#ifndef
2a980 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41   SQLITE_OMIT_LOA
2a990 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f  D_EXTENSION.  vo
2a9a0 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45  id sqlite3CloseE
2a9b0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2a9c0 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  3*);.#else.# def
2a9d0 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f 73 65  ine sqlite3Close
2a9e0 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65  Extensions(X).#e
2a9f0 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
2aa00 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44  LITE_OMIT_SHARED
2aa10 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20 73 71  _CACHE.  void sq
2aa20 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50  lite3TableLock(P
2aa30 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  arse *, int, int
2aa40 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68 61 72  , u8, const char
2aa50 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65   *);.#else.  #de
2aa60 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61 62 6c  fine sqlite3Tabl
2aa70 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29  eLock(v,w,x,y,z)
2aa80 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2aa90 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20 69 6e  SQLITE_TEST.  in
2aaa0 74 20 73 71 6c 69 74 65 33 55 74 66 38 54 6f 38  t sqlite3Utf8To8
2aab0 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 29  (unsigned char*)
2aac0 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66  ;.#endif..#ifdef
2aad0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2aae0 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64 65 66  TUALTABLE.#  def
2aaf0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 43  ine sqlite3VtabC
2ab00 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66 69 6e  lear(Y).#  defin
2ab10 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e  e sqlite3VtabSyn
2ab20 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b  c(X,Y) SQLITE_OK
2ab30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2ab40 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58  e3VtabRollback(X
2ab50 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2ab60 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 58 29  te3VtabCommit(X)
2ab70 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2ab80 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29  e3VtabInSync(db)
2ab90 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c   0.#  define sql
2aba0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a  ite3VtabLock(X).
2abb0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2abc0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23  3VtabUnlock(X).#
2abd0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2abe0 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58  VtabUnlockList(X
2abf0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2ac00 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e 74  te3VtabSavepoint
2ac10 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49 54 45  (X, Y, Z) SQLITE
2ac20 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71  _OK.#  define sq
2ac30 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 58  lite3GetVTable(X
2ac40 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a 29 30  ,Y)  ((VTable*)0
2ac50 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69 64 20  ).#else.   void 
2ac60 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2ac70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
2ac80 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  ble*);.   void s
2ac90 71 6c 69 74 65 33 56 74 61 62 44 69 73 63 6f 6e  qlite3VtabDiscon
2aca0 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a 64 62  nect(sqlite3 *db
2acb0 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20  , Table *p);.   
2acc0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53  int sqlite3VtabS
2acd0 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  ync(sqlite3 *db,
2ace0 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20   Vdbe*);.   int 
2acf0 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c 62  sqlite3VtabRollb
2ad00 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ack(sqlite3 *db)
2ad10 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33  ;.   int sqlite3
2ad20 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74  VtabCommit(sqlit
2ad30 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64  e3 *db);.   void
2ad40 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b   sqlite3VtabLock
2ad50 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76  (VTable *);.   v
2ad60 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 55  oid sqlite3VtabU
2ad70 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b  nlock(VTable *);
2ad80 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  .   void sqlite3
2ad90 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73  VtabUnlockList(s
2ada0 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74  qlite3*);.   int
2adb0 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76 65   sqlite3VtabSave
2adc0 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c  point(sqlite3 *,
2add0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76   int, int);.   v
2ade0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 49  oid sqlite3VtabI
2adf0 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64 62 65  mportErrmsg(Vdbe
2ae00 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a  *, sqlite3_vtab*
2ae10 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a 73 71  );.   VTable *sq
2ae20 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65 28 73  lite3GetVTable(s
2ae30 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
2ae40 3b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ;.#  define sqli
2ae50 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64 62  te3VtabInSync(db
2ae60 29 20 28 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73  ) ((db)->nVTrans
2ae70 3e 30 20 26 26 20 28 64 62 29 2d 3e 61 56 54 72  >0 && (db)->aVTr
2ae80 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69  ans==0).#endif.i
2ae90 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  nt sqlite3VtabEp
2aea0 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74  onymousTableInit
2aeb0 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29  (Parse*,Module*)
2aec0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2aed0 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
2aee0 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d  Clear(sqlite3*,M
2aef0 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  odule*);.void sq
2af00 6c 69 74 65 33 56 74 61 62 4d 61 6b 65 57 72 69  lite3VtabMakeWri
2af10 74 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 61 62  table(Parse*,Tab
2af20 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2af30 65 33 56 74 61 62 42 65 67 69 6e 50 61 72 73 65  e3VtabBeginParse
2af40 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2af50 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c   Token*, Token*,
2af60 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2af70 74 65 33 56 74 61 62 46 69 6e 69 73 68 50 61 72  te3VtabFinishPar
2af80 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  se(Parse*, Token
2af90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2afa0 56 74 61 62 41 72 67 49 6e 69 74 28 50 61 72 73  VtabArgInit(Pars
2afb0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2afc0 33 56 74 61 62 41 72 67 45 78 74 65 6e 64 28 50  3VtabArgExtend(P
2afd0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
2afe0 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2aff0 61 6c 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65  allCreate(sqlite
2b000 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  3*, int, const c
2b010 68 61 72 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b  har *, char **);
2b020 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2b030 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73  CallConnect(Pars
2b040 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74  e*, Table*);.int
2b050 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2b060 44 65 73 74 72 6f 79 28 73 71 6c 69 74 65 33 2a  Destroy(sqlite3*
2b070 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
2b080 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
2b090 33 56 74 61 62 42 65 67 69 6e 28 73 71 6c 69 74  3VtabBegin(sqlit
2b0a0 65 33 20 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b  e3 *, VTable *);
2b0b0 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
2b0c0 33 56 74 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e  3VtabOverloadFun
2b0d0 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c  ction(sqlite3 *,
2b0e0 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41  FuncDef*, int nA
2b0f0 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  rg, Expr*);.void
2b100 20 73 71 6c 69 74 65 33 49 6e 76 61 6c 69 64 46   sqlite3InvalidF
2b110 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f  unction(sqlite3_
2b120 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c  context*,int,sql
2b130 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73  ite3_value**);.s
2b140 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
2b150 69 74 65 33 53 74 6d 74 43 75 72 72 65 6e 74 54  ite3StmtCurrentT
2b160 69 6d 65 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ime(sqlite3_cont
2b170 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ext*);.int sqlit
2b180 65 33 56 64 62 65 50 61 72 61 6d 65 74 65 72 49  e3VdbeParameterI
2b190 6e 64 65 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73  ndex(Vdbe*, cons
2b1a0 74 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69  t char*, int);.i
2b1b0 6e 74 20 73 71 6c 69 74 65 33 54 72 61 6e 73 66  nt sqlite3Transf
2b1c0 65 72 42 69 6e 64 69 6e 67 73 28 73 71 6c 69 74  erBindings(sqlit
2b1d0 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74  e3_stmt *, sqlit
2b1e0 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64  e3_stmt *);.void
2b1f0 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 52 65   sqlite3ParserRe
2b200 73 65 74 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74  set(Parse*);.int
2b210 20 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72   sqlite3Reprepar
2b220 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73  e(Vdbe*);.void s
2b230 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 68  qlite3ExprListCh
2b240 65 63 6b 4c 65 6e 67 74 68 28 50 61 72 73 65 2a  eckLength(Parse*
2b250 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  , ExprList*, con
2b260 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53  st char*);.CollS
2b270 65 71 20 2a 73 71 6c 69 74 65 33 42 69 6e 61 72  eq *sqlite3Binar
2b280 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28  yCompareCollSeq(
2b290 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c  Parse *, Expr *,
2b2a0 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71   Expr *);.int sq
2b2b0 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72  lite3TempInMemor
2b2c0 79 28 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a  y(const sqlite3*
2b2d0 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  );.const char *s
2b2e0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
2b2f0 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e  ename(int);.#ifn
2b300 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b310 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  WAL.  int sqlite
2b320 33 43 68 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69  3Checkpoint(sqli
2b330 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  te3*, int, int, 
2b340 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69  int*, int*);.  i
2b350 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 44 65 66  nt sqlite3WalDef
2b360 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73  aultHook(void*,s
2b370 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
2b380 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66  ar*,int);.#endif
2b390 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
2b3a0 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69 74 68 20  OMIT_CTE.  With 
2b3b0 2a 73 71 6c 69 74 65 33 57 69 74 68 41 64 64 28  *sqlite3WithAdd(
2b3c0 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b  Parse*,With*,Tok
2b3d0 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65  en*,ExprList*,Se
2b3e0 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73  lect*);.  void s
2b3f0 71 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65  qlite3WithDelete
2b400 28 73 71 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29  (sqlite3*,With*)
2b410 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2b420 57 69 74 68 50 75 73 68 28 50 61 72 73 65 2a 2c  WithPush(Parse*,
2b430 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c   With*, u8);.#el
2b440 73 65 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74  se.#define sqlit
2b450 65 33 57 69 74 68 50 75 73 68 28 78 2c 79 2c 7a  e3WithPush(x,y,z
2b460 29 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ).#define sqlite
2b470 33 57 69 74 68 44 65 6c 65 74 65 28 78 2c 79 29  3WithDelete(x,y)
2b480 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c  .#endif../* Decl
2b490 61 72 61 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e  arations for fun
2b4a0 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63  ctions in fkey.c
2b4b0 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73 65 20 61  . All of these a
2b4c0 72 65 20 72 65 70 6c 61 63 65 64 20 62 79 0a 2a  re replaced by.*
2b4d0 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69  * no-op macros i
2b4e0 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  f OMIT_FOREIGN_K
2b4f0 45 59 20 69 73 20 64 65 66 69 6e 65 64 2e 20 49  EY is defined. I
2b500 6e 20 74 68 69 73 20 63 61 73 65 20 6e 6f 20 66  n this case no f
2b510 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75  oreign.** key fu
2b520 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 20 61  nctionality is a
2b530 76 61 69 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49  vailable. If OMI
2b540 54 5f 54 52 49 47 47 45 52 20 69 73 20 64 65 66  T_TRIGGER is def
2b550 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54  ined but.** OMIT
2b560 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20  _FOREIGN_KEY is 
2b570 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f  not, only some o
2b580 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 73 20  f the functions 
2b590 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a  are no-oped. In.
2b5a0 2a 2a 20 74 68 69 73 20 63 61 73 65 20 66 6f 72  ** this case for
2b5b0 65 69 67 6e 20 6b 65 79 73 20 61 72 65 20 70 61  eign keys are pa
2b5c0 72 73 65 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68  rsed, but no oth
2b5d0 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79  er functionality
2b5e0 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20   is.** provided 
2b5f0 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20  (enforcement of 
2b600 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 72  FK constraints r
2b610 65 71 75 69 72 65 73 20 74 68 65 20 74 72 69 67  equires the trig
2b620 67 65 72 73 20 73 75 62 2d 73 79 73 74 65 6d 29  gers sub-system)
2b630 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
2b640 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
2b650 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
2b660 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2b670 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 76 6f  IT_TRIGGER).  vo
2b680 69 64 20 73 71 6c 69 74 65 33 46 6b 43 68 65 63  id sqlite3FkChec
2b690 6b 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  k(Parse*, Table*
2b6a0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2b6b0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
2b6c0 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
2b6d0 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  e(Parse*, SrcLis
2b6e0 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  t *, Table*);.  
2b6f0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 41 63  void sqlite3FkAc
2b700 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c 20 54 61  tions(Parse*, Ta
2b710 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ble*, ExprList*,
2b720 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29   int, int*, int)
2b730 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2b740 6b 52 65 71 75 69 72 65 64 28 50 61 72 73 65 2a  kRequired(Parse*
2b750 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20  , Table*, int*, 
2b760 69 6e 74 29 3b 0a 20 20 75 33 32 20 73 71 6c 69  int);.  u32 sqli
2b770 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72  te3FkOldmask(Par
2b780 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  se*, Table*);.  
2b790 46 4b 65 79 20 2a 73 71 6c 69 74 65 33 46 6b 52  FKey *sqlite3FkR
2b7a0 65 66 65 72 65 6e 63 65 73 28 54 61 62 6c 65 20  eferences(Table 
2b7b0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2b7c0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 41 63 74  ine sqlite3FkAct
2b7d0 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66  ions(a,b,c,d,e,f
2b7e0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2b7f0 74 65 33 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63  te3FkCheck(a,b,c
2b800 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e  ,d,e,f).  #defin
2b810 65 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  e sqlite3FkDropT
2b820 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20 20 23 64  able(a,b,c).  #d
2b830 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f  efine sqlite3FkO
2b840 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20 20 20 20  ldmask(a,b)     
2b850 20 20 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20      0.  #define 
2b860 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72 65  sqlite3FkRequire
2b870 64 28 61 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a  d(a,b,c,d)    0.
2b880 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
2b890 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2b8a0 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71  GN_KEY.  void sq
2b8b0 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71  lite3FkDelete(sq
2b8c0 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29  lite3 *, Table*)
2b8d0 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46  ;.  int sqlite3F
2b8e0 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72  kLocateIndex(Par
2b8f0 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a  se*,Table*,FKey*
2b900 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b  ,Index**,int**);
2b910 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2b920 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2b930 28 61 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20  (a,b).  #define 
2b940 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49  sqlite3FkLocateI
2b950 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a  ndex(a,b,c,d,e).
2b960 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41  #endif.../*.** A
2b970 76 61 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69  vailable fault i
2b980 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c  njectors.  Shoul
2b990 64 20 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65  d be numbered be
2b9a0 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a  ginning with 0..
2b9b0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
2b9c0 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
2b9d0 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65  MALLOC     0.#de
2b9e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c  fine SQLITE_FAUL
2b9f0 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20  TINJECTOR_COUNT 
2ba00 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68       1../*.** Th
2ba10 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74  e interface to t
2ba20 68 65 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74  he code in fault
2ba30 2e 63 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e  .c used for iden
2ba40 74 69 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22  tifying "benign"
2ba50 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  .** malloc failu
2ba60 72 65 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c  res. This is onl
2ba70 79 20 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c  y present if SQL
2ba80 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
2ba90 5f 54 45 53 54 0a 2a 2a 20 69 73 20 6e 6f 74 20  _TEST.** is not 
2baa0 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
2bab0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2bac0 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 76  BUILTIN_TEST.  v
2bad0 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2bae0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
2baf0 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
2bb00 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2bb10 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
2bb20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2bb30 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2bb40 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
2bb50 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
2bb60 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
2bb70 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
2bb80 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
2bb90 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2bba0 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
2bbb0 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
2bbc0 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
2bbd0 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
2bbe0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
2bbf0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
2bc00 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
2bc10 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
2bc20 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
2bc30 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2bc40 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
2bc50 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2bc60 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
2bc70 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2bc80 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
2bc90 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
2bca0 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
2bcb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2bcc0 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
2bcd0 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
2bce0 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
2bcf0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
2bd00 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
2bd10 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
2bd20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
2bd30 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2bd40 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
2bd50 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
2bd60 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
2bd70 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
2bd80 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
2bd90 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
2bda0 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
2bdb0 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2bdc0 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
2bdd0 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
2bde0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
2bdf0 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
2be00 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2be10 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
2be20 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
2be30 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
2be40 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
2be50 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74  nt*, int*);..int
2be60 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
2be70 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
2be80 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2be90 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
2bea0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2beb0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
2bec0 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
2bed0 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2bee0 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
2bef0 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74  RITE.  int sqlit
2bf00 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28  e3JournalCreate(
2bf10 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
2bf20 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
2bf30 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d  ite3JournalIsInM
2bf40 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69  emory(sqlite3_fi
2bf50 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c  le *p);.void sql
2bf60 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70  ite3MemJournalOp
2bf70 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  en(sqlite3_file 
2bf80 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2bf90 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e  3ExprSetHeightAn
2bfa0 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50  dFlags(Parse *pP
2bfb0 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a  arse, Expr *p);.
2bfc0 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
2bfd0 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
2bfe0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
2bff0 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
2c000 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
2c010 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
2c020 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
2c030 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2c040 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
2c050 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
2c060 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2c070 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
2c080 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
2c090 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
2c0a0 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
2c0b0 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
2c0c0 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
2c0d0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2c0e0 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
2c0f0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
2c100 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
2c110 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
2c120 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
2c130 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
2c140 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
2c150 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
2c160 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
2c170 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
2c180 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2c190 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2c1a0 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
2c1b0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2c1c0 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
2c1d0 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
2c1e0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2c1f0 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
2c200 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2c210 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
2c220 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
2c230 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
2c240 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2c250 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
2c260 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
2c270 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
2c280 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
2c290 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
2c2a0 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2c2b0 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
2c2c0 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
2c2d0 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
2c2e0 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23  g messages..*/.#
2c2f0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2c300 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
2c310 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
2c320 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
2c330 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
2c340 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
2c350 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
2c360 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
2c370 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
2c380 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
2c390 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
2c3a0 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
2c3b0 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
2c3c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
2c3d0 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
2c3e0 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
2c3f0 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
2c400 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
2c410 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
2c420 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
2c430 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
2c440 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
2c450 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
2c460 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
2c470 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
2c480 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
2c490 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
2c4a0 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
2c4b0 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
2c4c0 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
2c4d0 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2c4e0 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
2c4f0 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
2c500 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
2c510 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
2c520 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
2c530 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
2c540 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
2c550 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
2c560 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
2c570 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2c580 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
2c590 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
2c5a0 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2c5b0 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2c5c0 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2c5d0 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2c5e0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2c5f0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2c600 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
2c610 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
2c620 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
2c630 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2c640 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
2c650 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2c660 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
2c670 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
2c680 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
2c690 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2c6a0 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2c6b0 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2c6c0 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2c6d0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2c6e0 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
2c6f0 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
2c700 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
2c710 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
2c720 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
2c730 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
2c740 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
2c750 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
2c760 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
2c770 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
2c780 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
2c790 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
2c7a0 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
2c7b0 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
2c7c0 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
2c7d0 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
2c7e0 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
2c7f0 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
2c800 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
2c810 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
2c820 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
2c830 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
2c840 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
2c850 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
2c860 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
2c870 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2c880 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
2c890 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
2c8a0 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
2c8b0 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
2c8c0 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2c8d0 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
2c8e0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
2c8f0 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a  constraint..**.*
2c900 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
2c910 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
2c920 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
2c930 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
2c940 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
2c950 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
2c960 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
2c970 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
2c980 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2c990 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
2c9a0 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
2c9b0 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
2c9c0 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2c9d0 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2c9e0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2c9f0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2ca00 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
2ca10 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2ca20 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2ca30 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
2ca40 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
2ca50 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2ca60 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
2ca70 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
2ca80 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2ca90 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
2caa0 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
2cab0 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
2cac0 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
2cad0 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
2cae0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2caf0 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
2cb00 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
2cb10 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2cb20 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
2cb30 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
2cb40 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
2cb50 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
2cb60 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2cb70 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
2cb80 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
2cb90 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
2cba0 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
2cbb0 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
2cbc0 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
2cbd0 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
2cbe0 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
2cbf0 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
2cc00 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
2cc10 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
2cc20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
2cc30 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
2cc40 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
2cc50 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
2cc60 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2cc70 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
2cc80 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2cc90 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2cca0 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
2ccb0 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2ccc0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
2ccd0 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45  ExprVectorSize(E
2cce0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2ccf0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65   sqlite3ExprIsVe
2cd00 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72  ctor(Expr *pExpr
2cd10 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2cd20 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78  VectorFieldSubex
2cd30 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  pr(Expr*, int);.
2cd40 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2cd50 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28  rForVectorField(
2cd60 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74  Parse*,Expr*,int
2cd70 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  );..#endif /* SQ
2cd80 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a           LITEINT_H */.