/ Hex Artifact Content
Login

Artifact 80c485ad08b1091a6148637c1b9c334be6ab39cb0d28b839bab96e6783b9d006:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
11f0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
1200: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
1210: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
1220: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
1230: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
1240: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
1250: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 23 69  SION 0.#endif.#i
1260: 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56  f defined(_MSC_V
1270: 45 52 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ER) && !defined(
1280: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1290: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
12a0: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
12b0: 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73 65 0a 23  _MSC_VER.#else.#
12c0: 20 64 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52   define MSVC_VER
12d0: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
12e0: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
12f0: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
1300: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
1310: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
1320: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
1330: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1340: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
1350: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
1360: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
1370: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
1380: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
1390: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
13a0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
13b0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
13c0: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
13d0: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
13e0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
13f0: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
1400: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
1410: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
1420: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
1430: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
1440: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
1450: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
1460: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1470: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
1480: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
1490: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
14a0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
14b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c0: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
14d0: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
14e0: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
14f0: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
1500: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
1510: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
1520: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
1530: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
1540: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
1550: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
1560: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
1570: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
1580: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
1590: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
15a0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
15b0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
15c0: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
15d0: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
15e0: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
15f0: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
1600: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
1610: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
1620: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
1630: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
1640: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
1650: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
1660: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
1670: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
1680: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
1690: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
16a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
16b0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
16c0: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
16d0: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
16e0: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
16f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
1700: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
1710: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
1720: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
1730: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
1740: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
1750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
1760: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
1770: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
1780: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
1790: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
17a0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
17b0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
17c0: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
17d0: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
17e0: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
17f0: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
1800: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
1810: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
1820: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
1830: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1840: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
1850: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
1860: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
1870: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
1880: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
1890: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
18a0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
18b0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
18c0: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
18d0: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
18e0: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
18f0: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1900: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1910: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1920: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1930: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1940: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1950: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
1960: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
1970: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
1980: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
1990: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
19a0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
19b0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
19c0: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
19d0: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
19e0: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
19f0: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1a00: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1a10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1a20: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1a30: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1a40: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1a50: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
1a60: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
1a70: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
1a80: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
1a90: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
1aa0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
1ab0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1ac0: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1ad0: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1ae0: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1af0: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1b00: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1b10: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1b20: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1b30: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1b40: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1b50: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
1b60: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
1b70: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
1b80: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
1b90: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
1ba0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
1bb0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1bc0: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1bd0: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1be0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1bf0: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1c00: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1c10: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1c20: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1c30: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1c40: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1c50: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
1c60: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
1c70: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
1c80: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1c90: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
1ca0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
1cb0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1cc0: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1cd0: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1ce0: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1cf0: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1d00: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1d10: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1d20: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1d30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1d40: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1d50: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
1d60: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
1d70: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
1d80: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
1d90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
1da0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
1db0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1dc0: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1dd0: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1de0: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1df0: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1e00: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1e10: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1e20: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1e30: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1e40: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1e50: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
1e60: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
1e70: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
1e80: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
1e90: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
1ea0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
1eb0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1ec0: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1ed0: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1ee0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1ef0: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1f00: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1f10: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1f20: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1f30: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1f40: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1f50: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
1f60: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
1f70: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
1f80: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
1f90: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
1fa0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
1fb0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1fc0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1fd0: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1fe0: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1ff0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2000: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2010: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
2020: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
2030: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
2040: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
2050: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
2060: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
2070: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
2080: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
2090: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
20a0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
20b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
20c0: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
20d0: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
20e0: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
20f0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
2100: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
2110: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
2120: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
2130: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2140: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
2150: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
2160: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
2170: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
2180: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
2190: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
21a0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21c0: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
21d0: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
21e0: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
21f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2200: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2210: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
2220: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2230: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
2240: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
2250: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
2260: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
2270: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
2280: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
2290: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
22a0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
22b0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
22c0: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
22d0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
22e0: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
22f0: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
2300: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
2310: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
2320: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
2330: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
2340: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
2350: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
2360: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
2370: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that 
2380: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74  the compiler int
2390: 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69 72  rinsics we desir
23a0: 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68  e are enabled wh
23b0: 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20  en.** compiling 
23c0: 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69  with an appropri
23d0: 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d  ate version of M
23e0: 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65  SVC unless preve
23f0: 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53  nted by.** the S
2400: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e  QLITE_DISABLE_IN
2410: 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a  TRINSIC define..
2420: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2430: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
2440: 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20  NTRINSIC).#  if 
2450: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
2460: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
2470: 34 30 30 0a 23 20 20 20 20 69 66 20 21 64 65 66  400.#    if !def
2480: 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29  ined(_WIN32_WCE)
2490: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
24a0: 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20  <intrin.h>.#    
24b0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
24c0: 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68  ic(_byteswap_ush
24d0: 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61 67  ort).#      prag
24e0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24f0: 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20  teswap_ulong).# 
2500: 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72       pragma intr
2510: 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f  insic(_byteswap_
2520: 75 69 6e 74 36 34 29 0a 23 20 20 20 20 20 20 70  uint64).#      p
2530: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
2540: 5f 52 65 61 64 57 72 69 74 65 42 61 72 72 69 65  _ReadWriteBarrie
2550: 72 29 0a 23 20 20 20 20 65 6c 73 65 0a 23 20 20  r).#    else.#  
2560: 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 63 6d 6e      include <cmn
2570: 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 65  intrin.h>.#    e
2580: 6e 64 69 66 0a 23 20 20 65 6e 64 69 66 0a 23 65  ndif.#  endif.#e
2590: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
25a0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
25b0: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20  E macro must be 
25c0: 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c  defined as 0, 1,
25d0: 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e   or 2..** 0 mean
25e0: 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70 65  s mutexes are pe
25f0: 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c  rmanently disabl
2600: 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72  e and the librar
2610: 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68  y is never.** th
2620: 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61  readsafe.  1 mea
2630: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
2640: 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69  s serialized whi
2650: 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65 73  ch is the highes
2660: 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68  t.** level of th
2670: 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d  readsafety.  2 m
2680: 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79  eans the library
2690: 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65   is multithreade
26a0: 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20  d - multiple.** 
26b0: 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65 20  threads can use 
26c0: 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61  SQLite as long a
26d0: 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73  s no two threads
26e0: 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65 20   try to use the 
26f0: 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65  same.** database
2700: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74   connection at t
2710: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a  he same time..**
2720: 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f  .** Older versio
2730: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65  ns of SQLite use
2740: 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48  d an optional TH
2750: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a  READSAFE macro..
2760: 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74 68  ** We support th
2770: 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a  at for legacy..*
2780: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2790: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
27a0: 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 54  ).# if defined(T
27b0: 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20 64  HREADSAFE).#   d
27c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
27d0: 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53 41  EADSAFE THREADSA
27e0: 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  FE.# else.#   de
27f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45  fine SQLITE_THRE
2800: 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a  ADSAFE 1 /* IMP:
2810: 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a   R-07272-22309 *
2820: 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  /.# endif.#endif
2830: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66  ../*.** Powersaf
2840: 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f  e overwrite is o
2850: 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42  n by default.  B
2860: 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64  ut can be turned
2870: 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68   off using.** th
2880: 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52  e -DSQLITE_POWER
2890: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30  SAFE_OVERWRITE=0
28a0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70   command-line op
28b0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
28c0: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
28d0: 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65  E_OVERWRITE.# de
28e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45  fine SQLITE_POWE
28f0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20  RSAFE_OVERWRITE 
2900: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2910: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
2920: 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72  5715-37072 Memor
2930: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
2940: 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61 62  tistics are enab
2950: 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c  led by.** defaul
2960: 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20  t unless SQLite 
2970: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
2980: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2990: 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a  MEMSTATUS=0 in.*
29a0: 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d  * which case mem
29b0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
29c0: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64 69  tatistics are di
29d0: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
29e0: 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  t..*/.#if !defin
29f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
2a00: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
2a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
2a20: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
2a30: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2a40: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
2a50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2a60: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
2a70: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
2a80: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
2a90: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2aa0: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
2ab0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
2ac0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2ad0: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
2ae0: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
2af0: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
2b00: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2b10: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
2b20: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
2b30: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
2b40: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
2b50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2b60: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
2b70: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
2b80: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
2b90: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
2ba0: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
2bb0: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
2bc0: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
2bd0: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
2be0: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
2bf0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2c00: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
2c10: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
2c20: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
2c30: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
2c40: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
2c50: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
2c60: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
2c70: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
2c80: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
2c90: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
2ca0: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
2cb0: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
2cc0: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
2cd0: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
2ce0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
2cf0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
2d00: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
2d10: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
2d20: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
2d30: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2d40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2d50: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
2d60: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2d70: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2d80: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2d90: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2da0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2db0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2dc0: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2dd0: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2de0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2df0: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2e00: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2e10: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
2e20: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
2e30: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
2e40: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
2e50: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2e60: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
2e70: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2e80: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2e90: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2ea0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2eb0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ec0: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2ed0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2ee0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2ef0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2f00: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2f10: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
2f20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
2f30: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
2f40: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
2f50: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2f60: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
2f70: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2f80: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2f90: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2fa0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2fb0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2fc0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2fd0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2fe0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2ff0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3000: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
3010: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
3020: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
3030: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
3040: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
3050: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3060: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
3070: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
3080: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
3090: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
30a0: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
30b0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
30c0: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
30d0: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
30e0: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
30f0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
3100: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
3110: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
3120: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
3130: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
3140: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
3150: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
3160: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
3170: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
3180: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
3190: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
31a0: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
31b0: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
31c0: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
31d0: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
31e0: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
31f0: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
3200: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
3210: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
3220: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
3230: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
3240: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
3250: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
3260: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
3270: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
3280: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
3290: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
32a0: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
32b0: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
32c0: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
32d0: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
32e0: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
32f0: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
3300: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
3310: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
3320: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
3330: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
3340: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
3350: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
3360: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
3370: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3380: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e 44  BUG).# define ND
3390: 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69  EBUG 1.#endif.#i
33a0: 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  f defined(NDEBUG
33b0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
33c0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64  ITE_DEBUG).# und
33d0: 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66  ef NDEBUG.#endif
33e0: 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53  ../*.** Enable S
33f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
3400: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66  LAIN_COMMENTS if
3410: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
3420: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
3430: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
3440: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
3450: 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64  N_COMMENTS) && d
3460: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3470: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51  BUG).# define SQ
3480: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
3490: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23  AIN_COMMENTS 1.#
34a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
34b0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
34c0: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64  o is used to aid
34d0: 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73   in coverage tes
34e0: 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64  ting.  When.** d
34f0: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
3500: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
3510: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
3520: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
3530: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
3540: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
3550: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
3560: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
3570: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
3580: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
3590: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
35a0: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
35b0: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
35c0: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
35d0: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
35e0: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
35f0: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
3600: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
3610: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
3620: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
3630: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
3640: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
3650: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
3660: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
3670: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
3680: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
3690: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
36a0: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
36b0: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
36c0: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
36d0: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
36e0: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
36f0: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
3700: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
3710: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
3720: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
3730: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
3740: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
3750: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
3760: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
3770: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
3780: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
3790: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
37a0: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
37b0: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
37c0: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
37d0: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
37e0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
37f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3800: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
3810: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
3820: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
3830: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
3840: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
3850: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
3860: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
3870: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
3880: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
3890: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
38a0: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
38b0: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
38c0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
38d0: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
38e0: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
38f0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
3900: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
3910: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
3920: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
3930: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
3940: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
3950: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
3960: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
3970: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
3980: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
3990: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
39a0: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
39b0: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
39c0: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
39d0: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
39e0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
39f0: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
3a00: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
3a10: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
3a20: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
3a30: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
3a40: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
3a50: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
3a60: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
3a70: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
3a80: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
3a90: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
3aa0: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
3ab0: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
3ac0: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
3ad0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
3ae0: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
3af0: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
3b00: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
3b10: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3b20: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
3b30: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
3b40: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
3b50: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a  essions which.**
3b60: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f   are intended to
3b70: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
3b80: 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63  or false, respec
3b90: 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a  tively.  Such.**
3ba0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75   expressions cou
3bb0: 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72  ld be omitted fr
3bc0: 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70  om the code comp
3bd0: 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65  letely.  But the
3be0: 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65  y.** are include
3bf0: 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73  d in a few cases
3c00: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68   in order to enh
3c10: 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65  ance the resilie
3c20: 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65  nce.** of SQLite
3c30: 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62   to unexpected b
3c40: 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b  ehavior - to mak
3c50: 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66  e the code "self
3c60: 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20  -healing".** or 
3c70: 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72  "ductile" rather
3c80: 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69   than being "bri
3c90: 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69  ttle" and crashi
3ca0: 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a  ng at the first.
3cb0: 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61  ** hint of unpla
3cc0: 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a  nned behavior..*
3cd0: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
3ce0: 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20  rds, ALWAYS and 
3cf0: 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20  NEVER are added 
3d00: 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f  for defensive co
3d10: 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64  de..**.** When d
3d20: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
3d30: 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64  sting ALWAYS and
3d40: 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d   NEVER are hard-
3d50: 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74  coded to.** be t
3d60: 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f  rue and false so
3d70: 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63   that the unreac
3d80: 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20  hable code they 
3d90: 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20  specify will.** 
3da0: 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61  not be counted a
3db0: 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e  s untested code.
3dc0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3dd0: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3de0: 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64  TEST) || defined
3df0: 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e  (SQLITE_MUTATION
3e00: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3e10: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3e20: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3e30: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3e40: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3e50: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3e60: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
3e70: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
3e80: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
3e90: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
3ea0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3ec0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3ed0: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3ee0: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3ef0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
3f00: 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  me malloc failur
3f10: 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73  es are only poss
3f20: 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54  ible if SQLITE_T
3f30: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3f40: 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64  SS is.** defined
3f50: 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  .  We need to de
3f60: 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f  fend against tho
3f70: 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e  se failures when
3f80: 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a   testing with.**
3f90: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
3fa0: 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74  LLOC_STRESS, but
3fb0: 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74   we don't want t
3fc0: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62  he unreachable b
3fd0: 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e  ranches.** durin
3fe0: 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64  g a normal build
3ff0: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
4000: 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73   macro can be us
4010: 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65  ed to disable te
4020: 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  sts.** that are 
4030: 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78 63  always false exc
4040: 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f  ept when SQLITE_
4050: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4060: 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23  ESS is set..*/.#
4070: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4080: 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53  E_TEST_REALLOC_S
4090: 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20  TRESS).# define 
40a0: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
40b0: 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a 23  STRESS(X)  (X).#
40c0: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
40d0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f  EBUG).# define O
40e0: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
40f0: 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f 28  TRESS(X)  ((X)?(
4100: 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a  assert(0),1):0).
4110: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f  #else.# define O
4120: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
4130: 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23 65  TRESS(X)  (0).#e
4140: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c  ndif../*.** Decl
4150: 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f  arations used fo
4160: 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70  r tracing the op
4170: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69  erating system i
4180: 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69  nterfaces..*/.#i
4190: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
41a0: 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29  _FORCE_OS_TRACE)
41b0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
41c0: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
41d0: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
41e0: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
41f0: 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74  TE_OS_WIN).  ext
4200: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f  ern int sqlite3O
4210: 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65  STrace;.# define
4220: 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20 20   OSTRACE(X)     
4230: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4240: 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74 65  OSTrace ) sqlite
4250: 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23  3DebugPrintf X.#
4260: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48   define SQLITE_H
4270: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c  AVE_OS_TRACE.#el
4280: 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52  se.# define OSTR
4290: 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20  ACE(X).# undef  
42a0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
42b0: 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RACE.#endif../*.
42c0: 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74 65  ** Is the sqlite
42d0: 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74  3ErrName() funct
42e0: 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68  ion needed in th
42f0: 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e  e build?  Curren
4300: 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65  tly,.** it is ne
4310: 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77  eded by "mutex_w
4320: 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75  32.c" (when debu
4330: 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e  gging), "os_win.
4340: 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52  c" (when.** OSTR
4350: 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c  ACE is enabled),
4360: 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20   and by several 
4370: 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20  "test*.c" files 
4380: 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f  (which are.** co
4390: 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c  mpiled using SQL
43a0: 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69  ITE_TEST)..*/.#i
43b0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
43c0: 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20  _HAVE_OS_TRACE) 
43d0: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
43e0: 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20  E_TEST) || \.   
43f0: 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
4400: 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54  _DEBUG) && SQLIT
4410: 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69  E_OS_WIN).# defi
4420: 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ne SQLITE_NEED_E
4430: 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20  RR_NAME.#else.# 
4440: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45  undef  SQLITE_NE
4450: 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64  ED_ERR_NAME.#end
4460: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  if../*.** SQLITE
4470: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
4480: 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f  COMMENTS is inco
4490: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51  mpatible with SQ
44a0: 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
44b0: 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  N.*/.#ifdef SQLI
44c0: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
44d0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
44e0: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
44f0: 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f  MMENTS.#endif../
4500: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
4510: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
4520: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
4530: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
4540: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
4550: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
4560: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
4570: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
4580: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
4590: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
45a0: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
45b0: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
45c0: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
45d0: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
45e0: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
45f0: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
4600: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
4610: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
4620: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
4630: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
4640: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
4650: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4660: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
4670: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
4680: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
4690: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
46a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
46b0: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
46c0: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
46d0: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
46e0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
46f0: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
4700: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
4710: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
4720: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
4730: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
4740: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
4750: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
4760: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
4770: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
4780: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
4790: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
47a0: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
47b0: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
47c0: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
47d0: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
47e0: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
47f0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
4800: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20  f.h>../*.** Use 
4810: 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c 61  a macro to repla
4820: 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20 63  ce memcpy() if c
4830: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c  ompiled with SQL
4840: 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50  ITE_INLINE_MEMCP
4850: 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  Y..** This allow
4860: 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72 65  s better measure
4870: 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20 6d  ments of where m
4880: 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64 20  emcpy() is used 
4890: 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20  when running.** 
48a0: 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75 74  cachegrind.  But
48b0: 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72 73   this macro vers
48c0: 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29 20  ion of memcpy() 
48d0: 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f 20  is very slow so 
48e0: 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74  it.** should not
48f0: 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f 64   be used in prod
4900: 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73  uction.  This is
4910: 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d   a performance m
4920: 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61  easurement.** ha
4930: 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64  ck only..*/.#ifd
4940: 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  ef SQLITE_INLINE
4950: 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e 65  _MEMCPY.# define
4960: 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b   memcpy(D,S,N) {
4970: 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a 29  char*xxd=(char*)
4980: 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78  (D);const char*x
4990: 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  xs=(const char*)
49a0: 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20 20  (S);\.          
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
49c0: 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28  t xxn=(N);while(
49d0: 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29  xxn-->0)*(xxd++)
49e0: 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64  =*(xxs++);}.#end
49f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d  if../*.** If com
4a00: 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f  piling for a pro
4a10: 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b  cessor that lack
4a20: 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  s floating point
4a30: 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62   support,.** sub
4a40: 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20  stitute integer 
4a50: 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  for floating-poi
4a60: 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  nt.*/.#ifdef SQL
4a70: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
4a80: 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65  G_POINT.# define
4a90: 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69   double sqlite_i
4aa0: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c  nt64.# define fl
4ab0: 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  oat sqlite_int64
4ac0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
4ad0: 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65  UBLE_TYPE sqlite
4ae0: 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20  _int64.# ifndef 
4af0: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
4b00: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4b10: 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69  _BIG_DBL (((sqli
4b20: 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30  te3_int64)1)<<50
4b30: 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ).# endif.# defi
4b40: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ne SQLITE_OMIT_D
4b50: 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a  ATETIME_FUNCS 1.
4b60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4b70: 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75  OMIT_TRACE 1.# u
4b80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45  ndef SQLITE_MIXE
4b90: 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46  D_ENDIAN_64BIT_F
4ba0: 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c  LOAT.# undef SQL
4bb0: 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23  ITE_HAVE_ISNAN.#
4bc0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4bd0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64  LITE_BIG_DBL.# d
4be0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
4bf0: 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64  _DBL (1e99).#end
4c00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54  if../*.** OMIT_T
4c10: 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20  EMPDB is set to 
4c20: 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  1 if SQLITE_OMIT
4c30: 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e  _TEMPDB is defin
4c40: 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65  ed, or 0.** afte
4c50: 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68  rward. Having th
4c60: 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20  is macro allows 
4c70: 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  us to cause the 
4c80: 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  C compiler.** to
4c90: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
4ca0: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
4cb0: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
4cc0: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
4cd0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4ce0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
4cf0: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
4d00: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
4d10: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
4d20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
4d30: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
4d40: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
4d50: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
4d60: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
4d70: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
4d80: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
4d90: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
4da0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
4db0: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
4dc0: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
4dd0: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
4de0: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
4df0: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
4e00: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
4e10: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
4e20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4e30: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
4e40: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
4e50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
4e60: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
4e70: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4e80: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65  FILE_FORMAT 4.#e
4e90: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
4ea0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
4eb0: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
4ec0: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
4ed0: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
4ee0: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
4ef0: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
4f00: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
4f10: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
4f20: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
4f30: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
4f40: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
4f50: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
4f60: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
4f70: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
4f80: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
4f90: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
4fa0: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
4fb0: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
4fc0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
4fd0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4fe0: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
4ff0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
5000: 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65  STORE 1.# define
5010: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
5020: 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  RE_xc 1  /* Excl
5030: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
5040: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
5050: 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61  * If no value ha
5060: 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20  s been provided 
5070: 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  for SQLITE_MAX_W
5080: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f  ORKER_THREADS, o
5090: 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  r if.** SQLITE_T
50a0: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74  EMP_STORE is set
50b0: 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65   to 3 (never use
50c0: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
50d0: 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74 6f 20  ), set it.** to 
50e0: 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  zero..*/.#if SQL
50f0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
5100: 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45  3 || SQLITE_THRE
5110: 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65  ADSAFE==0.# unde
5120: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5130: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5140: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5150: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
5160: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5170: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5180: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
5190: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
51a0: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23  RKER_THREADS 8.#
51b0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
51c0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
51d0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
51e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
51f0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5200: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  DS 0.#endif.#if 
5210: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
5220: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51  ORKER_THREADS>SQ
5230: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
5240: 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20  THREADS.# undef 
5250: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5260: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
5270: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
5280: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c  RKER_THREADS SQL
5290: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
52a0: 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69  ER_THREADS.#endi
52b0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
52c0: 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c  ault initial all
52d0: 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ocation for the 
52e0: 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20 75  pagecache when u
52f0: 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a 2a  sing separate.**
5300: 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72 20   pagecaches for 
5310: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
5320: 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73  nnection.  A pos
5330: 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73 20  itive number is 
5340: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
5350: 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61 74   pages.  A negat
5360: 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72 61  ive number N tra
5370: 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20  nslations means 
5380: 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a 2a  that a buffer.**
5390: 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74 65   of -1024*N byte
53a0: 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61  s is allocated a
53b0: 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20 6d  nd used for as m
53c0: 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74 20  any pages as it 
53d0: 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a 2a  will hold..**.**
53e0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
53f0: 75 65 20 6f 66 20 22 32 30 22 20 77 61 73 20 63  ue of "20" was c
5400: 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69 6d 69  hoosen to minimi
5410: 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  ze the run-time 
5420: 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65 64 74  of the.** speedt
5430: 65 73 74 31 20 74 65 73 74 20 70 72 6f 67 72 61  est1 test progra
5440: 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73 3a 20  m with options: 
5450: 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20  --shrink-memory 
5460: 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f 0a 23  --reprepare.*/.#
5470: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
5480: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
5490: 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  TSZ.# define SQL
54a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43  ITE_DEFAULT_PCAC
54b0: 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23 65 6e  HE_INITSZ 20.#en
54c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  dif../*.** GCC d
54d0: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
54e0: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
54f0: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
5500: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
5510: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
5520: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
5530: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
5540: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
5550: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
5560: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
5570: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
5580: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63  *.** Macros to c
5590: 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61  ompute minimum a
55a0: 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77  nd maximum of tw
55b0: 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69  o numbers..*/.#i
55c0: 66 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69  fndef MIN.# defi
55d0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
55e0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  <(B)?(A):(B)).#e
55f0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58  ndif.#ifndef MAX
5600: 0a 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  .# define MAX(A,
5610: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
5620: 28 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (B)).#endif../*.
5630: 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65  ** Swap two obje
5640: 63 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45  cts of type TYPE
5650: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41  ..*/.#define SWA
5660: 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50  P(TYPE,A,B) {TYP
5670: 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b  E t=A; A=B; B=t;
5680: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
5690: 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61  o see if this ma
56a0: 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49  chine uses EBCDI
56b0: 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76  C.  (Yes, believ
56c0: 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20  e it or.** not, 
56d0: 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20  there are still 
56e0: 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65  machines out the
56f0: 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44  re that use EBCD
5700: 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20  IC.).*/.#if 'A' 
5710: 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69  == '\301'.# defi
5720: 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43  ne SQLITE_EBCDIC
5730: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
5740: 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31  e SQLITE_ASCII 1
5750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
5760: 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e  ntegers of known
5770: 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74   sizes.  These t
5780: 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68  ypedefs might ch
5790: 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65  ange for archite
57a0: 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20  ctures.** where 
57b0: 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20  the sizes very. 
57c0: 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   Preprocessor ma
57d0: 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62  cros are availab
57e0: 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a  le so that the.*
57f0: 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63  * types can be c
5800: 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65  onveniently rede
5810: 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
5820: 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69  -type.  Like thi
5830: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
5840: 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54   cc '-DUINTPTR_T
5850: 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  YPE=long long in
5860: 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  t' ....*/.#ifnde
5870: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20  f UINT32_TYPE.# 
5880: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33  ifdef HAVE_UINT3
5890: 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  2_T.#  define UI
58a0: 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32  NT32_TYPE uint32
58b0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
58c0: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
58d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65  unsigned int.# e
58e0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
58f0: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a  def UINT16_TYPE.
5900: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5910: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
5920: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74  UINT16_TYPE uint
5930: 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  16_t.# else.#  d
5940: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
5950: 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74  E unsigned short
5960: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
5970: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31  dif.#ifndef INT1
5980: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
5990: 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64  AVE_INT16_T.#  d
59a0: 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45  efine INT16_TYPE
59b0: 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a   int16_t.# else.
59c0: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
59d0: 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23  TYPE short int.#
59e0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
59f0: 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  fndef UINT8_TYPE
5a00: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
5a10: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5a20: 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38  UINT8_TYPE uint8
5a30: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5a40: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
5a50: 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65  nsigned char.# e
5a60: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5a70: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20  def INT8_TYPE.# 
5a80: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f  ifdef HAVE_INT8_
5a90: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  T.#  define INT8
5aa0: 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65  _TYPE int8_t.# e
5ab0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5ac0: 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63  T8_TYPE signed c
5ad0: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
5ae0: 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44  if.#ifndef LONGD
5af0: 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66  OUBLE_TYPE.# def
5b00: 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ine LONGDOUBLE_T
5b10: 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a  YPE long double.
5b20: 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73  #endif.typedef s
5b30: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b  qlite_int64 i64;
5b40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62            /* 8-b
5b50: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
5b60: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71  er */.typedef sq
5b70: 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b  lite_uint64 u64;
5b80: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
5b90: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
5ba0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
5bb0: 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20  INT32_TYPE u32; 
5bc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62            /* 4-b
5bd0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
5be0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5bf0: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b  UINT16_TYPE u16;
5c00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
5c10: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5c20: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5c30: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b   INT16_TYPE i16;
5c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
5c50: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5c60: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5c70: 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20  UINT8_TYPE u8;  
5c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
5c90: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5ca0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5cb0: 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20   INT8_TYPE i8;  
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
5cd0: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5ce0: 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  eger */../*.** S
5cf0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73  QLITE_MAX_U32 is
5d00: 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20   a u64 constant 
5d10: 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69  that is the maxi
5d20: 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a  mum u64 value.**
5d30: 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f   that can be sto
5d40: 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74  red in a u32 wit
5d50: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74  hout loss of dat
5d60: 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  a.  The value.**
5d70: 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66   is 0x00000000ff
5d80: 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63  ffffff.  But bec
5d90: 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f  ause of quirks o
5da0: 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  f some compilers
5db0: 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20  , we.** have to 
5dc0: 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75  specify the valu
5dd0: 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e  e in the less in
5de0: 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73  tuitive manner s
5df0: 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  hown:.*/.#define
5e00: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5e10: 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29   ((((u64)1)<<32)
5e20: 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  -1)../*.** The d
5e30: 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20  atatype used to 
5e40: 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20  store estimates 
5e50: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
5e60: 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61   rows in a.** ta
5e70: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble or index.  T
5e80: 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  his is an unsign
5e90: 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e  ed integer type.
5ea0: 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a    For 99.9% of.*
5eb0: 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33  * the world, a 3
5ec0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73  2-bit integer is
5ed0: 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75   sufficient.  Bu
5ee0: 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  t a 64-bit integ
5ef0: 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  er.** can be use
5f00: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
5f10: 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f  e if desired..*/
5f20: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36  .#ifdef SQLITE_6
5f30: 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65  4BIT_STATS. type
5f40: 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b  def u64 tRowcnt;
5f50: 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e      /* 64-bit on
5f60: 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20  ly if requested 
5f70: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
5f80: 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65  */.#else. typede
5f90: 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20  f u32 tRowcnt;  
5fa0: 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74    /* 32-bit is t
5fb0: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65  he default */.#e
5fc0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69  ndif../*.** Esti
5fd0: 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73  mated quantities
5fe0: 20 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20   used for query 
5ff0: 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f  planning are sto
6000: 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a  red as 16-bit.**
6010: 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f   logarithms.  Fo
6020: 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68  r quantity X, th
6030: 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
6040: 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54  s 10*log2(X).  T
6050: 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70  his.** gives a p
6060: 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66  ossible range of
6070: 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f   values of appro
6080: 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36  ximately 1.0e986
6090: 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42   to 1e-986..** B
60a0: 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76  ut the allowed v
60b0: 61 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e  alues are "grain
60c0: 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76  y".  Not every v
60d0: 61 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e  alue is represen
60e0: 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78  table..** For ex
60f0: 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65  ample, quantitie
6100: 73 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20  s 16 and 17 are 
6110: 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64  both represented
6120: 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20   by a LogEst.** 
6130: 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c  of 40.  However,
6140: 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75   since LogEst qu
6150: 61 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70  antities are sup
6160: 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d  pose to be estim
6170: 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61  ates,.** not exa
6180: 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20  ct values, this 
6190: 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e  imprecision is n
61a0: 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a  ot a problem..**
61b0: 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20  .** "LogEst" is 
61c0: 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72  short for "Logar
61d0: 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22  ithmic Estimate"
61e0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  ..**.** Examples
61f0: 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30  :.**      1 -> 0
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30                20
6210: 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20   -> 43          
6220: 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20  10000 -> 132.** 
6230: 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20       2 -> 10    
6240: 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34           25 -> 4
6250: 36 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30  6          25000
6260: 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20   -> 146.**      
6270: 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20  3 -> 16         
6280: 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20     100 -> 66    
6290: 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31      1000000 -> 1
62a0: 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20  99.**      4 -> 
62b0: 32 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30  20           100
62c0: 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31  0 -> 99        1
62d0: 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a  048576 -> 200.**
62e0: 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20       10 -> 33   
62f0: 20 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20          1024 -> 
6300: 31 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39  100    429496729
6310: 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54  6 -> 320.**.** T
6320: 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65  he LogEst can be
6330: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64   negative to ind
6340: 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c  icate fractional
6350: 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d   values..** Exam
6360: 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ples:.**.**    0
6370: 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20  .5 -> -10       
6380: 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20      0.1 -> -33  
6390: 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20        0.0625 -> 
63a0: 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49  -40.*/.typedef I
63b0: 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74  NT16_TYPE LogEst
63c0: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  ;../*.** Set the
63d0: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
63e0: 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d  macro to the num
63f0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
6400: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
6410: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53  ndef SQLITE_PTRS
6420: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
6430: 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45  (__SIZEOF_POINTE
6440: 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  R__).#   define 
6450: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f  SQLITE_PTRSIZE _
6460: 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f  _SIZEOF_POINTER_
6470: 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  _.# elif defined
6480: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
6490: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
64a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
64b0: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
64c0: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
64d0: 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  ARM)   || define
64e0: 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c  d(__arm__)    ||
64f0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a   defined(__x86).
6500: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6510: 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c  E_PTRSIZE 4.# el
6520: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6530: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23  LITE_PTRSIZE 8.#
6540: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
6550: 2a 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20  * The uptr type 
6560: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69  is an unsigned i
6570: 6e 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f  nteger large eno
6580: 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f  ugh to hold a po
6590: 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66  inter.*/.#if def
65a0: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
65b0: 5f 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69  _H).  typedef ui
65c0: 6e 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65  ntptr_t uptr;.#e
65d0: 6c 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  lif SQLITE_PTRSI
65e0: 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20  ZE==4.  typedef 
65f0: 75 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a  u32 uptr;.#else.
6600: 20 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70    typedef u64 up
6610: 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  tr;.#endif../*.*
6620: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54  * The SQLITE_WIT
6630: 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f  HIN(P,S,E) macro
6640: 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
6650: 66 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e  f pointer P poin
6660: 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69  ts to.** somethi
6670: 6e 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e  ng between S (in
6680: 63 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28  clusive) and E (
6690: 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a  exclusive)..**.*
66a0: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
66b0: 2c 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20  , S is a buffer 
66c0: 61 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74  and E is a point
66d0: 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
66e0: 62 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68  byte after.** th
66f0: 65 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20  e end of buffer 
6700: 53 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72  S.  This macro r
6710: 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50  eturns true if P
6720: 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74   points to somet
6730: 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65  hing.** containe
6740: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66  d within the buf
6750: 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fer S..*/.#defin
6760: 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28  e SQLITE_WITHIN(
6770: 50 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28  P,S,E) (((uptr)(
6780: 50 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26  P)>=(uptr)(S))&&
6790: 28 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72  ((uptr)(P)<(uptr
67a0: 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d  )(E))).../*.** M
67b0: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
67c0: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
67d0: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
67e0: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
67f0: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
6800: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
6810: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
6820: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
6830: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
6840: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
6850: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
6860: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
6870: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
6880: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
6890: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
68a0: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
68b0: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
68c0: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45  ** -DSQLITE_BYTE
68d0: 4f 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20  ORDER=0 is set, 
68e0: 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20  then byte-order 
68f0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a  is determined.**
6900: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f   at run-time..*/
6910: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6920: 42 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64  BYTEORDER.# if d
6930: 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20  efined(i386)    
6940: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33   || defined(__i3
6950: 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e  86__)   || defin
6960: 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20  ed(_M_IX86) ||  
6970: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
6980: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
6990: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
69a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
69b0: 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20  X64)  ||    \.  
69c0: 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d     defined(_M_AM
69d0: 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D64) || defined(
69e0: 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64  _M_ARM)     || d
69f0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20  efined(__x86)   
6a00: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
6a10: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20  ined(__arm__).# 
6a20: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6a30: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
6a40: 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  4.# elif defined
6a50: 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65  (sparc)    || de
6a60: 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23  fined(__ppc__).#
6a70: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6a80: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33  _BYTEORDER    43
6a90: 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  21.# else.#   de
6aa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
6ab0: 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a  ORDER 0.# endif.
6ac0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
6ad0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32  E_BYTEORDER==432
6ae0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6af0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
6b00: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6b10: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
6b20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6b30: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6b40: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69  ITE_UTF16BE.#eli
6b50: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6b60: 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e  ER==1234.# defin
6b70: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
6b80: 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65  AN    0.# define
6b90: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6ba0: 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20  DIAN 1.# define 
6bb0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6bc0: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
6bd0: 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66  LE.#else.# ifdef
6be0: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
6bf0: 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74  TION.  const int
6c00: 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b   sqlite3one = 1;
6c10: 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e  .# else.  extern
6c20: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
6c30: 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23  e3one;.# endif.#
6c40: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6c50: 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63  IGENDIAN    (*(c
6c60: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
6c70: 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65  ne)==0).# define
6c80: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6c90: 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28  DIAN (*(char *)(
6ca0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29  &sqlite3one)==1)
6cb0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6cc0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53  _UTF16NATIVE  (S
6cd0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f  QLITE_BIGENDIAN?
6ce0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53  SQLITE_UTF16BE:S
6cf0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23  QLITE_UTF16LE).#
6d00: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
6d10: 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c  stants for the l
6d20: 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c  argest and small
6d30: 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d  est possible 64-
6d40: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
6d50: 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ers..** These ma
6d60: 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65  cros are designe
6d70: 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63  d to work correc
6d80: 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62  tly on both 32-b
6d90: 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a  it and 64-bit.**
6da0: 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23   compilers..*/.#
6db0: 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49  define LARGEST_I
6dc0: 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66  NT64  (0xfffffff
6dd0: 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66  f|(((i64)0x7ffff
6de0: 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69  fff)<<32)).#defi
6df0: 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  ne SMALLEST_INT6
6e00: 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c  4 (((i64)-1) - L
6e10: 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f  ARGEST_INT64)../
6e20: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20  *.** Round up a 
6e30: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65  number to the ne
6e40: 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70  xt larger multip
6e50: 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69  le of 8.  This i
6e60: 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72  s used.** to for
6e70: 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d  ce 8-byte alignm
6e80: 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72  ent on 64-bit ar
6e90: 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a  chitectures..*/.
6ea0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78  #define ROUND8(x
6eb0: 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e  )     (((x)+7)&~
6ec0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  7)../*.** Round 
6ed0: 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72  down to the near
6ee0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  est multiple of 
6ef0: 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  8.*/.#define ROU
6f00: 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26  NDDOWN8(x) ((x)&
6f10: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72  ~7)../*.** Asser
6f20: 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74  t that the point
6f30: 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20  er X is aligned 
6f40: 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75  to an 8-byte bou
6f50: 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20  ndary.  This.** 
6f60: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e  macro is used on
6f70: 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74  ly within assert
6f80: 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  () to verify tha
6f90: 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a  t the code gets.
6fa0: 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74  ** all alignment
6fb0: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f   restrictions co
6fc0: 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63  rrect..**.** Exc
6fd0: 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34  ept, if SQLITE_4
6fe0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
6ff0: 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c  LLOC is defined,
7000: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64   then the.** und
7010: 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29  erlying malloc()
7020: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
7030: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
7040: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
7050: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
7060: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
7070: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
7080: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
7090: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
70a0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
70b0: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
70c0: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
70d0: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
70e0: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
70f0: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
7100: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
7110: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
7120: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
7130: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
7140: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
7150: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
7160: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
7170: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
7180: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
7190: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
71a0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
71b0: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
71c0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
71d0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
71e0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
71f0: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
7200: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
7210: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
7220: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
7230: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
7240: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
7250: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
7260: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
7270: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69  tionals.h>.#endi
7280: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
7290: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
72a0: 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69   if defined(__li
72b0: 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  nux__) \.  || de
72c0: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a  fined(_WIN32) \.
72d0: 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f    || (defined(__
72e0: 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69  APPLE__) && defi
72f0: 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c  ned(__MACH__)) \
7300: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  .  || defined(__
7310: 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  sun) \.  || defi
7320: 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29  ned(__FreeBSD__)
7330: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7340: 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23  __DragonFly__).#
7350: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
7360: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7370: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
7380: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
7390: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
73a0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
73b0: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
73c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
73d0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
73e0: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
73f0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
7400: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
7410: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
7420: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
7430: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
7440: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
7450: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
7460: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
7470: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
7480: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
7490: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
74a0: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
74b0: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
74c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
74d0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
74e0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
74f0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7500: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
7510: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
7520: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
7530: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
7540: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
7550: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7560: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7570: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7580: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
7590: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
75a0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
75b0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
75c0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
75d0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
75e0: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
75f0: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7600: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7610: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7620: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7630: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7640: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7650: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7660: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7670: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7680: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7690: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
76a0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
76b0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
76c0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
76d0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
76e0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
76f0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7700: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7710: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7720: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7730: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7740: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7750: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7760: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7770: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7780: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7790: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
77a0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
77b0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
77c0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
77d0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
77e0: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
77f0: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7800: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7810: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7820: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7830: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
7840: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
7850: 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64  SELECTTRACE).# d
7860: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
7870: 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73  E_ENABLED 1.#els
7880: 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  e.# define SELEC
7890: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30  TTRACE_ENABLED 0
78a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
78b0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
78c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
78d0: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
78e0: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
78f0: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
7900: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
7910: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a  sqlite handle..*
7920: 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e  *.** The sqlite.
7930: 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62  busyHandler memb
7940: 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  er of the sqlite
7950: 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73   struct contains
7960: 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c   the busy.** cal
7970: 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61  lback for the da
7980: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45  tabase handle. E
7990: 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64  ach pager opened
79a0: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a   via the sqlite.
79b0: 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73  ** handle is pas
79c0: 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  sed a pointer to
79d0: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
79e0: 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61  ler. The busy-ha
79f0: 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  ndler.** callbac
7a00: 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  k is currently i
7a10: 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d  nvoked only from
7a20: 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e   within pager.c.
7a30: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
7a40: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42  ct BusyHandler B
7a50: 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75  usyHandler;.stru
7a60: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b  ct BusyHandler {
7a70: 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28  .  int (*xFunc)(
7a80: 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a  void *,int);  /*
7a90: 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   The busy callba
7aa0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  ck */.  void *pA
7ab0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7ac0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20     /* First arg 
7ad0: 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  to busy callback
7ae0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b   */.  int nBusy;
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20   /* Incremented 
7b10: 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63  with each busy c
7b20: 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  all */.};../*.**
7b30: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73   Name of the mas
7b40: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
7b50: 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20  le.  The master 
7b60: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a  database table.*
7b70: 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74  * is a special t
7b80: 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20  able that holds 
7b90: 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74  the names and at
7ba0: 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a  tributes of all.
7bb0: 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61  ** user tables a
7bc0: 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23  nd indices..*/.#
7bd0: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41  define MASTER_NA
7be0: 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65  ME       "sqlite
7bf0: 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65  _master".#define
7c00: 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d   TEMP_MASTER_NAM
7c10: 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  E  "sqlite_temp_
7c20: 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54  master"../*.** T
7c30: 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
7c40: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7c50: 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ase table..*/.#d
7c60: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f  efine MASTER_ROO
7c70: 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  T       1../*.**
7c80: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
7c90: 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a   schema table..*
7ca0: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
7cb0: 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d  _TABLE(x)  ((!OM
7cc0: 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d  IT_TEMPDB)&&(x==
7cd0: 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e  1)?TEMP_MASTER_N
7ce0: 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29  AME:MASTER_NAME)
7cf0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e  ../*.** A conven
7d00: 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74  ience macro that
7d10: 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
7d20: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
7d30: 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a  in.** an array..
7d40: 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79  */.#define Array
7d50: 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74  Size(X)    ((int
7d60: 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65  )(sizeof(X)/size
7d70: 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a  of(X[0])))../*.*
7d80: 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74  * Determine if t
7d90: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
7da0: 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f   power of two.*/
7db0: 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72  .#define IsPower
7dc0: 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28  OfTwo(X) (((X)&(
7dd0: 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a  (X)-1))==0)../*.
7de0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
7df0: 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74   value as a dest
7e00: 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20  ructor means to 
7e10: 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  use sqlite3DbFre
7e20: 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69  e()..** The sqli
7e30: 74 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74  te3DbFree() rout
7e40: 69 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f  ine requires two
7e50: 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74   parameters inst
7e60: 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e  ead of the.** on
7e70: 65 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74  e parameter that
7e80: 20 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72   destructors nor
7e90: 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20  mally want.  So 
7ea0: 77 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f  we have to intro
7eb0: 64 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67  duce.** this mag
7ec0: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
7ed0: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
7ee0: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
7ef0: 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e  ly.  Any.** poin
7f00: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
7f10: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
7f20: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
7f30: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
7f40: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
7f50: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
7f60: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
7f70: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
7f80: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
7f90: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
7fa0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
7fb0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
7fc0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
7fd0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
7fe0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
7ff0: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
8000: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
8010: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
8020: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
8030: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
8040: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
8050: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
8060: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
8070: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
8080: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
8090: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
80a0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
80b0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
80c0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
80d0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
80e0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
80f0: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
8100: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
8110: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
8120: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
8130: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
8140: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
8150: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
8160: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
8170: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
8180: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
8190: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
81a0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
81b0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
81c0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
81d0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
81e0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
81f0: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
8200: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
8210: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
8220: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
8230: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
8240: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
8250: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
8260: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
8270: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
8280: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
8290: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
82a0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
82b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
82c0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
82d0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
82e0: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
82f0: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
8300: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
8310: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
8320: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
8330: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8340: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
8350: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
8360: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
8370: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
8380: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
8390: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
83a0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
83b0: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
83c0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
83d0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20  ne SQLITE_WSD.  
83e0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
83f0: 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20  ,v) v.  #define 
8400: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
8410: 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
8420: 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  g.#endif../*.** 
8430: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
8440: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
8450: 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c   suppress compil
8460: 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20  er warnings and 
8470: 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c  to.** make it cl
8480: 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61  ear to human rea
8490: 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63  ders when a func
84a0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
84b0: 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a  s deliberately.*
84c0: 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69  * left unused wi
84d0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
84e0: 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69   a function. Thi
84f0: 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e  s usually happen
8500: 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63  s when.** a func
8510: 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76  tion is called v
8520: 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f  ia a function po
8530: 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70  inter. For examp
8540: 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d  le the.** implem
8550: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
8560: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
8570: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
8580: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
8590: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
85a0: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
85b0: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
85c0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
85d0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
85e0: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
85f0: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
8600: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
8610: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
8620: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
8630: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
8640: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
8650: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
8660: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
8670: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
8680: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
8690: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
86a0: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
86b0: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
86c0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
86d0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
86e0: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
86f0: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
8700: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
8710: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
8720: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
8730: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
8740: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
8750: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
8760: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
8770: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
8780: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
8790: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
87a0: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
87b0: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
87c0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
87d0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
87e0: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
87f0: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
8800: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
8810: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
8820: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
8830: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
8840: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
8850: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
8860: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
8870: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
8880: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
8890: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
88a0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
88b0: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
88c0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
88d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
88e0: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
88f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
8900: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
8910: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
8920: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
8930: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
8940: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8950: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
8960: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
8970: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
8980: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
8990: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
89a0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
89b0: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
89c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
89d0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
89e0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
89f0: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
8a00: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
8a10: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
8a20: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
8a30: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
8a40: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
8a50: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
8a60: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
8a70: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
8a80: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
8a90: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
8aa0: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
8ab0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
8ac0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
8ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ae0: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
8af0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8b00: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
8b10: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
8b20: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
8b30: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
8b40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8b50: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
8b60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
8b70: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
8b80: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
8b90: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
8ba0: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
8bb0: 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65  ct PreUpdate Pre
8bc0: 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20  Update;.typedef 
8bd0: 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
8be0: 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67  uments PrintfArg
8bf0: 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20  uments;.typedef 
8c00: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8c10: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8c20: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8c30: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8c40: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8c50: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8c60: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8c70: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8c80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8c90: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8ca0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8cb0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8cc0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8cd0: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
8ce0: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
8cf0: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
8d00: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
8d10: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
8d20: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
8d30: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
8d40: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
8d50: 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72  ruct TreeView Tr
8d60: 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20  eeView;.typedef 
8d70: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
8d80: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
8d90: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
8da0: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
8db0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8dc0: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
8dd0: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
8de0: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
8df0: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
8e00: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
8e10: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
8e20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e30: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
8e40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e50: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
8e60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
8e70: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
8e80: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8e90: 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f  ct With With;../
8ea0: 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74  * A VList object
8eb0: 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69   records a mappi
8ec0: 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d  ng between param
8ed0: 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f  eters/variables/
8ee0: 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20  wildcards.** in 
8ef0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
8f00: 74 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c  t (such as $abc,
8f10: 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20   @pqr, or :xyz) 
8f20: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a  and the integer.
8f30: 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  ** variable numb
8f40: 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
8f50: 74 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65  th that paramete
8f60: 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d  r.  See the form
8f70: 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a  at description.*
8f80: 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  * on the sqlite3
8f90: 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69  VListAdd() routi
8fa0: 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f  ne for more info
8fb0: 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73  rmation.  A VLis
8fc0: 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a  t is really.** j
8fd0: 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ust an array of 
8fe0: 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70  integers..*/.typ
8ff0: 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a  edef int VList;.
9000: 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75  ./*.** Defer sou
9010: 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64  rcing vdbe.h and
9020: 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61   btree.h until a
9030: 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e  fter the "u8" an
9040: 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65  d.** "BusyHandle
9050: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
9060: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
9070: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
9080: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
9090: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
90a0: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
90b0: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
90c0: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
90d0: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
90e0: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
90f0: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
9100: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  .h".#include "os
9110: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
9120: 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53  tex.h"../* The S
9130: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9140: 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BLE compile-time
9150: 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20   option used to 
9160: 73 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a  set the default.
9170: 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73  ** synchronous s
9180: 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e  etting to EXTRA.
9190: 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65    It is no longe
91a0: 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a  r supported..*/.
91b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58  #ifdef SQLITE_EX
91c0: 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61  TRA_DURABLE.# wa
91d0: 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45  rning Use SQLITE
91e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
91f0: 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f  NOUS=3 instead o
9200: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9210: 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  URABLE.# define 
9220: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9230: 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e  YNCHRONOUS 3.#en
9240: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
9250: 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c  lt synchronous l
9260: 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  evels..**.** Not
9270: 65 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74  e that (for hist
9280: 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74  orcal reasons) t
9290: 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f  he PAGER_SYNCHRO
92a0: 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69  NOUS_* macros di
92b0: 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  ffer.** from the
92c0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
92d0: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75  SYNCHRONOUS valu
92e0: 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20  e by 1..**.**   
92f0: 20 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59          PAGER_SY
9300: 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20  NCHRONOUS       
9310: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9320: 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20  OUS.**   OFF    
9330: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9350: 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20   0.**   NORMAL  
9360: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20  1.**   FULL     
9390: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
93b0: 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20  .**   EXTRA     
93c0: 20 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20      4           
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a                3.
93e0: 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d  **.** The "PRAGM
93f0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73  A synchronous" s
9400: 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73  tatement also us
9410: 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65  es the zero-base
9420: 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e  d numbers..** In
9430: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
9440: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9450: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
9460: 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69  r all external i
9470: 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64  nterfaces.** and
9480: 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76   the one-based v
9490: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69  alues are used i
94a0: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69  nternally..*/.#i
94b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
94c0: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
94d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
94e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
94f0: 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69  NOUS 2.#endif.#i
9500: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
9510: 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f  AULT_WAL_SYNCHRO
9520: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
9530: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
9540: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c  _SYNCHRONOUS SQL
9550: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9560: 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a  HRONOUS.#endif..
9570: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
9580: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
9590: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
95a0: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
95b0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
95c0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
95d0: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
95e0: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
95f0: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
9600: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
9610: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
9620: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
9630: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
9640: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
9650: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
9660: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
9670: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
9680: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
9690: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
96a0: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
96b0: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
96c0: 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20  r *zDbSName;    
96d0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
96e0: 73 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68  s database. (sch
96f0: 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69  ema name, not fi
9700: 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72  lename) */.  Btr
9710: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
9720: 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20    /* The B*Tree 
9730: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68  structure for th
9740: 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  is database file
9750: 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f   */.  u8 safety_
9760: 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f  level;     /* Ho
9770: 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20  w aggressive at 
9780: 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20  syncing data to 
9790: 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79  disk */.  u8 bSy
97a0: 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ncSet;         /
97b0: 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d  * True if "PRAGM
97c0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22  A synchronous=N"
97d0: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f   has been run */
97e0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
97f0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
9800: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
9810: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
9820: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
9830: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
9840: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9850: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
9860: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
9870: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
9880: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
9890: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
98a0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
98b0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
98c0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
98d0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
98e0: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
98f0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
9900: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
9910: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
9920: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
9930: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
9940: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
9950: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
9960: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
9970: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
9980: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
9990: 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20  t..**.** Schema 
99a0: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
99b0: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
99c0: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
99d0: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
99e0: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
99f0: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
9a00: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
9a10: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
9a20: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
9a30: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
9a40: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
9a50: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
9a60: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
9a70: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
9a80: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
9a90: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
9aa0: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
9ab0: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
9ac0: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
9ad0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
9ae0: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
9af0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
9b00: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
9b10: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
9b20: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
9b30: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
9b40: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
9b50: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
9b60: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
9b70: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
9b80: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
9b90: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
9ba0: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
9bb0: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
9bc0: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
9bd0: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
9be0: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
9bf0: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
9c00: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
9c10: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
9c20: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
9c30: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
9c40: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
9c50: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
9c60: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
9c70: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
9c80: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
9c90: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
9ca0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
9cb0: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
9cc0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
9cd0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
9ce0: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
9cf0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
9d00: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
9d10: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
9d20: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
9d30: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
9d40: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
9d50: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
9d60: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
9d70: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
9d80: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
9d90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
9da0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
9db0: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
9dc0: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
9dd0: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
9de0: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
9df0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
9e00: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
9e10: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
9e20: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
9e30: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
9e40: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
9e50: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
9e60: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
9e70: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
9e80: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
9e90: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
9ea0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
9eb0: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
9ec0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
9ed0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
9ee0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
9ef0: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
9f00: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
9f10: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
9f20: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
9f30: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
9f40: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
9f50: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
9f60: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
9f70: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
9f80: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
9f90: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
9fa0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
9fb0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
9fc0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
9fd0: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
9fe0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
9ff0: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
a000: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
a010: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
a020: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
a030: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
a040: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
a050: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
a060: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
a070: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
a080: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
a090: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
a0a0: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
a0b0: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
a0c0: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
a0d0: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
a0e0: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
a0f0: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
a100: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
a110: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
a120: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
a130: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
a140: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
a150: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
a160: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
a170: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
a180: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
a190: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a1a0: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
a1b0: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
a1c0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
a1d0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
a1e0: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
a1f0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
a200: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
a210: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
a220: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
a230: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
a240: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
a250: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
a260: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
a270: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
a280: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
a290: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a2a0: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
a2b0: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
a2c0: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
a2d0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a2e0: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
a2f0: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
a300: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
a310: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
a320: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
a330: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
a340: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
a350: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
a360: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
a370: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
a380: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
a390: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
a3a0: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
a3b0: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
a3c0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
a3d0: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
a3e0: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
a3f0: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
a400: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
a410: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
a420: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
a430: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
a440: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
a450: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
a460: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
a470: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
a480: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a490: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
a4a0: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
a4b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
a4c0: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
a4d0: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
a4e0: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
a4f0: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
a500: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
a510: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
a520: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
a530: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
a540: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
a550: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
a560: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
a570: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
a580: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
a590: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
a5a0: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
a5b0: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
a5c0: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
a5d0: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
a5e0: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
a5f0: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
a600: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
a610: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
a620: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
a630: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
a640: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
a650: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
a660: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
a670: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
a680: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
a690: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
a6a0: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
a6b0: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
a6c0: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
a6d0: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
a6e0: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
a6f0: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
a700: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
a710: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
a720: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
a730: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
a740: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
a750: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
a760: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
a770: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
a780: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
a790: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
a7a0: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
a7b0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
a7c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a7d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
a7e0: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
a7f0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
a800: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
a810: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
a820: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
a830: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
a840: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
a850: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
a860: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
a870: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
a880: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
a890: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
a8a0: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
a8b0: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
a8c0: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
a8d0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
a8e0: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
a8f0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
a900: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
a910: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
a920: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
a930: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
a940: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
a950: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
a960: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
a970: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
a980: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
a990: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
a9a0: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
a9b0: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
a9c0: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
a9d0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
a9e0: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
a9f0: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
aa00: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
aa10: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
aa20: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
aa30: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
aa40: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
aa50: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
aa60: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
aa70: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
aa80: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
aa90: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
aaa0: 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  chain..*/.#defin
aab0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  e SQLITE_FUNC_HA
aac0: 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20  SH_SZ 23.struct 
aad0: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
aae0: 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54  FuncDef *a[SQLIT
aaf0: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b  E_FUNC_HASH_SZ];
ab00: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
ab10: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
ab20: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
ab30: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
ab40: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
ab50: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
ab60: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
ab70: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
ab80: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
ab90: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
aba0: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
abb0: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
abc0: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
abd0: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
abe0: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
abf0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
ac00: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
ac10: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
ac20: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
ac30: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
ac40: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
ac50: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ac70: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
ac80: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
ac90: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
acb0: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
acc0: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
acd0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
ace0: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
acf0: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
ad00: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
ad10: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
ad20: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
ad30: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
ad40: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
ad50: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
ad60: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
ad70: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
ad80: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
ad90: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
ada0: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
adb0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
adc0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
add0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
ade0: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
adf0: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
ae00: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
ae10: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
ae20: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
ae30: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
ae40: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
ae50: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
ae60: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
ae70: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
ae80: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
ae90: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
aea0: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
aeb0: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
aec0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
aed0: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
aee0: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
aef0: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
af00: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
af10: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
af20: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
af30: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
af40: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
af50: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
af60: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
af70: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
af80: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
af90: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
afa0: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
afb0: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
afc0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
afd0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
afe0: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
aff0: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
b000: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
b010: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b020: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b050: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
b060: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
b070: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
b080: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
b090: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
b0a0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b0b0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
b0e0: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
b0f0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b100: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
b110: 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 65  ./* This is an e
b120: 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52 41 43  xtra SQLITE_TRAC
b130: 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69 6e 64  E macro that ind
b140: 69 63 61 74 65 73 20 22 6c 65 67 61 63 79 22 20  icates "legacy" 
b150: 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68  tracing.** in th
b160: 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c 69 74  e style of sqlit
b170: 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64  e3_trace().*/.#d
b180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
b190: 43 45 5f 4c 45 47 41 43 59 20 20 30 78 38 30 0a  CE_LEGACY  0x80.
b1a0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51  #else.#define SQ
b1b0: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
b1c0: 59 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53  Y  0.#endif /* S
b1d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b1e0: 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  CATED */.../*.**
b1f0: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
b200: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
b210: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b220: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
b230: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
b240: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
b250: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
b260: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
b270: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
b280: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
b290: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
b2a0: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
b2b0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
b2c0: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
b2d0: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
b2e0: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
b2f0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b300: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
b310: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
b320: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
b330: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
b340: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
b350: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b360: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
b370: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
b380: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
b390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b3a0: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
b3b0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
b3c0: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3e0: 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e      /* Miscellan
b3f0: 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65 20  eous flags. See 
b400: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
b410: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
b420: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
b430: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
b440: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
b450: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
b460: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
b470: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
b480: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
b490: 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ing */.  unsigne
b4a0: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
b4b0: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
b4c0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
b4d0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
b4e0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b500: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
b510: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
b520: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
b530: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
b540: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
b550: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
b560: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
b570: 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  rning */.  int i
b580: 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20  SysErrno;       
b590: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e           /* Errn
b5a0: 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73  o value from las
b5b0: 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a  t system error *
b5c0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
b5d0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
b5e0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
b5f0: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
b600: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
b610: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b630: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
b640: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
b650: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b660: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
b670: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
b680: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b6a0: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
b6b0: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
b6c0: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
b6d0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
b6e0: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
b6f0: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
b700: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
b710: 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b  8 bBenignMalloc;
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b730: 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f  Do not require O
b740: 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  OMs if true */. 
b750: 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65   u8 dfltLockMode
b760: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
b770: 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  * Default lockin
b780: 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63  g-mode for attac
b790: 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67  hed dbs */.  sig
b7a0: 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74  ned char nextAut
b7b0: 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75  ovac;      /* Au
b7c0: 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66  tovac setting af
b7d0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d  ter VACUUM if >=
b7e0: 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65  0 */.  u8 suppre
b7f0: 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  ssErr;          
b800: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69       /* Do not i
b810: 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61  ssue error messa
b820: 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ges if true */. 
b830: 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
b840: 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ct;            /
b850: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
b860: 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e  n for s3_vtab_on
b870: 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20  _conflict() */. 
b880: 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f   u8 isTransactio
b890: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f  nSavepoint;    /
b8a0: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  * True if the ou
b8b0: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
b8c0: 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75  t is a TS */.  u
b8d0: 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20  8 mTrace;       
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b8f0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c  zero or more SQL
b900: 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20  ITE_TRACE flags 
b910: 2a 2f 0a 20 20 75 38 20 73 6b 69 70 42 74 72 65  */.  u8 skipBtre
b920: 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
b930: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f     /* True if no
b940: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61   shared-cache ba
b950: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e  ckends */.  u8 n
b960: 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20  SqlExec;        
b970: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b980: 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f  ber of pending O
b990: 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65  P_SqlExec opcode
b9a0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  s */.  int nextP
b9b0: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
b9c0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
b9d0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
b9e0: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
b9f0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
ba00: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
ba10: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
ba20: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
ba30: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
ba40: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
ba50: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
ba60: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
ba70: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
ba80: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
ba90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
baa0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
bab0: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
bac0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bad0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
bae0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
baf0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
bb00: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
bb10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
bb20: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
bb30: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
bb40: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
bb50: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
bb60: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
bb70: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
bb80: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
bb90: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
bba0: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
bbb0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
bbc0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
bbd0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
bbe0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc00: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
bc10: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
bc20: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
bc30: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
bc40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
bc50: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
bc60: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
bc70: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
bc80: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
bc90: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
bca0: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
bcb0: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
bcc0: 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c   u8 imposterTabl
bcd0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
bce0: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
bcf0: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
bd00: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
bd10: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
bd20: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
bd30: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
bd40: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
bd50: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd70: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
bd80: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
bd90: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
bda0: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
bdb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bdc0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
bdd0: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
bde0: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
bdf0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
be00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be10: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
be20: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
be30: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
be40: 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20  t nVDestroy;    
be50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
be60: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
be70: 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72  OP_VDestroy oper
be80: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ations */.  int 
be90: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
bea0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
beb0: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
bec0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
bed0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
bef0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
bf00: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
bf10: 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65  /.  int (*xTrace
bf20: 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64  )(u32,void*,void
bf30: 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a  *,void*);     /*
bf40: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
bf50: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
bf60: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf80: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
bf90: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
bfa0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
bfb0: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
bfc0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
bfd0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
bfe0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
bff0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c010: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c020: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
c030: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
c040: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
c050: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c060: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
c070: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
c080: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
c090: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
c0a0: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
c0b0: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
c0c0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
c0d0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
c0e0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c0f0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
c100: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
c110: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
c120: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
c130: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
c140: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
c150: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
c160: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
c170: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
c180: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
c190: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
c1a0: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
c1b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
c1c0: 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
c1d0: 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65  OOK.  void *pPre
c1e0: 55 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20  UpdateArg;      
c1f0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
c200: 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64  ument to xPreUpd
c210: 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ateCallback */. 
c220: 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61   void (*xPreUpda
c230: 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f  teCallback)(   /
c240: 2a 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69  * Registered usi
c250: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70  ng sqlite3_preup
c260: 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20  date_hook() */. 
c270: 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33     void*,sqlite3
c280: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
c290: 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71  *,char const*,sq
c2a0: 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69  lite3_int64,sqli
c2b0: 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20  te3_int64.  );. 
c2c0: 20 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65   PreUpdate *pPre
c2d0: 55 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f  Update;        /
c2e0: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
c2f0: 74 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20  tive pre-update 
c300: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
c310: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
c320: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
c330: 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  OK */.#ifndef SQ
c340: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
c350: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
c360: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
c370: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
c380: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
c390: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
c3a0: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
c3b0: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
c3c0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
c3d0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
c3e0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
c3f0: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
c400: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
c410: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
c420: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
c430: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
c440: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
c450: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
c460: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
c470: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
c480: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
c490: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
c4a0: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
c4b0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
c4c0: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
c4d0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
c4e0: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
c4f0: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
c500: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
c510: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
c520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
c530: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
c540: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
c550: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c560: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
c570: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
c580: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
c590: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
c5a0: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
c5b0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
c5c0: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
c5d0: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
c5e0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
c5f0: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
c600: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
c610: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
c620: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
c630: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
c640: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
c650: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
c660: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
c670: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
c680: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
c690: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c6a0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
c6b0: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
c6c0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
c6d0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c6e0: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
c6f0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
c700: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
c710: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
c720: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
c730: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
c740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
c750: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
c760: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
c770: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
c780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
c790: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
c7a0: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
c7b0: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
c7c0: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
c7d0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
c7e0: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
c7f0: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
c800: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
c810: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
c820: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
c830: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
c840: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
c850: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
c860: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
c870: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
c880: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
c890: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
c8a0: 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20  .  Hash aFunc;  
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
c8d0: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
c8e0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
c8f0: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
c900: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
c910: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
c920: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
c930: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
c940: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
c950: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
c960: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
c970: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
c980: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
c990: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
c9a0: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
c9b0: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
c9c0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
c9d0: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
c9e0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
c9f0: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
ca00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
ca10: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
ca20: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
ca30: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ca50: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
ca60: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
ca70: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
ca80: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
ca90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
caa0: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
cab0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
cac0: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
cad0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
cae0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
caf0: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
cb00: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
cb10: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
cb20: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
cb30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
cb40: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
cb50: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
cb60: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
cb70: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
cb80: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
cb90: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
cba0: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
cbb0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
cbc0: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
cbd0: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
cbe0: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
cbf0: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
cc00: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
cc10: 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65  MASTER.  ** mute
cc20: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
cc30: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
cc40: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
cc50: 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a  n notify.c..  **
cc60: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
cc70: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
cc80: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
cc90: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
cca0: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
ccb0: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
ccc0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
ccd0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
cce0: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
ccf0: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
cd00: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
cd10: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
cd20: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
cd30: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
cd40: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
cd50: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
cd60: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
cd70: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
cd80: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
cd90: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
cda0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
cdb0: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
cdc0: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
cdd0: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
cde0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
cdf0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
ce00: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
ce10: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
ce20: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ce40: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
ce50: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
ce60: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
ce70: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
ce80: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
ce90: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
cea0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
ceb0: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
cec0: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
ced0: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
cee0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
cef0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
cf00: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
cf10: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
cf20: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
cf30: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
cf40: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
cf50: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
cf60: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
cf70: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
cf80: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
cf90: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
cfa0: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
cfb0: 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e  _ENC(db) ((db)->
cfc0: 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[0].pSchema->
cfd0: 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43  enc).#define ENC
cfe0: 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62  (db)        ((db
cff0: 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50  )->enc)../*.** P
d000: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
d010: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66  or the sqlite3.f
d020: 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lags..**.** Valu
d030: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
d040: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
d050: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53  rt()):.**      S
d060: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
d070: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c      == PAGER_FUL
d080: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
d090: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
d0a0: 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50  ync == PAGER_CKP
d0b0: 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  T_FULLFSYNC.**  
d0c0: 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65      SQLITE_Cache
d0d0: 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45  Spill    == PAGE
d0e0: 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f  R_CACHE_SPILL.*/
d0f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d100: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
d110: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
d120: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
d130: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
d140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
d150: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
d160: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
d170: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
d180: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
d190: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
d1a0: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
d1b0: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
d1c0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
d1d0: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
d1e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
d1f0: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
d200: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
d210: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
d220: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
d230: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
d240: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
d250: 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  0010  /* Use ful
d260: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
d270: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
d280: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
d290: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
d2a0: 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  20  /* OK to spi
d2b0: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
d2c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d2d0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
d2e0: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
d2f0: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
d300: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
d310: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
d320: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
d330: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
d340: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
d350: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
d390: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
d3a0: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3d0: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
d3e0: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
d3f0: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
d400: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
d410: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
d420: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
d430: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
d440: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d470: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
d480: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
d490: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
d4a0: 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30  ace       0x0000
d4b0: 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70  0200  /* Debug p
d4c0: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
d4d0: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
d4e0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
d4f0: 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30  sting    0x00000
d500: 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  400  /* Debug li
d510: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
d520: 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69  rograms */.#defi
d530: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
d540: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
d550: 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  800  /* OK to up
d560: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
d570: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
d580: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
d590: 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20 20  ace 0x00001000  
d5a0: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
d5b0: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
d5c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d5d0: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
d5e0: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
d5f0: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
d600: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
d610: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
d620: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
d630: 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20 20  tted 0x0004000  
d640: 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61  /* For shared-ca
d650: 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66  che mode */.#def
d660: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
d670: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
d680: 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20  8000  /* Create 
d690: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
d6a0: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
d6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f  fine SQLITE_Reco
d6c0: 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30  veryMode   0x000
d6d0: 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65  10000  /* Ignore
d6e0: 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a   schema errors *
d6f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d700: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
d710: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52  0x00020000  /* R
d720: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
d730: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
d740: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
d750: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 34  iggers    0x0004
d760: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
d770: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
d780: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
d790: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
d7a0: 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20      0x00080000  
d7b0: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
d7c0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
d7d0: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
d7e0: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
d7f0: 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20       0x00100000 
d800: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
d810: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
d820: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
d830: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
d840: 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65  00200000  /* Pre
d850: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
d860: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
d870: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
d880: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34  Extension  0x004
d890: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
d8a0: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
d8b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d8c0: 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20  E_LoadExtFunc   
d8d0: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
d8e0: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
d8f0: 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63  nsion() SQL func
d900: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d910: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
d920: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
d930: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
d940: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
d950: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
d960: 46 4b 73 20 20 20 20 20 20 20 30 78 30 32 30 30  FKs       0x0200
d970: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
d980: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
d990: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d9a0: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
d9b0: 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20 2f     0x04000000  /
d9c0: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
d9d0: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
d9e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
d9f0: 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30 38  eEQP        0x08
da00: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
da10: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
da20: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
da30: 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20 20 20  QLITE_Vacuum    
da40: 20 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20       0x10000000 
da50: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e   /* Currently in
da60: 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65   a VACUUM */.#de
da70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c  fine SQLITE_Cell
da80: 53 69 7a 65 43 6b 20 20 20 20 20 30 78 32 30 30  SizeCk     0x200
da90: 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20  00000  /* Check 
daa0: 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73  btree cell sizes
dab0: 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66   on load */.#def
dac0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54  ine SQLITE_Fts3T
dad0: 6f 6b 65 6e 69 7a 65 72 20 20 30 78 34 30 30 30  okenizer  0x4000
dae0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
daf0: 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32  fts3_tokenizer(2
db00: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
db10: 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73  ITE_NoCkptOnClos
db20: 65 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f  e  0x80000000  /
db30: 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20  * No checkpoint 
db40: 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43  on close()/DETAC
db50: 48 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  H */.../*.** Bit
db60: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
db70: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
db80: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
db90: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
dba0: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
dbb0: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
dbc0: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
dbd0: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
dbe0: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
dbf0: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
dc00: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
dc10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
dc20: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
dc30: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
dc40: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64  flattening */.#d
dc50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c  efine SQLITE_Col
dc60: 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30  umnCache    0x00
dc70: 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63  02   /* Column c
dc80: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
dc90: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
dca0: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
dcb0: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
dcc0: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
dcd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
dce0: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
dcf0: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
dd00: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a   factoring */./*
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30  not used    0x00
dd30: 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c  10   // Was: SQL
dd40: 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74  ITE_IdxRealAsInt
dd50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd60: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
dd70: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
dd80: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
dd90: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
dda0: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
ddb0: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
ddc0: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
ddd0: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
dde0: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
ddf0: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
de00: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
de10: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
de20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
de30: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
de40: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
de50: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
de60: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
de70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
de80: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
de90: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
dea0: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
deb0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
dec0: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
ded0: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
dee0: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
def0: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
df00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
df10: 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30  at34         0x0
df20: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
df30: 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61  T3 or STAT4 data
df40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
df50: 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20  TE_CursorHints  
df60: 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64    0x2000   /* Ad
df70: 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20  d OP_CursorHint 
df80: 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69  opcodes */.#defi
df90: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
dfa0: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
dfb0: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
dfc0: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
dfd0: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
dfe0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
dff0: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
e000: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
e010: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65  disabled..*/.#de
e020: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
e030: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
e040: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
e050: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
e060: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
e070: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
e080: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
e090: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
e0a0: 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  mask))==0)../*.*
e0b0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
e0c0: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
e0d0: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
e0e0: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
e0f0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
e100: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
e110: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
e120: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
e130: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
e140: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
e150: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
e160: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
e170: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
e180: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
e190: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
e1a0: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
e1b0: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
e1c0: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
e1d0: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
e1e0: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
e1f0: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
e200: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
e210: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
e220: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
e230: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
e240: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
e250: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
e260: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
e270: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
e280: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
e290: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
e2a0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
e2b0: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
e2c0: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
e2d0: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
e2e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e2f0: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
e300: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
e310: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
e320: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
e330: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e340: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
e350: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
e360: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
e370: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
e380: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e390: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
e3a0: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
e3b0: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
e3c0: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
e3d0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
e3e0: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
e3f0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
e400: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
e410: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
e420: 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c   For global buil
e430: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28  t-in functions (
e440: 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61  ex: substr(), ma
e450: 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a  x(), count()).**
e460: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
e470: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
e480: 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69  held in the sqli
e490: 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
e4a0: 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46  ons object..** F
e4b0: 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  or per-connectio
e4c0: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  n application-de
e4d0: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c  fined functions,
e4e0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
e4f0: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
e500: 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64  is held in the d
e510: 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74 61  b->aHash hash ta
e520: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75  ble..**.** The u
e530: 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73 20  .pHash field is 
e540: 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62  used by the glob
e550: 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54  al built-ins.  T
e560: 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72  he u.pDestructor
e570: 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65  .** field is use
e580: 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74  d by per-connect
e590: 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63  ion app-def func
e5a0: 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tions..*/.struct
e5b0: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20   FuncDef {.  i8 
e5c0: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
e5d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
e5e0: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
e5f0: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
e600: 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73  .  u16 funcFlags
e610: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
e620: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
e630: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
e640: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
e650: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
e660: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
e670: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
e680: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
e690: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
e6a0: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
e6b0: 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69  d (*xSFunc)(sqli
e6c0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
e6d0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
e6e0: 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67  ); /* func or ag
e6f0: 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  g-step */.  void
e700: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
e710: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e730: 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a    /* Agg finaliz
e740: 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  er */.  const ch
e750: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20  ar *zName;   /* 
e760: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
e770: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75  function. */.  u
e780: 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44  nion {.    FuncD
e790: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
e7a0: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
e7b0: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
e7c0: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
e7d0: 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72  */.    FuncDestr
e7e0: 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
e7f0: 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e  or;   /* Referen
e800: 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72  ce counted destr
e810: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
e820: 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a  /.  } u;.};../*.
e830: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
e840: 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61  e encapsulates a
e850: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
e860: 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61  estructor callba
e870: 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67  ck (as.** config
e880: 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74  ured using creat
e890: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29  e_function_v2())
e8a0: 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65   and a reference
e8b0: 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a   counter. When.*
e8c0: 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  * create_functio
e8d0: 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64  n_v2() is called
e8e0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e   to create a fun
e8f0: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73  ction with a des
e900: 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69  tructor,.** a si
e910: 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74  ngle object of t
e920: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f  his type is allo
e930: 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72  cated. FuncDestr
e940: 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65  uctor.nRef is se
e950: 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62  t to.** the numb
e960: 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62  er of FuncDef ob
e970: 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65  jects created (e
e980: 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65  ither 1 or 3, de
e990: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
e9a0: 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65  er.** or not the
e9b0: 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64   specified encod
e9c0: 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e  ing is SQLITE_AN
e9d0: 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e  Y). The FuncDef.
e9e0: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d  pDestructor.** m
e9f0: 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66  ember of each of
ea00: 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66   the new FuncDef
ea10: 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20   objects is set 
ea20: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
ea30: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e  allocated.** Fun
ea40: 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a  cDestructor..**.
ea50: 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77  ** Thereafter, w
ea60: 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  hen one of the F
ea70: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
ea80: 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72  s deleted, the r
ea90: 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e  eference.** coun
eaa0: 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  t on this object
eab0: 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e   is decremented.
eac0: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
ead0: 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74   0, the destruct
eae0: 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64  or.** is invoked
eaf0: 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73   and the FuncDes
eb00: 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72  tructor structur
eb10: 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75  e freed..*/.stru
eb20: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
eb30: 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a  r {.  int nRef;.
eb40: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
eb50: 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f  y)(void *);.  vo
eb60: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d  id *pUserData;.}
eb70: 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  ;../*.** Possibl
eb80: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e  e values for Fun
eb90: 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74  cDef.flags.  Not
eba0: 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47  e that the _LENG
ebb0: 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a  TH and _TYPEOF.*
ebc0: 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f  * values must co
ebd0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c  rrespond to OPFL
ebe0: 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
ebf0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
ec00: 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54  G.  And.** SQLIT
ec10: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
ec20: 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
ec30: 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52   as SQLITE_DETER
ec40: 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65  MINISTIC.  There
ec50: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
ec60: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
ec70: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
ec80: 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  y this..**.** Va
ec90: 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
eca0: 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
ecb0: 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
ecc0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
ecd0: 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e  AX    ==  NC_Min
ece0: 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53  MaxAgg      == S
ecf0: 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20  F_MinMaxAgg.**  
ed00: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c     SQLITE_FUNC_L
ed10: 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46  ENGTH    ==  OPF
ed20: 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a  LAG_LENGTHARG.**
ed30: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
ed40: 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f  _TYPEOF    ==  O
ed50: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a  PFLAG_TYPEOFARG.
ed60: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
ed70: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20  NC_CONSTANT  == 
ed80: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
ed90: 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41  ISTIC from the A
eda0: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
edb0: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20  _FUNC_ENCMASK   
edc0: 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54  depends on SQLIT
edd0: 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e  E_UTF* macros in
ede0: 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66   the API.*/.#def
edf0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ee00: 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20  ENCMASK  0x0003 
ee10: 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  /* SQLITE_UTF8, 
ee20: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f  SQLITE_UTF16BE o
ee30: 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65  r UTF16LE */.#de
ee40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ee50: 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34  _LIKE     0x0004
ee60: 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f   /* Candidate fo
ee70: 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d  r the LIKE optim
ee80: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
ee90: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
eea0: 41 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f  ASE     0x0008 /
eeb0: 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65  * Case-sensitive
eec0: 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74   LIKE-type funct
eed0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
eee0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d  QLITE_FUNC_EPHEM
eef0: 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70      0x0010 /* Ep
ef00: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
ef10: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
ef20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ef30: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32  C_NEEDCOLL 0x002
ef40: 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  0 /* sqlite3GetF
ef50: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
ef60: 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23  ht be called*/.#
ef70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ef80: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30  NC_LENGTH   0x00
ef90: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c  40 /* Built-in l
efa0: 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e  ength() function
efb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
efc0: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
efd0: 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74   0x0080 /* Built
efe0: 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e  -in typeof() fun
eff0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
f000: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55   SQLITE_FUNC_COU
f010: 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20  NT    0x0100 /* 
f020: 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a  Built-in count(*
f030: 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23  ) aggregate */.#
f040: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f050: 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32  NC_COALESCE 0x02
f060: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
f070: 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e  oalesce() or ifn
f080: 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ull() */.#define
f090: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c   SQLITE_FUNC_UNL
f0a0: 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20  IKELY 0x0400 /* 
f0b0: 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c  Built-in unlikel
f0c0: 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  y() function */.
f0d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f0e0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30  UNC_CONSTANT 0x0
f0f0: 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  800 /* Constant 
f100: 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f  inputs give a co
f110: 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f  nstant output */
f120: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f130: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78  FUNC_MINMAX   0x
f140: 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  1000 /* True for
f150: 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29   min() and max()
f160: 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23   aggregates */.#
f170: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f180: 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30  NC_SLOCHNG  0x20
f190: 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e  00 /* "Slow Chan
f1a0: 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74  ge". Value const
f1b0: 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20  ant during a.   
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1e0: 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79   ** single query
f1f0: 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20   - might change 
f200: 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65  over time */.#de
f210: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f220: 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30  _AFFINITY 0x4000
f230: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66   /* Built-in aff
f240: 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e  inity() function
f250: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
f260: 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d  ollowing three m
f270: 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28  acros, FUNCTION(
f280: 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e  ), LIKEFUNC() an
f290: 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72  d AGGREGATE() ar
f2a0: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65  e.** used to cre
f2b0: 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ate the initiali
f2c0: 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e  zers for the Fun
f2d0: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e  cDef structures.
f2e0: 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f  .**.**   FUNCTIO
f2f0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
f300: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
f310: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
f320: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
f330: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
f340: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
f350: 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69  n zName.**     i
f360: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20  mplemented by C 
f370: 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74  function xFunc t
f380: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
f390: 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a   arguments. The.
f3a0: 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73  **     value pas
f3b0: 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63  sed as iArg is c
f3c0: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29  ast to a (void*)
f3d0: 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61   and made availa
f3e0: 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68  ble.**     as th
f3f0: 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  e user-data (sql
f400: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
f410: 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  ) for the functi
f420: 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72  on. If.**     ar
f430: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
f440: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
f450: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
f460: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
f470: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
f480: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f490: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
f4a0: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
f4b0: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
f4c0: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
f4d0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
f4e0: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e  ag..**.**   DFUN
f4f0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f500: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f510: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
f520: 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
f530: 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
f540: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f550: 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20  NT flag and.**  
f560: 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49     adds the SQLI
f570: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
f580: 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20  flag.  Used for 
f590: 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63  date & time func
f5a0: 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64  tions.**     and
f5b0: 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20   functions like 
f5c0: 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
f5d0: 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65   that can change
f5e0: 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67  , but not during
f5f0: 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65  .**     a single
f600: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   query..**.**   
f610: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
f620: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
f630: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
f640: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
f650: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
f660: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
f670: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
f680: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
f690: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
f6a0: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
f6b0: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
f6c0: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
f6d0: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
f6e0: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
f6f0: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
f700: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
f710: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
f720: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
f730: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
f740: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
f750: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
f760: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
f770: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
f780: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
f790: 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  me.**     that a
f7a0: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
f7b0: 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
f7c0: 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
f7d0: 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66  ll to C.**     f
f7e0: 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
f7f0: 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
f800: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
f810: 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
f820: 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
f830: 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
f840: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
f850: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
f860: 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
f870: 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
f880: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
f890: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
f8a0: 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
f8b0: 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
f8c0: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
f8d0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f8e0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
f8f0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
f900: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
f910: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
f920: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
f930: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
f940: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
f950: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
f960: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
f970: 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49  .#define VFUNCTI
f980: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
f990: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
f9a0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
f9b0: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
f9c0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
f9d0: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
f9e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
f9f0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
fa00: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
fa10: 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
fa20: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
fa30: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
fa40: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
fa50: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
fa60: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
fa70: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
fa80: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
fa90: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
faa0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
fab0: 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
fac0: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
fad0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
fae0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
faf0: 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
fb00: 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
fb10: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
fb20: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
fb30: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
fb40: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
fb50: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
fb60: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
fb70: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
fb80: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
fb90: 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
fba0: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
fbb0: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
fbc0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
fbd0: 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
fbe0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
fbf0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
fc00: 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
fc10: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
fc20: 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
fc30: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
fc40: 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
fc50: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
fc60: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
fc70: 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
fc80: 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
fc90: 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
fca0: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
fcb0: 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
fcc0: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
fcd0: 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
fce0: 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67  Final) \.  {nArg
fcf0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
fd00: 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
fd10: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
fd20: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
fd30: 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
fd40: 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30  Final,#zName, {0
fd50: 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
fd60: 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
fd70: 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
fd80: 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
fd90: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
fda0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
fdb0: 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
fdc0: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
fdd0: 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
fde0: 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
fdf0: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
fe00: 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f  ,#zName, {0}}../
fe10: 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
fe20: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
fe30: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
fe40: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
fe50: 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
fe60: 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
fe70: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
fe80: 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
fe90: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
fea0: 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
feb0: 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
fec0: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
fed0: 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
fee0: 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
fef0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
ff00: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
ff10: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
ff20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ff30: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
ff40: 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
ff50: 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
ff60: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
ff70: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
ff80: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ff90: 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
ffa0: 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
ffb0: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
ffc0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
ffd0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
ffe0: 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
fff0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
10000 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
10010 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
10020 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
10030 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
10040 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
10050 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
10060 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
10070 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
10080 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
10090 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
100a0 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
100b0 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
100c0 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
100d0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
100e0 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
100f0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
10100 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
10110 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
10120 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
10130 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
10140 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
10150 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
10160 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
10170 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10180 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
10190 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
101a0 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
101b0 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
101c0 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
101d0 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
101e0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
101f0 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
10200 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
10210 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
10220 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
10230 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10240 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
10250 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
10260 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10280 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
10290 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
102a0 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
102b0 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
102c0 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
102d0 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
102e0 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
102f0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54  /.  Table *pEpoT
10300 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
10310 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e           /* Epon
10320 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20  ymous table for 
10330 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d  this module */.}
10340 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
10350 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
10360 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
10370 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
10380 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
10390 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
103a0 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
103b0 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
103c0 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
103d0 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
103e0 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65  , \000, then the
103f0 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20   type */.  Expr 
10400 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
10410 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
10420 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
10430 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20   char *zColl;   
10440 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
10450 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c  equence.  If NUL
10460 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  L, use the defau
10470 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75  lt */.  u8 notNu
10480 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f  ll;      /* An O
10490 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64  E_ code for hand
104a0 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ling a NOT NULL 
104b0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
104c0 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
104d0 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53   /* One of the S
104e0 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61  QLITE_AFF_... va
104f0 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45  lues */.  u8 szE
10500 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  st;        /* Es
10510 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
10520 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f  value in this co
10530 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54  lumn. sizeof(INT
10540 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  )==1 */.  u8 col
10550 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f  Flags;     /* Bo
10560 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
10570 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20  .  See COLFLAG_ 
10580 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f  defines below */
10590 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
105a0 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d  values for Colum
105b0 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23  n.colFlags:.*/.#
105c0 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50  define COLFLAG_P
105d0 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20  RIMKEY  0x0001  
105e0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70    /* Column is p
105f0 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61  art of the prima
10600 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
10610 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  e COLFLAG_HIDDEN
10620 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
10630 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  A hidden column 
10640 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  in a virtual tab
10650 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  le */.#define CO
10660 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30  LFLAG_HASTYPE  0
10670 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65  x0004    /* Type
10680 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f   name follows co
10690 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a  lumn name */../*
106a0 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
106b0 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
106c0 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
106d0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
106e0 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
106f0 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
10700 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
10710 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
10720 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
10730 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
10740 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
10750 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
10760 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
10770 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
10780 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
10790 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
107a0 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
107b0 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
107c0 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
107d0 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
107e0 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
107f0 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
10800 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
10810 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
10820 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
10830 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
10840 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
10850 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10860 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
10870 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10890 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
108a0 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
108b0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
108c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
108d0 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
108e0 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
108f0 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
10900 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
10910 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
10920 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
10930 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
10940 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
10950 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
10960 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
10970 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
10980 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
10990 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
109a0 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
109b0 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
109c0 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
109d0 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
109e0 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
109f0 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
10a00 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
10a10 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
10a20 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
10a30 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
10a40 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
10a50 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
10a60 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
10a70 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
10a80 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
10a90 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
10aa0 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
10ab0 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
10ac0 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
10ad0 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
10ae0 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
10af0 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
10b00 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
10b10 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
10b20 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a   consecutively..
10b30 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
10b40 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
10b50 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
10b60 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
10b70 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
10b80 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
10b90 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
10ba0 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
10bb0 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
10bc0 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
10bd0 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
10be0 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
10bf0 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
10c00 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
10c10 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
10c20 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
10c30 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
10c40 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
10c50 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
10c60 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
10c70 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
10c80 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
10c90 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
10ca0 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
10cb0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
10cc0 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
10cd0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
10ce0 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
10cf0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
10d00 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
10d10 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
10d20 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
10d30 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
10d40 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
10d50 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
10d60 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
10d70 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
10d80 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
10d90 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
10da0 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
10db0 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
10dc0 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lue..*/.#define 
10dd0 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
10de0 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20      0x47../*.** 
10df0 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
10e00 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
10e10 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
10e20 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
10e30 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
10e40 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
10e50 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
10e60 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
10e70 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
10e80 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
10e90 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
10ea0 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
10eb0 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
10ec0 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
10ed0 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
10ee0 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
10ef0 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
10f00 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
10f10 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
10f20 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
10f30 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
10f40 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
10f50 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45  efine SQLITE_KEE
10f60 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20  PNULL     0x08  
10f70 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f  /* Used by vecto
10f80 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64  r == or <> */.#d
10f90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
10fa0 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20  PIFNULL   0x10  
10fb0 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
10fc0 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
10fd0 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
10fe0 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
10ff0 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65    0x20  /* Store
11000 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
11010 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
11020 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
11030 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
11040 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
11050 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
11060 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
11070 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73       0x90  /* As
11080 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
11090 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
110a0 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
110b0 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
110c0 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
110d0 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
110e0 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
110f0 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
11100 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
11110 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
11120 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
11130 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
11140 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
11150 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
11160 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
11170 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
11180 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
11190 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
111a0 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
111b0 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
111c0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
111d0 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
111e0 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
111f0 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
11200 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
11210 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
11220 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
11230 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
11240 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
11250 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
11260 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
11270 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  ween.** database
11280 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
11290 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
112a0 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
112b0 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63  y database.** sc
112c0 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
112d0 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
112e0 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
112f0 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
11300 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
11310 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
11320 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
11330 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
11340 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
11350 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
11360 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
11370 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
11380 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
11390 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
113a0 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
113b0 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
113c0 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
113d0 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77  real tables.** w
113e0 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
113f0 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
11400 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
11410 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a  of the callers.*
11420 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
11430 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
11440 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
11450 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
11460 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
11470 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
11480 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
11490 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
114a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
114b0 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
114c0 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
114d0 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
114e0 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
114f0 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
11500 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
11510 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
11520 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
11530 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
11540 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
11550 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
11560 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
11570 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
11580 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
11590 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
115a0 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
115b0 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
115c0 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
115d0 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
115e0 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
115f0 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
11600 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
11610 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
11620 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
11630 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
11640 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
11650 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
11660 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
11670 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
11680 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
11690 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
116a0 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
116b0 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
116c0 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
116d0 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
116e0 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
116f0 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
11700 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
11710 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64  e not.** deleted
11720 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
11730 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
11740 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
11750 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69  ct()ed.** immedi
11760 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
11770 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
11780 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
11790 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
117a0 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
117b0 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
117c0 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
117d0 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
117e0 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
117f0 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
11800 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
11810 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
11820 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20  Disconnected.** 
11830 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
11840 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
11850 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
11860 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
11870 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
11880 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
11890 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
118a0 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
118b0 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
118c0 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
118d0 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
118e0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
118f0 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
11900 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
11910 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
11920 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
11930 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
11940 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
11950 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
11960 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
11970 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
11980 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
11990 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
119a0 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
119b0 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
119c0 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71  located by.** sq
119d0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
119e0 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
119f0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
11a00 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
11a10 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74   as.** the first
11a20 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
11a30 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
11a40 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
11a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
11a60 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
11a70 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
11a80 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
11a90 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
11aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
11ab0 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
11ac0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
11ad0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
11ae0 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
11af0 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
11b00 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
11b10 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
11b20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11b30 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
11b40 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
11b50 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
11b60 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
11b70 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
11b80 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
11b90 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
11ba0 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
11bb0 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
11bc0 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
11bd0 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
11be0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
11bf0 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
11c00 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
11c10 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
11c20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  ** The schema fo
11c30 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  r each SQL table
11c40 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70   and view is rep
11c50 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
11c60 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ry.** by an inst
11c70 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11c80 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
11c90 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
11ca0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
11cb0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
11cc0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
11cd0 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
11ce0 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
11cf0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
11d00 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
11d10 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
11d20 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
11d30 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
11d40 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
11d50 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
11d60 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
11d70 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
11d80 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
11d90 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
11da0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
11db0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
11dc0 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
11dd0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
11de0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
11df0 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
11e00 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
11e10 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
11e20 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
11e30 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69  lumn */.  ExprLi
11e40 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
11e50 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
11e60 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e80 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20    /*   ... also 
11e90 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e  used as column n
11ea0 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49  ame list in a VI
11eb0 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  EW */.  int tnum
11ec0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11ed0 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  Root BTree page 
11ee0 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a  for this table *
11ef0 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b  /.  u32 nTabRef;
11f00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11f10 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
11f20 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
11f30 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20    u32 tabFlags; 
11f40 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
11f50 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
11f60 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
11f70 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
11f80 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
11f90 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
11fa0 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
11fb0 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
11fc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11fd0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
11fe0 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
11ff0 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
12000 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
12010 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
12020 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
12030 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
12040 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
12050 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
12060 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
12070 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
12080 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12090 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
120a0 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
120b0 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
120c0 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
120d0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
120e0 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f  endif.  u8 keyCo
120f0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
12100 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
12110 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
12120 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
12130 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
12140 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
12150 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
12160 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
12170 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
12180 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
12190 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
121a0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
121b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
121c0 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
121d0 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
121e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
121f0 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
12200 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
12210 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
12220 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
12230 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
12240 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
12250 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
12260 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
12270 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
12280 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
12290 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
122a0 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
122b0 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
122c0 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
122d0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
122e0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
122f0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
12300 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
12310 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
12320 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
12330 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
12340 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
12350 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
12360 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
12370 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
12380 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
12390 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
123a0 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
123b0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
123c0 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
123d0 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
123e0 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
123f0 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
12400 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
12410 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
12420 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
12430 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
12440 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
12450 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
12460 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
12470 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
12480 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
12490 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
124a0 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
124b0 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
124c0 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
124d0 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
124e0 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
124f0 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
12500 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
12510 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
12520 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
12530 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
12540 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
12550 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
12560 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
12570 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
12580 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
12590 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
125a0 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
125b0 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
125c0 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
125d0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
125e0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
125f0 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
12600 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
12610 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
12620 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
12630 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
12640 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
12650 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20  owid    0x0020  
12660 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
12670 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
12680 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
12690 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
126a0 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f  wid  0x0040    /
126b0 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
126c0 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
126d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
126e0 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
126f0 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d  x0080    /* Out-
12700 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
12710 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69  columns */.#defi
12720 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20  ne TF_StatsUsed 
12730 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20        0x0100    
12740 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72  /* Query planner
12750 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63   decisions affec
12760 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20  ted by.         
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49              ** I
12790 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74  ndex.aiRowLogEst
127a0 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65  [] values */.#de
127b0 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75  fine TF_HasNotNu
127c0 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ll      0x0200  
127d0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f    /* Contains NO
127e0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
127f0 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  ts */../*.** Tes
12800 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
12810 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
12820 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
12830 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
12840 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
12850 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
12860 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
12870 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
12880 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
12890 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
128a0 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
128b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
128c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
128d0 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
128e0 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  l(X)      ((X)->
128f0 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73  nModuleArg).#els
12900 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
12910 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
12920 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
12930 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
12940 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e if a column is
12950 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69   hidden.  IsOrdi
12960 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
12970 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ().** only works
12980 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c   for non-virtual
12990 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72   tables (ordinar
129a0 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65  y tables and vie
129b0 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c  ws) and is.** al
129c0 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73  ways false unles
129d0 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  s SQLITE_ENABLE_
129e0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69  HIDDEN_COLUMNS i
129f0 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a  s defined.  The.
12a00 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ** IsHiddenColum
12a10 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e  n() macro is gen
12a20 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f  eral purpose..*/
12a30 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
12a40 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
12a50 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65  N_COLUMNS).#  de
12a60 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
12a70 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
12a80 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
12a90 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
12aa0 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
12ab0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
12ac0 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
12ad0 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
12ae0 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
12af0 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  elif !defined(SQ
12b00 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
12b10 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e  LTABLE).#  defin
12b20 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
12b30 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
12b40 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
12b50 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
12b60 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
12b70 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
12b80 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20  mn(X) 0.#else.# 
12b90 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
12ba0 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
12bb0 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
12bc0 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
12bd0 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
12be0 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  .../* Does the t
12bf0 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
12c00 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
12c10 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
12c20 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
12c30 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
12c40 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
12c50 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
12c60 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
12c70 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
12c80 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
12c90 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
12ca0 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
12cb0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
12cc0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
12cd0 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
12ce0 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
12cf0 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
12d00 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
12d10 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
12d20 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
12d30 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
12d40 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
12d50 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
12d60 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
12d70 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
12d80 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
12d90 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
12da0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
12db0 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
12dc0 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
12dd0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
12de0 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
12df0 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
12e00 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
12e10 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
12e20 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
12e30 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
12e40 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
12e50 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
12e60 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
12e70 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
12e80 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
12e90 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
12ea0 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
12eb0 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
12ec0 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
12ed0 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
12ee0 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
12ef0 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
12f00 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
12f10 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
12f20 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
12f30 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
12f40 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
12f50 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
12f60 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
12f70 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
12f80 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
12f90 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
12fa0 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
12fb0 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
12fc0 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
12fd0 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
12fe0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
12ff0 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
13000 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
13010 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
13020 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
13030 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
13040 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
13050 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
13060 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
13070 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
13080 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
13090 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
130a0 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
130b0 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
130c0 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
130d0 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
130e0 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
130f0 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
13100 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
13110 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
13120 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
13130 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
13140 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
13150 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
13160 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
13170 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
13180 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
13190 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
131a0 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
131b0 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
131c0 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
131d0 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
131e0 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
131f0 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
13200 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
13210 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
13220 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13230 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
13240 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
13250 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
13260 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
13270 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
13280 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
13290 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
132a0 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
132b0 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
132c0 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
132d0 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
132e0 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
132f0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
13300 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
13310 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
13320 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
13330 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
13340 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
13350 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
13360 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
13370 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
13380 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
13390 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
133a0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
133b0 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
133c0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
133d0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
133e0 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
133f0 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
13400 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
13410 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
13420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
13430 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
13440 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
13450 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
13460 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
13470 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
13480 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
13490 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
134a0 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
134b0 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
134c0 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
134d0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
134e0 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
134f0 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
13500 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
13510 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
13520 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
13530 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
13540 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
13550 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
13560 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
13570 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
13580 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
13590 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
135a0 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
135b0 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
135c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
135d0 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
135e0 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
135f0 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
13600 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
13610 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
13620 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
13630 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
13640 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
13650 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
13660 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
13670 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
13680 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
13690 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
136a0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
136b0 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
136c0 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
136d0 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
136e0 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
136f0 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
13700 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
13710 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
13720 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
13730 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
13740 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
13750 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
13760 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
13770 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
13780 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
13790 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
137a0 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
137b0 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
137c0 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
137d0 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
137e0 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
137f0 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
13800 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
13810 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
13820 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
13830 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
13840 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
13850 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
13860 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
13870 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
13880 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
13890 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
138a0 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
138b0 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
138c0 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
138d0 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
138e0 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
138f0 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
13900 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
13910 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
13920 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
13930 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
13940 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
13950 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
13960 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ey..**.** The fo
13970 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
13980 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
13990 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
139a0 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
139b0 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
139c0 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
139d0 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
139e0 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
139f0 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
13a00 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
13a10 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
13a20 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
13a30 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
13a40 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
13a50 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
13a60 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
13a70 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
13a80 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
13a90 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
13aa0 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
13ab0 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
13ac0 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
13ad0 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
13ae0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
13af0 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
13b00 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
13b10 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
13b20 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
13b30 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
13b40 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
13b50 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
13b60 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
13b70 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
13b80 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
13b90 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20  Restrict 6   /* 
13ba0 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
13bb0 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
13bc0 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
13bd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
13be0 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53  etNull  7   /* S
13bf0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
13c00 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
13c10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
13c20 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53  etDflt  8   /* S
13c30 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
13c40 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
13c50 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
13c60 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39  ne OE_Cascade  9
13c70 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68     /* Cascade th
13c80 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64  e changes */..#d
13c90 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
13ca0 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74    10  /* Do what
13cb0 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
13cc0 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
13cd0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
13ce0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
13cf0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
13d00 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
13d10 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
13d20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
13d30 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
13d40 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
13d50 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
13d60 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
13d70 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
13d80 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
13d90 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
13da0 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
13db0 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
13dc0 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
13dd0 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
13de0 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
13df0 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
13e00 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
13e10 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
13e20 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
13e30 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
13e40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13e50 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
13e60 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
13e70 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
13e80 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
13e90 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
13ea0 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
13eb0 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
13ec0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
13ed0 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
13ee0 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
13ef0 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
13f00 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c   */.  u16 nXFiel
13f10 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  d;        /* Num
13f20 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62  ber of columns b
13f30 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f  eyond the key co
13f40 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74  lumns */.  sqlit
13f50 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
13f60 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
13f70 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
13f80 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
13f90 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
13fa0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
13fb0 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
13fc0 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
13fd0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
13fe0 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
13ff0 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
14000 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
14010 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
14020 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
14030 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
14040 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
14050 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
14060 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
14070 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
14080 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
14090 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
140a0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
140b0 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
140c0 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
140d0 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
140e0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
140f0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
14100 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
14110 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
14120 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
14130 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
14140 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
14150 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
14160 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
14170 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
14180 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
14190 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
141a0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
141b0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
141c0 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
141d0 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
141e0 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
141f0 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
14200 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
14210 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
14220 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
14230 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
14240 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
14250 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
14260 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
14270 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
14280 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
14290 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
142a0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
142b0 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
142c0 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
142d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
142e0 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
142f0 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
14300 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
14310 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
14320 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
14330 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
14340 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
14350 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
14360 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
14370 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
14380 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
14390 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
143a0 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
143b0 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
143c0 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
143d0 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
143e0 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
143f0 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
14400 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
14410 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
14420 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
14430 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
14440 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
14450 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
14460 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
14470 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
14480 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
14490 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
144a0 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
144b0 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
144c0 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
144d0 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
144e0 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
144f0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
14500 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
14510 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
14520 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
14530 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
14540 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
14550 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
14560 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
14570 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
14580 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
14590 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
145a0 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
145b0 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
145c0 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
145d0 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
145e0 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
145f0 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
14600 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
14610 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
14620 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
14630 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
14640 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
14650 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
14660 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
14670 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
14680 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
14690 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
146a0 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
146b0 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
146c0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
146d0 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
146e0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
146f0 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
14700 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
14710 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
14720 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
14730 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
14740 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
14750 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14760 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
14770 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
14780 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
14790 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
147a0 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
147b0 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
147c0 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
147d0 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
147e0 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
147f0 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
14800 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
14810 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
14820 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
14830 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
14840 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
14850 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
14860 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
14870 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f  f (rhs < lhs) */
14880 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
14890 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
148a0 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
148b0 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
148c0 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
148d0 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
148e0 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
148f0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
14900 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
14910 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14920 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
14930 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
14940 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
14950 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
14960 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
14970 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
14980 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
14990 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
149a0 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
149b0 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
149c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
149d0 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
149e0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
149f0 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
14a00 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
14a10 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
14a20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
14a30 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
14a40 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
14a50 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
14a60 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
14a70 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
14a80 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
14a90 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
14aa0 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
14ab0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
14ac0 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
14ad0 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
14ae0 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
14af0 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
14b00 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
14b10 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
14b20 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
14b30 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
14b40 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
14b50 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
14b60 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
14b70 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
14b80 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
14b90 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
14ba0 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
14bb0 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
14bc0 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
14bd0 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
14be0 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
14bf0 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
14c00 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
14c10 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
14c20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
14c30 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
14c40 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
14c50 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
14c60 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
14c70 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
14c80 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
14c90 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
14ca0 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
14cb0 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
14cc0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
14cd0 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
14ce0 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
14cf0 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
14d00 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
14d10 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
14d20 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
14d30 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
14d40 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
14d50 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
14d60 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
14d70 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
14d80 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
14d90 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
14da0 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
14db0 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
14dc0 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
14dd0 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
14de0 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
14df0 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
14e00 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
14e10 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
14e20 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
14e30 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
14e40 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
14e50 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
14e60 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
14e70 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
14e80 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
14e90 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
14ea0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
14eb0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
14ec0 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
14ed0 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
14ee0 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
14ef0 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
14f00 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
14f10 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
14f20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
14f30 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
14f40 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
14f50 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
14f60 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
14f70 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
14f80 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
14f90 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
14fa0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
14fb0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
14fc0 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
14fd0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
14fe0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
14ff0 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
15000 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
15010 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
15020 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
15030 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
15040 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
15050 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
15060 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
15070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15080 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
15090 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
150a0 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
150b0 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
150c0 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
150d0 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
150e0 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
150f0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
15100 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
15110 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
15120 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
15130 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
15140 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
15150 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
15160 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
15170 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
15180 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
15190 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
151a0 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
151b0 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
151c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
151d0 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
151e0 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
151f0 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
15200 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
15210 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
15220 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
15230 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
15240 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
15250 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
15260 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
15270 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
15280 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
15290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
152a0 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
152b0 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
152c0 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
152d0 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
152e0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
152f0 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
15300 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
15310 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
15320 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15330 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
15340 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
15350 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
15360 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15370 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15380 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
15390 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
153a0 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
153b0 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
153c0 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
153d0 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
153e0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
153f0 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
15400 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
15410 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
15420 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
15430 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
15440 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
15450 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
15460 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
15470 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
15480 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
15490 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
154a0 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
154b0 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
154c0 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
154d0 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
154e0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
154f0 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
15500 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
15510 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
15520 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
15530 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
15540 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
15550 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
15560 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
15570 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
15580 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
15590 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
155a0 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
155b0 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
155c0 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
155d0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
155e0 74 31 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  t1 */.#ifdef SQL
155f0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
15600 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
15610 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
15620 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15630 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
15640 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
15650 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
15660 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
15670 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
15680 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
15690 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
156a0 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
156b0 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
156c0 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
156d0 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
156e0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
156f0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
15700 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
15710 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f  ost key */.  tRo
15720 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20  wcnt *aiRowEst; 
15730 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
15740 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64  arithmic stat1 d
15750 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ata for this ind
15760 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ex */.  tRowcnt 
15770 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20  nRowEst0;       
15780 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
15790 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mic number of ro
157a0 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
157b0 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
157c0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
157d0 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
157e0 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
157f0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
15800 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
15810 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
15820 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
15830 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
15840 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
15850 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
15860 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
15870 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
15880 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
15890 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
158a0 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
158b0 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
158c0 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
158d0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
158e0 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
158f0 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
15900 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
15910 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
15920 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
15930 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
15940 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
15950 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
15960 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
15970 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
15980 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
15990 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
159a0 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
159b0 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c   The Index.aiCol
159c0 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65  umn[] values are
159d0 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69   normally positi
159e0 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  ve integer.  But
159f0 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f  .** there are so
15a00 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  me negative valu
15a10 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65  es that have spe
15a20 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f  cial meaning:.*/
15a30 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49  .#define XN_ROWI
15a40 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f  D     (-1)     /
15a50 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
15a60 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   is the rowid */
15a70 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52  .#define XN_EXPR
15a80 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f        (-2)     /
15a90 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
15aa0 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
15ab0 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  n */../*.** Each
15ac0 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
15ad0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
15ae0 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
15af0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
15b00 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72  y.** using a str
15b10 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
15b20 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
15b30 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
15b40 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
15b50 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
15b60 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
15b70 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
15b80 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
15b90 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
15ba0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
15bb0 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
15bc0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
15bd0 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
15be0 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
15bf0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
15c00 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
15c10 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
15c20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
15c30 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
15c40 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
15c50 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
15c60 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
15c70 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
15c80 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
15c90 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
15ca0 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
15cb0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
15cc0 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
15cd0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
15ce0 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
15cf0 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
15d00 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
15d10 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
15d20 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
15d30 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
15d40 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
15d50 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
15d60 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
15d70 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
15d80 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
15d90 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
15da0 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
15db0 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
15dc0 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
15dd0 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
15de0 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
15df0 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
15e00 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
15e10 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
15e20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
15e30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
15e40 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
15e50 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
15e60 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
15e70 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
15e80 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
15e90 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
15ea0 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
15eb0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
15ec0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
15ed0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
15ee0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
15ef0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
15f00 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
15f10 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
15f20 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
15f30 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
15f40 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
15f50 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
15f60 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
15f70 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
15f80 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
15f90 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
15fa0 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
15fb0 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
15fc0 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
15fd0 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
15fe0 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
15ff0 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
16000 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
16010 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
16020 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
16030 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
16040 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
16050 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
16060 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
16070 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
16080 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
16090 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
160a0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
160b0 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
160c0 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
160d0 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
160e0 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
160f0 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
16100 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
16110 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
16120 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
16130 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
16140 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
16150 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
16160 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
16190 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
161a0 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
161b0 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
161c0 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
161d0 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
161e0 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
161f0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
16200 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
16230 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
16240 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
16250 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
16260 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
16270 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
16280 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
16290 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
162a0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
162b0 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
162c0 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
162d0 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
162e0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
162f0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
16300 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
16310 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
16320 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
16330 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
16340 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
16350 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
16360 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
16370 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
16380 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
16390 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
163a0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
163b0 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
163c0 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
163d0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
163e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
163f0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
16400 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
16410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
16420 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16430 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
16440 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
16450 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
16460 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
16470 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
16480 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
16490 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
164a0 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
164b0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
164c0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
164d0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
16500 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
16510 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
16520 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
16530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
16540 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
16550 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
16560 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
16570 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
16580 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
16590 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
165a0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
165b0 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
165c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
165d0 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
165e0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
165f0 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
16620 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
16630 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
16640 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
16660 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
16670 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
16680 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
16690 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
166a0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
166b0 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
166c0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
166d0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
166e0 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
166f0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
16700 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
16710 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
16720 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
16730 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
16740 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16760 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
16770 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
16780 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
16790 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
167a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
167b0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
167c0 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
167d0 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
167e0 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
167f0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
16800 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
16810 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
16820 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
16830 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
16840 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
16850 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
16860 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
16870 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
16880 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
16890 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
168a0 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
168b0 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
168c0 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
168d0 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
168e0 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
168f0 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
16900 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
16910 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
16920 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
16930 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
16940 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
16950 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
16960 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
16970 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
16980 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
16990 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
169a0 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
169b0 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
169c0 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
169d0 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
169e0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
169f0 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
16a00 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
16a10 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
16a20 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
16a30 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
16a40 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
16a50 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
16a60 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
16a70 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
16a80 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
16a90 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
16aa0 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
16ab0 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
16ac0 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
16ad0 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
16ae0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
16af0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
16b00 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
16b10 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
16b20 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
16b30 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
16b40 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
16b50 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
16b60 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
16b70 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
16b80 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
16b90 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
16ba0 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
16bb0 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
16bc0 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
16bd0 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
16be0 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
16bf0 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
16c00 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
16c10 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
16c20 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
16c30 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
16c40 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
16c50 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
16c60 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
16c70 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
16c80 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
16c90 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
16ca0 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
16cb0 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
16cc0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
16cd0 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
16ce0 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
16cf0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
16d00 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61  ins the.** varia
16d10 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
16d20 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
16d30 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
16d40 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
16d50 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
16d60 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
16d70 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
16d80 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
16d90 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
16da0 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
16db0 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
16dc0 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
16dd0 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
16de0 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
16df0 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
16e00 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
16e10 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
16e20 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
16e30 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
16e40 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
16e50 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
16e60 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
16e70 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
16e80 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
16e90 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
16ea0 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
16eb0 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
16ec0 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
16ed0 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
16ee0 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
16ef0 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
16f00 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
16f10 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
16f20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
16f30 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
16f40 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
16f50 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
16f60 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
16f70 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
16f80 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a  Expr.x.pList is.
16f90 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
16fa0 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
16fb0 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
16fc0 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
16fd0 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
16fe0 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
16ff0 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
17000 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
17010 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
17020 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
17030 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
17040 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
17050 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
17060 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
17070 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
17080 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
17090 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
170a0 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
170b0 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
170c0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
170d0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
170e0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
170f0 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
17100 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
17110 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
17120 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
17130 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
17140 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
17150 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
17160 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
17170 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
17180 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
17190 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
171a0 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
171b0 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
171c0 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61  on mark.** chara
171d0 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
171e0 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
171f0 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
17200 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
17210 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  ex.** number for
17220 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
17230 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
17240 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
17250 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
17260 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
17270 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
17280 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
17290 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
172a0 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
172b0 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
172c0 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
172d0 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
172e0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
172f0 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
17300 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
17310 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
17320 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
17330 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
17340 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
17350 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
17360 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
17370 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
17380 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
17390 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
173a0 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
173b0 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
173c0 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
173d0 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
173e0 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
173f0 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
17400 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
17410 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
17420 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
17430 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
17440 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
17450 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
17460 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
17470 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
17480 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
17490 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
174a0 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
174b0 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
174c0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
174d0 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
174e0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
174f0 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
17500 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
17510 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
17520 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
17530 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
17540 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
17550 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
17560 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
17570 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
17580 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
17590 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
175a0 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
175b0 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
175c0 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
175d0 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
175e0 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
175f0 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
17600 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
17610 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
17620 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
17630 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
17640 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
17650 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
17660 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
17670 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
17680 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
17690 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
176a0 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
176b0 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
176c0 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
176d0 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
176e0 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
176f0 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
17700 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
17710 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
17720 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
17730 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
17740 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
17750 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
17760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
17770 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
17780 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
17790 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
177a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
177b0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
177c0 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
177d0 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
177e0 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
177f0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
17800 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
17810 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
17820 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
17830 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
17840 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
17850 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
17860 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
17870 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
17880 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
17890 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
178a0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
178b0 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
178c0 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
178d0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
178e0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
178f0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
17900 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
17910 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
17920 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
17930 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
17940 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
17950 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
17960 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
17970 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
17980 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
17990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179d0 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
179e0 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
179f0 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
17a00 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
17a10 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
17a20 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
17a30 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
17a40 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
17a50 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
17a60 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
17a70 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
17a80 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
17a90 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
17aa0 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
17ab0 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
17ac0 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
17ad0 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
17ae0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
17af0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
17b00 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
17b10 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
17b20 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
17b30 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
17b40 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
17b50 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
17b60 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
17b70 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
17b80 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
17b90 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
17ba0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
17bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17be0 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
17bf0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
17c00 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
17c10 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
17c20 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
17c30 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
17c40 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
17c50 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
17c60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
17c70 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
17c80 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
17c90 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
17cc0 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
17cd0 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
17d00 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
17d10 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
17d20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
17d30 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
17d40 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
17d50 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20  elihood.        
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31   ** TK_SELECT: 1
17d80 73 74 20 72 65 67 69 73 74 65 72 20 6f 66 20 72  st register of r
17d90 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a  esult vector */.
17da0 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
17db0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
17dc0 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
17dd0 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
17de0 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17e00 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
17e10 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
17e20 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20  ways >= 1)..    
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
17e50 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  T_COLUMN: column
17e60 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76   of the result v
17e70 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69  ector */.  i16 i
17e80 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
17e90 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
17ea0 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
17eb0 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
17ec0 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
17ed0 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
17ee0 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
17ef0 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
17f00 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
17f10 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
17f20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
17f30 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
17f40 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
17f50 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
17f60 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
17f70 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
17f80 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
17f90 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fb0 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
17fc0 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
17fd0 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
17fe0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
17ff0 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
18000 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
18010 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
18020 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
18030 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
18040 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
18050 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d  xpressions. */.}
18060 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
18070 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
18080 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
18090 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
180a0 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
180b0 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
180c0 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
180d0 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53  ginates in ON/US
180e0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75  ING clause of ou
180f0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
18100 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
18110 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e   0x000002 /* Con
18120 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
18130 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
18140 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
18150 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78   EP_Resolved  0x
18160 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61  000004 /* IDs ha
18170 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
18180 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23   to COLUMNs */.#
18190 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20  define EP_Error 
181a0 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20      0x000008 /* 
181b0 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61  Expression conta
181c0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
181d0 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
181e0 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
181f0 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65  x000010 /* Aggre
18200 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
18210 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
18220 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
18230 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
18240 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
18250 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
18260 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
18270 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
18280 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
18290 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
182a0 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
182b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
182c0 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
182d0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
182e0 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
182f0 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
18300 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
18310 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
18320 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
18330 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
18340 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
18350 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20  ne EP_Generic   
18360 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f  0x000200 /* Igno
18370 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66  re COLLATE or af
18380 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74  finity on this t
18390 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ree */.#define E
183a0 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
183b0 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
183c0 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
183d0 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
183e0 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
183f0 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
18400 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
18410 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
18420 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
18430 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
18440 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
18450 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
18460 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
18470 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
18480 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
18490 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
184a0 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
184b0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
184c0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
184d0 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
184e0 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
184f0 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
18500 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
18510 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30  tatic    0x00800
18520 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
18530 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
18540 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
18550 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
18560 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
18570 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
18580 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
18590 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
185a0 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
185b0 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
185c0 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
185d0 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
185e0 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
185f0 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
18600 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
18610 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
18620 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
18630 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30  _ConstFunc 0x080
18640 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f  000 /* A SQLITE_
18650 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72  FUNC_CONSTANT or
18660 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69   _SLOCHNG functi
18670 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
18680 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30  _CanBeNull 0x100
18690 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75  000 /* Can be nu
186a0 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e  ll despite NOT N
186b0 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
186c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
186d0 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20  query  0x200000 
186e0 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
186f0 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65   a TK_SELECT ope
18700 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
18710 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78   EP_Alias     0x
18720 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20  400000 /* Is an 
18730 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75  alias for a resu
18740 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f  lt set column */
18750 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66  .#define EP_Leaf
18760 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f        0x800000 /
18770 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70  * Expr.pLeft, .p
18780 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63  Right, .u.pSelec
18790 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  t all NULL */../
187a0 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
187b0 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
187c0 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
187d0 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
187e0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
187f0 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
18800 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
18810 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
18820 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
18830 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
18840 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
18850 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
18860 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
18870 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
18880 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
18890 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
188a0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
188b0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
188c0 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
188d0 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
188e0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
188f0 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
18900 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
18910 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
18920 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
18930 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
18940 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
18950 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
18960 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
18970 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
18980 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
18990 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
189a0 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
189b0 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
189c0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
189d0 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
189e0 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
189f0 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
18a00 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
18a10 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
18a20 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
18a30 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
18a40 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
18a50 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
18a60 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
18a70 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
18a80 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
18a90 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
18aa0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
18ab0 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
18ac0 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63  al Expr.** struc
18ad0 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
18ae0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
18af0 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
18b00 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20  n Expr.flags.** 
18b10 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
18b20 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
18b30 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
18b40 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
18b50 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
18b60 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
18b70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
18b80 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
18b90 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
18ba0 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
18bb0 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
18bc0 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
18bd0 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
18be0 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
18bf0 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
18c00 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
18c10 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
18c20 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
18c30 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
18c40 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
18c50 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
18c60 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
18c70 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  nt.** above sqli
18c80 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
18c90 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
18ca0 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
18cb0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
18cc0 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
18cd0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
18ce0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
18cf0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
18d00 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
18d10 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
18d20 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
18d30 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
18d40 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
18d50 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
18d60 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
18d70 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
18d80 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
18d90 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
18da0 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
18db0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
18dc0 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
18dd0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
18de0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
18df0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
18e00 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
18e10 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
18e20 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
18e30 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
18e40 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
18e50 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
18e60 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
18e70 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
18e80 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
18e90 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
18ea0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
18eb0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
18ec0 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
18ed0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
18ee0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
18ef0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
18f00 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
18f10 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
18f20 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
18f30 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
18f40 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
18f50 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
18f60 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
18f70 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
18f80 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
18f90 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
18fa0 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
18fb0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
18fc0 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
18fd0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
18fe0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
18ff0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
19000 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
19010 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
19020 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
19030 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
19040 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
19050 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
19060 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
19070 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19080 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
19090 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
190a0 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20    int nAlloc;   
190b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
190c0 65 72 20 6f 66 20 61 5b 5d 20 73 6c 6f 74 73 20  er of a[] slots 
190d0 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 73  allocated */.  s
190e0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
190f0 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
19100 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
19110 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
19120 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
19130 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
19140 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
19150 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
19160 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
19170 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19180 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
19190 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
191a0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
191b0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
191c0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
191d0 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
191e0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
191f0 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
19200 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
19210 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
19220 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
19230 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
19240 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
19250 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
19260 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
19270 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
19280 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
19290 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
192a0 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
192b0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
192c0 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
192d0 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
192e0 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
192f0 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  le */.    union 
19300 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
19310 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
19320 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
19330 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
19340 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
19350 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
19360 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
19370 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
19380 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
19390 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
193a0 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
193b0 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
193c0 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
193d0 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
193e0 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
193f0 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
19400 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19420 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
19430 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
19440 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
19450 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
19460 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
19470 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
19480 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
19490 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
194a0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
194b0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
194c0 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
194d0 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
194e0 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
194f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
19500 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
19510 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
19520 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
19530 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
19540 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
19550 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
19560 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
19570 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
19580 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
19590 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
195a0 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
195b0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
195c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
195d0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
195e0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
195f0 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
19600 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
19610 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
19620 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
19630 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
19640 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
19650 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19660 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
19670 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
19680 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
19690 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
196a0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
196b0 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
196c0 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
196d0 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
196e0 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
196f0 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
19700 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
19710 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
19720 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
19730 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
19740 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
19750 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
19760 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
19770 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
19780 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
19790 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
197a0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
197b0 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
197c0 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
197d0 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
197e0 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
197f0 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
19800 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
19810 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
19820 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
19830 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
19840 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
19850 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
19860 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
19870 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
19880 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
19890 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
198a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
198b0 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
198c0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
198d0 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
198e0 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
198f0 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
19900 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
19910 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
19920 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
19930 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
19940 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
19950 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
19960 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
19970 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
19980 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
19990 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
199a0 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
199b0 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
199c0 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
199d0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
199e0 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
199f0 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
19a00 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
19a10 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
19a20 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
19a30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
19a40 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
19a50 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
19a60 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
19a70 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
19a80 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
19a90 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
19aa0 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
19ab0 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
19ac0 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
19ad0 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
19ae0 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
19af0 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
19b00 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
19b10 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
19b20 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
19b30 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
19b40 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
19b50 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
19b60 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
19b70 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
19b80 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
19b90 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
19ba0 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
19bb0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
19bc0 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
19bd0 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
19be0 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
19bf0 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
19c00 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
19c10 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
19c20 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
19c30 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
19c40 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
19c50 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
19c60 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
19c70 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
19c80 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
19c90 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
19ca0 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
19cb0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
19cc0 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
19cd0 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
19ce0 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
19cf0 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
19d00 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
19d10 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
19d20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
19d30 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
19d40 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
19d50 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
19d60 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
19d70 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
19d80 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
19d90 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
19da0 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
19db0 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
19dc0 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
19dd0 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
19de0 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
19df0 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
19e00 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
19e10 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
19e20 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
19e30 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
19e40 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
19e50 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
19e60 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
19e70 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
19e80 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
19e90 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
19ea0 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
19eb0 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
19ec0 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
19ed0 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
19ee0 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
19ef0 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
19f00 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
19f10 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
19f20 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
19f30 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
19f40 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
19f50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
19f60 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
19f70 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
19f80 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
19f90 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
19fa0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
19fb0 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
19fc0 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
19fd0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
19fe0 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
19ff0 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
1a000 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
1a010 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
1a020 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
1a030 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
1a040 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1a050 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
1a060 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1a070 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1a080 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
1a090 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
1a0a0 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
1a0b0 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
1a0c0 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
1a0d0 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
1a0e0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
1a0f0 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
1a100 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
1a110 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
1a120 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1a130 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
1a140 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
1a150 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
1a160 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
1a170 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
1a180 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
1a190 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
1a1a0 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
1a1b0 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
1a1c0 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
1a1d0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1a1e0 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
1a1f0 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
1a200 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
1a210 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
1a220 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
1a230 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
1a240 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
1a250 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
1a260 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
1a270 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
1a280 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20  ween this table 
1a290 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
1a2a0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a2b0 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
1a2c0 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
1a2d0 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
1a2e0 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
1a2f0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1a300 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20  isIndexedBy :1; 
1a310 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1a320 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44  re is an INDEXED
1a330 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1a340 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54      unsigned isT
1a350 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f  abFunc :1;     /
1a360 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d  * True if table-
1a370 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1a380 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20  syntax */.      
1a390 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
1a3a0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
1a3b0 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
1a3c0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
1a3d0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1a3e0 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
1a3f0 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
1a400 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
1a410 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a420 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
1a430 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
1a440 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
1a450 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
1a460 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65      } fg;.#ifnde
1a470 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1a480 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
1a490 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
1a4a0 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
1a4b0 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
1a4c0 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
1a4d0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
1a4e0 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
1a4f0 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
1a500 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
1a510 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
1a520 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
1a530 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
1a540 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
1a550 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
1a560 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
1a570 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
1a580 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
1a590 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
1a5a0 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
1a5b0 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
1a5c0 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
1a5d0 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69   used */.    uni
1a5e0 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  on {.      char 
1a5f0 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20  *zIndexedBy;    
1a600 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
1a610 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
1a620 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
1a630 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73  */.      ExprLis
1a640 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a  t *pFuncArg;  /*
1a650 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61   Arguments to ta
1a660 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
1a670 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b  ion */.    } u1;
1a680 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49  .    Index *pIBI
1a690 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20  ndex;  /* Index 
1a6a0 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
1a6b0 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49  ponding to u1.zI
1a6c0 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20  ndexedBy */.  } 
1a6d0 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
1a6e0 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
1a6f0 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
1a700 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
1a710 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
1a720 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
1a730 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
1a740 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
1a750 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
1a760 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
1a770 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
1a780 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
1a790 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1a7a0 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
1a7b0 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
1a7c0 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
1a7d0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1a7e0 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
1a7f0 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
1a800 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
1a810 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
1a820 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
1a830 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
1a840 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1a850 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
1a860 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
1a870 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
1a880 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1a890 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
1a8a0 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
1a8b0 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
1a8c0 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
1a8d0 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
1a8e0 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
1a8f0 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
1a900 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
1a910 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
1a920 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
1a930 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
1a940 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
1a950 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
1a960 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
1a970 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
1a980 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  mber..**.** Valu
1a990 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
1a9a0 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
1a9b0 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48  rt()):.**     WH
1a9c0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d  ERE_USE_LIMIT  =
1a9d0 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a  = SF_FixedLimit.
1a9e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a9f0 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
1aa00 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
1aa10 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
1aa20 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
1aa30 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
1aa40 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
1aa50 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
1aa60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1aa70 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
1aa80 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
1aa90 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1aaa0 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
1aab0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1aac0 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
1aad0 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
1aae0 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
1aaf0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
1ab00 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1ab10 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20  NEPASS_MULTIROW 
1ab20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53  0x0008 /* ONEPAS
1ab30 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c  S is ok with mul
1ab40 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
1ab50 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
1ab60 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
1ab70 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  010 /* Ok to ret
1ab80 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
1ab90 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
1aba0 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42  ine WHERE_OR_SUB
1abb0 43 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32  CLAUSE     0x002
1abc0 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  0 /* Processing 
1abd0 61 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70  a sub-WHERE as p
1abe0 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20  art of.         
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
1ac10 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74  the OR optimizat
1ac20 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ion  */.#define 
1ac30 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
1ac40 20 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a         0x0040 /*
1ac50 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
1ac60 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
1ac70 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ac80 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
1ac90 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65   0x0080 /* pOrde
1aca0 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
1acb0 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
1acc0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1acd0 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
1ace0 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20    0x0100 /* All 
1acf0 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
1ad00 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
1ad10 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
1ad20 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
1ad30 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0200 /* Support 
1ad40 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
1ad50 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
1ad60 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42  e WHERE_SEEK_TAB
1ad70 4c 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20  LE       0x0400 
1ad80 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20  /* Do not defer 
1ad90 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61  seeks on main ta
1ada0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ble */.#define W
1adb0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d  HERE_ORDERBY_LIM
1adc0 49 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20  IT    0x0800 /* 
1add0 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e  ORDERBY+LIMIT on
1ade0 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20   the inner loop 
1adf0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ae00 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45  _SEEK_UNIQ_TABLE
1ae10 20 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e    0x1000 /* Do n
1ae20 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69  ot defer seeks i
1ae30 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20  f unique */.    
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30      /*     0x200
1ae60 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1ae70 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ly used */.#defi
1ae80 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  ne WHERE_USE_LIM
1ae90 49 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30  IT        0x4000
1aea0 20 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49   /* Use the LIMI
1aeb0 54 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61  T in cost estima
1aec0 74 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  tes */.         
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1aee0 2a 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20  *     0x8000    
1aef0 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1af00 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  ed */../* Allowe
1af10 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
1af20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72  from sqlite3Wher
1af30 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f  eIsDistinct().*/
1af40 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1af50 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20  ISTINCT_NOOP    
1af60 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54    0  /* DISTINCT
1af70 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65   keyword not use
1af80 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1af90 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51  RE_DISTINCT_UNIQ
1afa0 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64  UE    1  /* No d
1afb0 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65  uplicates */.#de
1afc0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1afd0 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20  NCT_ORDERED   2 
1afe0 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74   /* All duplicat
1aff0 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20  es are adjacent 
1b000 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b010 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45  _DISTINCT_UNORDE
1b020 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63  RED 3  /* Duplic
1b030 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72  ates are scatter
1b040 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  ed */../*.** A N
1b050 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
1b060 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
1b070 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
1b080 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
1b090 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
1b0a0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
1b0b0 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
1b0c0 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
1b0d0 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
1b0e0 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
1b0f0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
1b100 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
1b110 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
1b120 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
1b130 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
1b140 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
1b150 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
1b160 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
1b170 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
1b180 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
1b190 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
1b1a0 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
1b1b0 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
1b1c0 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
1b1d0 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
1b1e0 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
1b1f0 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
1b200 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
1b210 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
1b220 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
1b230 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
1b240 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a   the inner-most.
1b250 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
1b260 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
1b270 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
1b280 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
1b290 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
1b2a0 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
1b2b0 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
1b2c0 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
1b2d0 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
1b2e0 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
1b2f0 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
1b300 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
1b310 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
1b320 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
1b330 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
1b340 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
1b350 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
1b360 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
1b370 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
1b380 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
1b390 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
1b3a0 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
1b3b0 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
1b3c0 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
1b3d0 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
1b3e0 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
1b3f0 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
1b400 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
1b410 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
1b420 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
1b430 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
1b440 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
1b450 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
1b460 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
1b470 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
1b480 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
1b490 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
1b4a0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
1b4b0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1b4c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1b4d0 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
1b4e0 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
1b4f0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
1b500 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
1b510 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
1b520 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
1b530 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1b540 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
1b550 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
1b560 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
1b570 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
1b580 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
1b590 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
1b5a0 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
1b5b0 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1b5c0 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1b5d0 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1b5e0 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1b5f0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1b600 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b610 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1b620 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1b630 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1b640 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1b650 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1b660 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1b670 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1b680 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
1b690 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1b6a0 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1b6b0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1b6c0 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
1b6d0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1b6e0 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
1b6f0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
1b700 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  ield..**.** Valu
1b710 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1b720 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1b730 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1b740 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  NC_HasAgg    == 
1b750 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  SF_HasAgg.**    
1b760 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1b770 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1b780 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1b790 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  AX.**.*/.#define
1b7a0 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1b7b0 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1b7c0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1b7d0 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1b7e0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
1b7f0 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a  Idx   0x0002  /*
1b800 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1b810 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
1b820 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
1b830 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
1b840 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
1b850 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
1b860 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
1b870 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
1b880 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
1b890 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
1b8a0 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
1b8b0 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
1b8c0 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
1b8d0 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
1b8e0 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f  0x0010  /* One o
1b8f0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1b900 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
1b910 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1b920 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1b930 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1b940 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1b950 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1b960 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65  #define NC_VarSe
1b970 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20  lect 0x0040  /* 
1b980 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  A correlated sub
1b990 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73  query has been s
1b9a0 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1b9b0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30  C_MinMaxAgg 0x10
1b9c0 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61  00  /* min/max a
1b9d0 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20  ggregates seen. 
1b9e0 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20   See note above 
1b9f0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1ba00 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1ba10 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1ba20 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
1ba30 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
1ba40 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
1ba50 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
1ba60 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1ba70 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74  nt..**.** nLimit
1ba80 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66   is set to -1 if
1ba90 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
1baa0 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66  IT clause.  nOff
1bab0 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e  set is set to 0.
1bac0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
1bad0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
1bae0 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20  the parser sets 
1baf0 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61  nLimit to the va
1bb00 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  lue of the.** li
1bb10 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
1bb20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
1bb30 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30  the offset (or 0
1bb40 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74   if there is not
1bb50 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75  .** offset).  Bu
1bb60 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d  t later on, nLim
1bb70 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62  it and nOffset b
1bb80 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79  ecome the memory
1bb90 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e   locations.** in
1bba0 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72   the VDBE that r
1bbb0 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20  ecord the limit 
1bbc0 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  and offset count
1bbd0 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  ers..**.** addrO
1bbe0 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
1bbf0 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
1bc00 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
1bc10 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1bc20 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
1bc30 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
1bc40 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
1bc50 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
1bc60 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
1bc70 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
1bc80 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
1bc90 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
1bca0 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
1bcb0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1bcc0 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
1bcd0 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
1bce0 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
1bcf0 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
1bd00 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
1bd10 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
1bd20 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
1bd30 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
1bd40 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
1bd50 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
1bd60 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
1bd70 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
1bd80 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
1bd90 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
1bda0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1bdb0 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
1bdc0 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
1bdd0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1bde0 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
1bdf0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
1be00 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
1be10 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1be20 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
1be30 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
1be40 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
1be50 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
1be60 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
1be70 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1be80 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1be90 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
1bea0 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
1beb0 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f  K_EXCEPT */.  Lo
1bec0 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b  gEst nSelectRow;
1bed0 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
1bee0 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  d number of resu
1bef0 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32  lt rows */.  u32
1bf00 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
1bf10 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
1bf20 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
1bf30 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
1bf40 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
1bf50 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
1bf60 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
1bf70 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69  T counters */.#i
1bf80 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1bf90 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65  ABLED.  char zSe
1bfa0 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f  lName[12];     /
1bfb0 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  * Symbolic name 
1bfc0 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75  of this SELECT u
1bfd0 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67  se for debugging
1bfe0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1bff0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1c000 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
1c010 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
1c020 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
1c030 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ct */.  SrcList 
1c040 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
1c050 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
1c060 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
1c070 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
1c080 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1c090 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1c0a0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
1c0b0 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
1c0c0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1c0d0 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
1c0e0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
1c0f0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1c100 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1c110 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
1c120 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
1c130 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
1c140 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
1c150 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
1c160 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
1c170 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
1c180 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1c190 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
1c1a0 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
1c1b0 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
1c1c0 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
1c1d0 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
1c1e0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1c1f0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1c200 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
1c210 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
1c220 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
1c230 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
1c240 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
1c250 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1c260 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
1c270 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
1c280 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
1c290 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  L. */.};../*.** 
1c2a0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1c2b0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
1c2c0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
1c2d0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
1c2e0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
1c2f0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1c300 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63  nstraints (all c
1c310 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72  hecked via asser
1c320 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48  t()).**     SF_H
1c330 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f  asAgg     == NC_
1c340 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46  HasAgg.**     SF
1c350 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e  _MinMaxAgg  == N
1c360 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
1c370 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  == SQLITE_FUNC_M
1c380 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f  INMAX.**     SF_
1c390 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48  FixedLimit == WH
1c3a0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f  ERE_USE_LIMIT.*/
1c3b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1c3c0 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30  inct       0x000
1c3d0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1c3e0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1c3f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1c400 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78  ll            0x
1c410 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  00002  /* Includ
1c420 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1c430 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1c440 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1c450 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e  0x00004  /* Iden
1c460 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1c470 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1c480 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1c490 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20  te      0x00008 
1c4a0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1c4b0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20   functions or a 
1c4c0 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1c4d0 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20  ine SF_HasAgg   
1c4e0 20 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f        0x00010  /
1c4f0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
1c500 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
1c510 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
1c520 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30  sEphemeral  0x00
1c530 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65  020  /* Uses the
1c540 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
1c550 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
1c560 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
1c570 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73     0x00040  /* s
1c580 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
1c590 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
1c5a0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
1c5b0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
1c5c0 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f   0x00080  /* FRO
1c5d0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
1c5e0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
1c5f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1c600 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78  ompound       0x
1c610 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00100  /* Part o
1c620 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
1c630 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
1c640 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
1c650 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74  0x00200  /* Synt
1c660 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
1c670 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
1c680 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61  efine SF_MultiVa
1c690 6c 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20  lue     0x00400 
1c6a0 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45   /* Single VALUE
1c6b0 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74  S term with mult
1c6c0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1c6d0 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
1c6e0 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20  om     0x00800  
1c6f0 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
1c700 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
1c710 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1c720 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
1c730 20 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20      0x01000  /* 
1c740 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
1c750 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
1c760 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
1c770 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
1c780 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65   0x02000  /* The
1c790 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
1c7a0 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
1c7b0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
1c7c0 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20  _FixedLimit     
1c7d0 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c  0x04000  /* nSel
1c7e0 65 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20  ectRow set by a 
1c7f0 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a  constant LIMIT *
1c800 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79  /.#define SF_May
1c810 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38  beConvert   0x08
1c820 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e  000  /* Need con
1c830 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1c840 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1c850 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e  /.#define SF_Con
1c860 76 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30  verted      0x10
1c870 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65  000  /* By conve
1c880 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1c890 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1c8a0 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75  #define SF_Inclu
1c8b0 64 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30  deHidden  0x2000
1c8c0 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69  0  /* Include hi
1c8d0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  dden columns in 
1c8e0 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  output */.../*.*
1c8f0 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
1c900 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
1c910 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
1c920 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
1c930 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
1c940 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
1c950 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
1c960 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
1c970 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
1c980 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
1c990 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
1c9a0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1c9b0 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
1c9c0 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
1c9d0 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ex.**           
1c9e0 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
1c9f0 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
1ca00 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1ca10 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
1ca20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
1ca30 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
1ca40 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
1ca50 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1ca60 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
1ca70 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
1ca80 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
1ca90 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
1caa0 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
1cad0 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
1cae0 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
1caf0 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
1cb00 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
1cb10 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
1cb40 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
1cb50 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
1cb60 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1cb80 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
1cb90 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
1cba0 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
1cbb0 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
1cbc0 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
1cbd0 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
1cbe0 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
1cbf0 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
1cc00 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1cc10 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
1cc20 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
1cc30 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
1cc40 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
1cc50 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
1cc80 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
1cc90 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
1cca0 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
1ccb0 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
1ccc0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1ccd0 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1cce0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1ccf0 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
1cd00 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
1cd10 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
1cd20 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1cd40 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1cd50 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
1cd60 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
1cd70 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cd80 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
1cd90 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
1cda0 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
1cdb0 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
1cdc0 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
1cdd0 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
1cde0 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
1cdf0 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
1ce00 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
1ce10 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
1ce20 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
1ce30 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
1ce40 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce60 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
1ce70 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
1ce80 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
1ce90 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1ceb0 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
1cec0 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
1ced0 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
1cee0 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
1cef0 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
1cf00 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1cf10 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
1cf20 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cf40 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
1cf50 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1cf60 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
1cf70 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cf80 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
1cf90 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1cfa0 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
1cfb0 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1cfd0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
1cfe0 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1cff0 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
1d020 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
1d030 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
1d040 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
1d050 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
1d060 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
1d070 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d080 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
1d090 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
1d0a0 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
1d0b0 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1d0d0 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1d0e0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1d0f0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1d100 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1d110 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1d120 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1d130 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1d140 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1d150 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1d160 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1d170 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1d180 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1d190 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1d1a0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1d1b0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1d1c0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1d1d0 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1d1e0 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1d1f0 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1d200 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1d210 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1d240 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1d250 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d270 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1d280 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1d290 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1d2a0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1d2b0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1d2c0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1d2d0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1d2e0 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1d2f0 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1d300 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1d310 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1d340 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1d350 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1d360 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1d370 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1d380 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1d390 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1d3a0 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1d3b0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1d3c0 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1d3d0 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1d3e0 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1d3f0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1d400 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1d410 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1d420 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1d430 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1d440 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d450 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1d460 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1d470 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1d480 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1d490 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d4a0 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1d4b0 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1d4c0 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1d4d0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1d4e0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1d4f0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1d500 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1d510 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d520 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1d530 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1d540 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1d550 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d560 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1d570 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1d580 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1d590 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1d5a0 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1d5b0 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1d5c0 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1d5d0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1d5e0 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1d5f0 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1d600 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1d610 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1d620 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1d630 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1d640 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1d650 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1d660 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1d670 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1d680 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1d690 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1d6a0 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1d6b0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1d6c0 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1d6d0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1d6e0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1d6f0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1d700 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1d710 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1d720 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1d730 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1d740 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1d750 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1d760 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1d770 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1d780 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1d790 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1d7a0 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1d7b0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1d7c0 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1d7d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1d7e0 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1d7f0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1d800 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1d810 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1d820 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1d830 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1d840 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1d850 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1d860 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1d870 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1d880 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1d890 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1d8a0 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1d8b0 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1d8c0 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1d8d0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1d8e0 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1d8f0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1d900 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1d910 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1d920 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1d930 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1d940 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1d950 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1d960 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1d970 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1d980 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1d990 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1d9a0 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1d9b0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1d9c0 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1d9d0 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1d9e0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1d9f0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1da00 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1da10 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1da20 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1da30 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1da40 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1da50 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1da60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1da70 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1da80 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1da90 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1daa0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
1dab0 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66  Sdst;      /* Af
1dac0 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
1dad0 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
1dae0 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1daf0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1db00 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1db10 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1db20 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1db30 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1db40 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1db50 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1db60 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1db70 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1db80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1db90 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1dba0 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1dbb0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1dbc0 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1dbd0 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1dbe0 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1dbf0 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1dc00 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1dc10 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1dc20 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1dc30 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1dc40 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c  NCREMENT.** tabl
1dc50 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
1dc60 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
1dc70 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1dc80 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
1dc90 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
1dca0 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
1dcb0 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
1dcc0 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
1dcd0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
1dce0 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
1dcf0 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
1dd00 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
1dd10 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
1dd20 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
1dd30 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
1dd40 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74  rts are done wit
1dd50 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
1dd60 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
1dd70 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
1dd80 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
1dd90 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
1dda0 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
1ddb0 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
1ddc0 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
1ddd0 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
1dde0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1ddf0 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
1de00 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
1de10 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
1de20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
1de30 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
1de40 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
1de50 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
1de60 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
1de70 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
1de80 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
1de90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1dea0 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
1deb0 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
1dec0 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
1ded0 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
1dee0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1def0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
1df00 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
1df10 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
1df20 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
1df30 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
1df40 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1df50 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
1df60 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
1df70 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
1df80 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
1df90 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
1dfa0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1dfb0 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
1dfc0 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a  ated for each.**
1dfd0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1dfe0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1dff0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1e000 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1e010 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1e020 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1e030 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1e040 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1e050 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1e060 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1e070 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1e080 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1e090 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1e0a0 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1e0b0 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1e0c0 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1e0d0 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1e0e0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1e0f0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1e100 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1e110 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1e120 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1e130 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1e140 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1e150 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1e160 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1e170 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1e180 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1e190 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1e1a0 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1e1b0 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1e1c0 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1e1d0 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1e1e0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1e1f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1e200 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1e210 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1e220 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1e230 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1e240 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1e250 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1e260 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1e270 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a  sult of INSERT.*
1e280 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1e290 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1e2a0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1e2b0 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1e2c0 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1e2d0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1e2e0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1e2f0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1e300 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1e310 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1e320 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1e330 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1e340 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1e350 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1e360 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1e370 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1e380 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1e390 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1e3a0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1e3b0 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1e3c0 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1e3d0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1e3e0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1e3f0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1e400 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1e410 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1e420 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1e430 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1e440 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1e450 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1e460 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1e470 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1e480 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1e490 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1e4a0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1e4b0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1e4c0 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1e4d0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1e4e0 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1e4f0 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1e500 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1e510 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1e520 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1e530 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1e540 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1e550 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1e560 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1e570 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1e580 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1e590 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1e5a0 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1e5b0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1e5c0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1e5d0 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1e5e0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1e5f0 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1e600 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1e610 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1e620 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1e630 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1e640 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1e650 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1e660 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1e670 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1e680 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1e690 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1e6a0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1e6b0 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1e6c0 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1e6d0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1e6e0 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1e6f0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1e700 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1e710 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1e720 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1e730 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1e740 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1e750 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1e760 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1e770 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1e780 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1e790 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1e7a0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1e7b0 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1e7c0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1e7d0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1e7e0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1e7f0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1e800 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1e810 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1e820 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1e830 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1e840 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1e850 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1e860 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1e870 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1e880 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1e890 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1e8a0 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1e8b0 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1e8c0 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1e8d0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1e8e0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1e8f0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1e900 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1e910 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1e920 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65  cache.** feature
1e930 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1e940 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1e950 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1e960 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1e970 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1e980 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1e990 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
1e9a0 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
1e9b0 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
1e9c0 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
1e9d0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
1e9e0 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
1e9f0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
1ea00 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
1ea10 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
1ea20 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1ea30 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
1ea40 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
1ea50 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
1ea60 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
1ea70 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
1ea80 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
1ea90 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
1eaa0 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
1eab0 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
1eac0 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1eae0 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1eaf0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
1eb00 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
1eb10 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
1eb20 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
1eb30 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
1eb40 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
1eb50 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
1eb60 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
1eb70 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
1eb80 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
1eb90 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
1eba0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1ebb0 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
1ebc0 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
1ebd0 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
1ebe0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
1ebf0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
1ec00 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
1ec10 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
1ec20 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
1ec30 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
1ec40 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1ec50 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
1ec60 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
1ec70 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
1ec80 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
1ec90 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1eca0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
1ecb0 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1ecc0 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
1ecd0 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
1ece0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
1ecf0 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
1ed00 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1ed10 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
1ed20 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
1ed30 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
1ed40 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
1ed50 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b    u8 disableLook
1ed60 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72  aside; /* Number
1ed70 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73   of times lookas
1ed80 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  ide has been dis
1ed90 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43  abled */.  u8 nC
1eda0 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  olCache;        
1edb0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
1edc0 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68  ries in aColCach
1edd0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  e[] */.  int nRa
1ede0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1edf0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
1ee00 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1ee10 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
1ee20 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1ee30 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1ee40 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
1ee50 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1ee60 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1ee70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ee80 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
1ee90 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
1eea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1eeb0 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
1eec0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
1eed0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
1eee0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
1eef0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ef00 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
1ef10 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1ef20 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
1ef30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ef40 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
1ef50 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1ef60 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c  */.  int szOpAll
1ef70 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74  oc;       /* Byt
1ef80 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  es of memory spa
1ef90 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
1efa0 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1efb0 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
1efc0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1efd0 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
1efe0 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
1eff0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
1f000 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20   iSelfTab;      
1f010 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e    /* Table of an
1f020 20 69 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70   index whose exp
1f030 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1f040 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  ed */.  int iCac
1f050 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
1f060 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
1f070 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
1f080 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
1f090 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
1f0a0 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
1f0b0 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
1f0c0 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
1f0d0 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
1f0e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
1f0f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
1f100 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
1f110 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
1f120 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
1f130 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
1f140 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45  he labels */.  E
1f150 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1f160 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1f170 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1f180 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1f190 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1f1a0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1f1b0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1f1c0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1f1d0 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1f1e0 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1f1f0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1f200 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1f210 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1f220 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1f230 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1f240 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1f250 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  es */.  int regR
1f260 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
1f270 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1f280 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
1f290 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
1f2a0 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
1f2b0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1f2c0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
1f2d0 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
1f2e0 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
1f2f0 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
1f300 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
1f310 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
1f320 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
1f330 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20  -program */.#if 
1f340 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1f350 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63  LED.  int nSelec
1f360 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  t;         /* Nu
1f370 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
1f380 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a  tatements seen *
1f390 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49  /.  int nSelectI
1f3a0 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20  ndent;   /* How 
1f3b0 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45  far to indent SE
1f3c0 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70  LECTTRACE() outp
1f3d0 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ut */.#endif.#if
1f3e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1f3f0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
1f400 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
1f410 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f420 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
1f430 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
1f440 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
1f450 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
1f460 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
1f470 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1f480 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
1f490 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
1f4a0 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
1f4b0 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
1f4c0 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
1f4d0 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
1f4e0 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
1f4f0 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
1f500 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
1f510 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
1f520 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
1f530 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
1f540 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1f550 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ed for */.  int 
1f560 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
1f570 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
1f580 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1f590 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
1f5a0 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ABLE */.  u32 nQ
1f5b0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
1f5c0 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
1f5d0 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
1f5e0 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
1f5f0 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
1f600 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1f610 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
1f620 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1f630 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
1f640 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1f650 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1f660 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1f670 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
1f680 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
1f690 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1f6a0 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
1f6b0 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
1f6c0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1f6d0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1f6e0 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
1f6f0 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
1f700 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
1f710 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
1f720 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
1f730 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
1f740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1f780 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76    ** Fields abov
1f790 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  e must be initia
1f7a0 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20  lized to zero.  
1f7b0 54 68 65 20 66 69 65 6c 64 73 20 74 68 61 74 20  The fields that 
1f7c0 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77  follow,.  ** dow
1f7d0 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69  n to the beginni
1f7e0 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ng of the recurs
1f7f0 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20  ive section, do 
1f800 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20  not need to be. 
1f810 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   ** initialized 
1f820 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  as they will be 
1f830 73 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67  set before being
1f840 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e   used.  The boun
1f850 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74  dary is.  ** det
1f860 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65  ermined by offse
1f870 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61  tof(Parse,aColCa
1f880 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  che)..  ********
1f890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8d0 2a 2a 2f 0a 0a 20 20 73 74 72 75 63 74 20 79 43  **/..  struct yC
1f8e0 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
1f8f0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
1f900 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
1f910 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
1f920 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20    i16 iColumn;  
1f930 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1f940 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
1f950 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
1f960 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
1f970 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
1f980 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
1f990 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
1f9a0 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
1f9b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
1f9c0 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
1f9d0 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
1f9e0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
1f9f0 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
1fa00 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
1fa10 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
1fa20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
1fa30 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
1fa40 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
1fa50 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
1fa60 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
1fa70 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
1fa80 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
1fa90 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
1faa0 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
1fab0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  ry */.  int aTem
1fac0 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20  pReg[8];        
1fad0 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
1fae0 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
1faf0 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b  gisters */.  Tok
1fb00 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1fb10 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
1fb20 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
1fb30 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
1fb40 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  e */..  /*******
1fb50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb90 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
1fba0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
1fbb0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
1fbc0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
1fbd0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
1fbe0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1fbf0 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
1fc00 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
1fc10 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
1fc20 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
1fc30 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
1fc40 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73  se,sLastToken) s
1fc50 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e  o the sLastToken
1fc60 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
1fc70 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69  he.  ** first fi
1fc80 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75 72  eld in the recur
1fc90 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
1fca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fcb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fcc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fcd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fce0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65  *******/..  Toke
1fcf0 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
1fd00 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1fd10 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1fd20 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20    ynVar nVar;   
1fd30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1fd40 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
1fd50 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
1fd60 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
1fd70 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1fd80 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1fd90 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1fda0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1fdb0 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
1fdc0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1fdd0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1fde0 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1fdf0 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1fe00 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1fe10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1fe20 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1fe30 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1fe40 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1fe50 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1fe60 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1fe70 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1fe80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1fe90 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1fea0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1feb0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1fec0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
1fed0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
1fee0 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
1fef0 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
1ff00 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
1ff10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1ff20 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c  PLAIN.  int iSel
1ff30 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20  ectId;          
1ff40 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65    /* ID of curre
1ff50 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58  nt select for EX
1ff60 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
1ff70 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63    int iNextSelec
1ff80 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  tId;        /* N
1ff90 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1ffa0 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c  lect ID for EXPL
1ffb0 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  AIN output */.#e
1ffc0 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56  ndif.  VList *pV
1ffd0 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
1ffe0 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77   /* Mapping betw
1fff0 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  een variable nam
20000 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a  es and numbers *
20010 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
20020 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
20030 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
20040 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
20050 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
20060 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
20070 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
20080 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
20090 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
200a0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
200b0 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
200c0 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
200d0 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
200e0 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
200f0 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
20100 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
20110 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
20120 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
20130 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
20140 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
20150 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
20160 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
20170 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
20180 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
20190 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
201a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
201b0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
201d0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
201e0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
201f0 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
20200 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
20210 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
20220 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
20230 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
20240 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
20250 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
20260 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
20270 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
20280 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
20290 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
202a0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
202b0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
202c0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
202d0 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
202e0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
202f0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
20300 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
20310 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
20320 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
20330 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
20340 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
20350 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
20360 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  parse */.};../*.
20370 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69  ** Sizes and poi
20380 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73  nters of various
20390 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61   parts of the Pa
203a0 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23  rse object..*/.#
203b0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52  define PARSE_HDR
203c0 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
203d0 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 20 2f 2a  se,aColCache) /*
203e0 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20   Recursive part 
203f0 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a  w/o aColCache*/.
20400 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45  #define PARSE_RE
20410 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f  CURSE_SZ offseto
20420 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
20430 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73  en)    /* Recurs
20440 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
20450 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53  ine PARSE_TAIL_S
20460 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29  Z (sizeof(Parse)
20470 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53  -PARSE_RECURSE_S
20480 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73  Z) /* Non-recurs
20490 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
204a0 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58  ine PARSE_TAIL(X
204b0 29 20 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b  ) (((char*)(X))+
204c0 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
204d0 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  )  /* Pointer to
204e0 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   tail */../*.** 
204f0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
20500 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
20510 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
20520 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
20530 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
20540 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
20550 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
20560 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
20570 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
20580 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
20590 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56  pParse->declareV
205a0 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  tab).#endif../*.
205b0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
205c0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
205d0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
205e0 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
205f0 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
20600 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
20610 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
20620 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
20630 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
20640 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
20650 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
20660 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
20670 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
20680 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
20690 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
206a0 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
206b0 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
206c0 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
206d0 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
206e0 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
206f0 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
20700 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f  lue in various o
20710 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  pcodes..**.** Va
20720 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
20730 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
20740 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f  sert()):.**    O
20750 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
20760 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
20770 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f  C_LENGTH.**    O
20780 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
20790 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
207a0 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f  C_TYPEOF.**    O
207b0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
207c0 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b     == BTREE_BULK
207d0 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LOAD.**    OPFLA
207e0 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d  G_SEEKEQ       =
207f0 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a  = BTREE_SEEK_EQ.
20800 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52  **    OPFLAG_FOR
20810 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52  DELETE    == BTR
20820 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20  EE_FORDELETE.** 
20830 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f     OPFLAG_SAVEPO
20840 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f  SITION == BTREE_
20850 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20  SAVEPOSITION.** 
20860 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c     OPFLAG_AUXDEL
20870 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
20880 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65  AUXDELETE.*/.#de
20890 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
208a0 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
208b0 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20    /* OP_Insert: 
208c0 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
208d0 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20  ->nChange */.   
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20900 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69    /* Also used i
20910 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66  n P2 (not P5) of
20920 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64   OP_Delete */.#d
20930 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48  efine OPFLAG_EPH
20940 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20  EM         0x01 
20950 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a     /* OP_Column:
20960 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75   Ephemeral outpu
20970 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69  t is ok */.#defi
20980 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
20990 57 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20  WID     0x20    
209a0 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
209b0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
209c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
209d0 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
209e0 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
209f0 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
20a00 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
20a10 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
20a20 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
20a30 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
20a40 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
20a50 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
20a60 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
20a70 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
20a80 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
20a90 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
20aa0 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
20ab0 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20  PFLAG_ISNOOP    
20ac0 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
20ad0 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72  P_Delete does pr
20ae0 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e  e-update-hook on
20af0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
20b00 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
20b10 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
20b20 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
20b30 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
20b40 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20b50 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
20b60 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
20b70 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
20b80 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
20b90 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
20ba0 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
20bb0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
20bc0 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
20bd0 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
20be0 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  ine OPFLAG_SEEKE
20bf0 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20  Q        0x02   
20c00 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75   /* OP_Open** cu
20c10 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65  rsor uses EQ see
20c20 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
20c30 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  e OPFLAG_FORDELE
20c40 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f  TE     0x08    /
20c50 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64  * OP_Open should
20c60 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45   use BTREE_FORDE
20c70 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
20c80 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
20c90 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
20ca0 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
20cb0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
20cc0 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
20cd0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
20ce0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
20cf0 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
20d00 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
20d10 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20d20 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20  G_SAVEPOSITION  
20d30 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x02    /* OP_De
20d40 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76  lete/Insert: sav
20d50 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a  e cursor pos */.
20d60 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
20d70 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  UXDELETE     0x0
20d80 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  4    /* OP_Delet
20d90 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45  e: index in a DE
20da0 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20  LETE op */../*. 
20db0 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
20dc0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
20dd0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
20de0 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
20df0 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
20e00 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a  uct Trigger.. *.
20e10 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
20e20 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
20e30 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
20e40 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
20e50 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
20e60 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
20e70 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
20e80 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
20e90 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a   represents the.
20ea0 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
20eb0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
20ec0 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
20ed0 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
20ee0 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
20ef0 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
20f00 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
20f10 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
20f20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
20f30 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
20f40 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
20f50 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
20f60 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
20f70 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
20f80 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
20f90 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
20fa0 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
20fb0 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
20fc0 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
20fd0 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
20fe0 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
20ff0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
21000 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
21010 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
21020 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
21030 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
21040 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
21050 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
21060 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
21070 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
21080 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
21090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
210a0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
210b0 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
210d0 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
210e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
210f0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
21100 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
21110 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
21120 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
21130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
21140 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
21150 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
21160 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
21170 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
21180 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
21190 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
211a0 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
211b0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
211c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
211d0 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
211e0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
211f0 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
21200 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
21210 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
21220 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
21230 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
21240 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21260 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
21270 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
21280 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
21290 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
212a0 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
212b0 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
212c0 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
212d0 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
212e0 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
212f0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
21300 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
21310 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
21320 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
21330 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
21340 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
21350 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
21360 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
21370 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
21380 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
21390 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
213a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
213b0 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
213c0 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
213d0 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
213e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
213f0 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
21400 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20  ne which..**.** 
21410 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
21420 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
21430 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
21440 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
21450 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
21460 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
21470 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
21480 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
21490 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
214a0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
214b0 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
214c0 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
214d0 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
214e0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
214f0 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
21500 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
21510 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
21520 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
21530 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
21540 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  ram.. *. * Insta
21550 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
21560 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
21570 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
21580 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
21590 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
215a0 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
215b0 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
215c0 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
215d0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20   member of the. 
215e0 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
215f0 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
21600 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
21610 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
21620 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
21630 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
21640 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
21650 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68  rogram.. *. * Th
21660 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
21670 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
21680 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
21690 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
216a0 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
216b0 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
216c0 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
216d0 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
216e0 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
216f0 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65   by the. * value
21700 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
21710 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
21720 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
21730 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
21740 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
21750 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
21760 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
21770 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
21780 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
21790 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
217a0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
217b0 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
217c0 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
217d0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
217e0 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
217f0 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74  NULL.. * zTarget
21800 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
21810 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
21820 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
21830 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
21840 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
21850 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
21860 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
21870 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
21880 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
21890 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
218a0 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
218b0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
218c0 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
218d0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
218e0 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
218f0 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
21900 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20  ES .... *       
21910 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
21920 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
21930 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
21940 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
21950 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
21960 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
21970 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
21980 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
21990 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
219a0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
219b0 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
219c0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
219d0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
219e0 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
219f0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
21a00 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
21a10 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
21a20 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20  ise NULL.. *. * 
21a30 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
21a40 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
21a50 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
21a60 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
21a70 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72  update.. * pWher
21a80 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
21a90 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
21aa0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
21ab0 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
21ac0 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
21ad0 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
21ae0 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
21af0 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
21b00 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
21b10 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
21b20 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
21b30 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
21b40 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
21b50 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
21b60 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
21b70 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
21b80 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
21b90 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74  ument.. *. */.st
21ba0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
21bb0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
21bc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
21bd0 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
21be0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
21bf0 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
21c00 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
21c10 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
21c20 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
21c30 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
21c40 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
21c50 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
21c60 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
21c70 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
21c80 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
21c90 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
21ca0 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
21cb0 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e   INTO SELECT ...
21cc0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72   */.  char *zTar
21cd0 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61  get;       /* Ta
21ce0 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
21cf0 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
21d00 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
21d10 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
21d20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
21d30 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
21d40 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
21d50 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
21d60 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
21d70 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
21d80 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
21d90 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
21da0 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
21db0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
21dc0 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
21dd0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
21de0 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
21df0 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
21e00 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
21e10 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
21e20 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
21e30 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
21e40 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
21e50 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
21e60 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
21e70 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
21e80 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
21e90 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
21ea0 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
21eb0 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
21ec0 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
21ed0 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a  s.** explicit..*
21ee0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
21ef0 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
21f00 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
21f10 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
21f20 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
21f30 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
21f40 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
21f50 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
21f60 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
21f70 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
21f80 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
21f90 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72  ma */.  int bVar
21fa0 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43  Only;       /* C
21fb0 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c  heck for variabl
21fc0 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c  e references onl
21fd0 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  y */.  const cha
21fe0 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
21ff0 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
22000 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
22010 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
22020 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
22030 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
22040 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
22050 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
22060 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
22070 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
22080 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
22090 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
220a0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
220b0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
220c0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
220d0 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
220e0 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
220f0 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
22100 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
22110 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
22120 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
22130 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
22140 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
22150 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
22160 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
22170 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
22180 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
22190 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
221a0 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
221b0 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Base;         /*
221c0 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69   A base allocati
221d0 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61  on.  Not from ma
221e0 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20  lloc. */.  char 
221f0 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
22200 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
22210 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
22220 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20  /.  u32  nChar; 
22230 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
22240 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
22250 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32   so far */.  u32
22260 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
22270 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
22280 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
22290 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32  n zText */.  u32
222a0 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
222b0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
222c0 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  owed allocation.
222d0 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f    0 for no mallo
222e0 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20  c usage */.  u8 
222f0 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
22300 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f    /* STRACCUM_NO
22310 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f  MEM or STRACCUM_
22320 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20  TOOBIG */.  u8  
22330 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20   printfFlags;   
22340 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54   /* SQLITE_PRINT
22350 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f  F flags below */
22360 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
22370 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
22380 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
22390 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e  TOOBIG  2.#defin
223a0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
223b0 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f  INTERNAL 0x01  /
223c0 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f  * Internal-use-o
223d0 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61  nly converters a
223e0 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
223f0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
22400 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f  SQLFUNC  0x02  /
22410 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61  * SQL function a
22420 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72  rguments to VXPr
22430 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20  intf */.#define 
22440 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
22450 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20  LLOCED 0x04  /* 
22460 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73  True if xText is
22470 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
22480 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d   */..#define isM
22490 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58  alloced(X)  (((X
224a0 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26  )->printfFlags &
224b0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
224c0 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f  ALLOCED)!=0).../
224d0 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
224e0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
224f0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
22500 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
22510 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
22520 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
22530 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
22540 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
22550 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
22560 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
22570 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
22580 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
22590 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
225a0 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
225b0 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
225c0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
225d0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
225e0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
225f0 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
22600 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
22610 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
22620 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
22630 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
22640 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
22650 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
22660 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
22670 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
22680 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
22690 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
226a0 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
226b0 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
226c0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
226d0 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
226e0 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
226f0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
22700 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
22710 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
22740 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
22750 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
22760 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
22770 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
22780 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
22790 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
227a0 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
227b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227c0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
227d0 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
227e0 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
227f0 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
22800 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
22810 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
22820 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
22830 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
22840 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22850 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
22860 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
22870 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
22880 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228a0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
228b0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
228c0 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72  .  int neverCorr
228d0 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  upt;            
228e0 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
228f0 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d   is always well-
22900 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20  formed */.  int 
22910 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  szLookaside;    
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22930 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
22940 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a  de buffer size *
22950 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69  /.  int nLookasi
22960 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
22970 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
22980 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
22990 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74  r count */.  int
229a0 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20   nStmtSpill;    
229b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
229c0 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73  * Stmt-journal s
229d0 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72  pill-to-disk thr
229e0 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69  eshold */.  sqli
229f0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
22a00 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
22a10 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
22a20 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
22a30 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
22a40 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
22a50 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
22a60 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
22a70 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
22a80 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
22a90 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
22aa0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
22ab0 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
22ac0 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
22ad0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
22ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
22af0 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
22b00 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
22b30 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
22b40 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
22b50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22b60 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
22b70 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
22b80 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
22b90 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
22bb0 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
22bc0 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
22bd0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
22be0 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
22bf0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
22c00 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
22c10 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
22c20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22c30 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
22c40 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
22c50 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22c70 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
22c80 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
22c90 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22cc0 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
22cd0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
22ce0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22cf0 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
22d00 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
22d10 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
22d40 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
22d50 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
22d60 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
22d70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
22d80 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
22d90 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
22da0 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
22db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22dc0 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
22dd0 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
22de0 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
22df0 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
22e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
22e10 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
22e20 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
22e30 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20  */.  u32 szPma; 
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
22e60 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a  m Sorter PMA siz
22e70 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  e */.  /* The ab
22e80 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
22e90 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
22ea0 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
22eb0 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
22ec0 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
22ed0 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
22ee0 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
22ef0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
22f00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22f10 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
22f20 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
22f30 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
22f40 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22f60 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
22f70 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
22f80 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
22f90 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22fb0 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
22fc0 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
22fd0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
22fe0 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
22ff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
23000 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
23010 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
23020 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
23030 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
23040 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
23050 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
23060 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
23070 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
23080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23090 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
230a0 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
230b0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
230c0 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
230d0 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
230e0 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
230f0 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
23100 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
23110 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
23120 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
23130 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
23140 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
23150 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
23160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
23170 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
23180 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  Log() */.#ifdef 
23190 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
231a0 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71  LLOG.  void(*xSq
231b0 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69  llog)(void*,sqli
231c0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
231d0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
231e0 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64  pSqllogArg;.#end
231f0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
23200 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20  _VDBE_COVERAGE. 
23210 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
23220 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e  g callback (if n
23230 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f  ot NULL) is invo
23240 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42  ked on every VDB
23250 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70  E branch.  ** op
23260 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68  eration.  Set th
23270 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  e callback using
23280 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
23290 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a  _VDBE_COVERAGE..
232a0 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56    */.  void (*xV
232b0 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a  dbeBranch)(void*
232c0 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38  ,int iSrcLine,u8
232d0 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
232e0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
232f0 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
23300 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
23330 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
23340 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
23350 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
23360 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
23370 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
23380 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
23390 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
233a0 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
233b0 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
233c0 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
233d0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
233e0 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
233f0 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e  lls */.  int iOn
23400 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64  ceResetThreshold
23410 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
23420 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f  en to reset OP_O
23430 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  nce counters */.
23440 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
23450 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
23460 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
23470 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
23480 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
23490 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
234a0 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
234b0 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
234c0 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
234d0 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
234e0 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
234f0 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
23500 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
23510 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
23520 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
23530 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
23540 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
23550 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
23560 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
23570 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
23580 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
23590 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
235a0 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
235b0 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
235c0 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
235d0 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
235e0 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
235f0 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
23600 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
23610 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
23620 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
23630 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
23640 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
23650 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
23660 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
23670 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
23680 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
23690 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
236a0 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
236b0 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
236c0 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
236d0 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
236e0 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
236f0 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
23700 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
23730 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
23740 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72  */.  int (*xExpr
23750 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
23760 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
23770 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
23780 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
23790 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
237a0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
237b0 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
237c0 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
237d0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
237e0 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
237f0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
23800 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
23810 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
23820 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
23830 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23850 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
23860 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
23870 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
23880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23890 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
238a0 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
238b0 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238e0 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
238f0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
23900 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
23910 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
23920 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23930 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f  aming context */
23940 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20 20  .    int n;     
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23970 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20  * A counter */. 
23980 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20 20 20     int iCur;    
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
239b0 41 20 63 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  A cursor number 
239c0 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73 74 20 2a  */.    SrcList *
239d0 70 53 72 63 4c 69 73 74 3b 20 20 20 20 20 20 20  pSrcList;       
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239f0 20 2f 2a 20 46 52 4f 4d 20 63 6c 61 75 73 65 20   /* FROM clause 
23a00 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 53 72  */.    struct Sr
23a10 63 43 6f 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e  cCount *pSrcCoun
23a20 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
23a30 20 2f 2a 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c   /* Counting col
23a40 75 6d 6e 20 72 65 66 65 72 65 6e 63 65 73 20 2a  umn references *
23a50 2f 0a 20 20 20 20 73 74 72 75 63 74 20 43 43 75  /.    struct CCu
23a60 72 48 69 6e 74 20 2a 70 43 43 75 72 48 69 6e 74  rHint *pCCurHint
23a70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23a80 2f 2a 20 55 73 65 64 20 62 79 20 63 6f 64 65 43  /* Used by codeC
23a90 75 72 73 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20  ursorHint() */. 
23aa0 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20     int *aiCol;  
23ab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23ad0 61 72 72 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20  array of column 
23ae0 69 6e 64 65 78 65 73 20 2a 2f 0a 20 20 20 20 73  indexes */.    s
23af0 74 72 75 63 74 20 49 64 78 43 6f 76 65 72 20 2a  truct IdxCover *
23b00 70 49 64 78 43 6f 76 65 72 3b 20 20 20 20 20 20  pIdxCover;      
23b10 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63           /* Chec
23b20 6b 20 66 6f 72 20 69 6e 64 65 78 20 63 6f 76 65  k for index cove
23b30 72 61 67 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  rage */.    stru
23b40 63 74 20 49 64 78 45 78 70 72 54 72 61 6e 73 20  ct IdxExprTrans 
23b50 2a 70 49 64 78 54 72 61 6e 73 3b 20 20 20 20 20  *pIdxTrans;     
23b60 20 20 20 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74        /* Convert
23b70 20 69 6e 64 65 78 65 64 20 65 78 70 72 20 74 6f   indexed expr to
23b80 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45   column */.    E
23b90 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70 42  xprList *pGroupB
23ba0 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  y;              
23bb0 20 20 20 20 20 20 20 20 20 2f 2a 20 47 52 4f 55           /* GROU
23bc0 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20  P BY clause */. 
23bd0 20 20 20 73 74 72 75 63 74 20 48 61 76 69 6e 67     struct Having
23be0 54 6f 57 68 65 72 65 43 74 78 20 2a 70 48 61 76  ToWhereCtx *pHav
23bf0 69 6e 67 43 74 78 3b 20 20 20 20 20 20 2f 2a 20  ingCtx;      /* 
23c00 48 41 56 49 4e 47 20 74 6f 20 57 48 45 52 45 20  HAVING to WHERE 
23c10 63 6c 61 75 73 65 20 63 74 78 20 2a 2f 0a 20 20  clause ctx */.  
23c20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77  } u;.};../* Forw
23c30 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f 6e 73  ard declarations
23c40 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 57   */.int sqlite3W
23c50 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c  alkExpr(Walker*,
23c60 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
23c70 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69 73 74  ite3WalkExprList
23c80 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69  (Walker*, ExprLi
23c90 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
23ca0 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b  3WalkSelect(Walk
23cb0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
23cc0 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65  nt sqlite3WalkSe
23cd0 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65 72 2a  lectExpr(Walker*
23ce0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
23cf0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
23d00 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53  tFrom(Walker*, S
23d10 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
23d20 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70  ite3ExprWalkNoop
23d30 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29  (Walker*, Expr*)
23d40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
23d50 65 63 74 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  ectWalkNoop(Walk
23d60 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23  er*, Select*);.#
23d70 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
23d80 55 47 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  UG.void sqlite3S
23d90 65 6c 65 63 74 57 61 6c 6b 41 73 73 65 72 74 32  electWalkAssert2
23da0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
23db0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  *);.#endif../*.*
23dc0 2a 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72  * Return code fr
23dd0 6f 6d 20 74 68 65 20 70 61 72 73 65 2d 74 72 65  om the parse-tre
23de0 65 20 77 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74  e walking primit
23df0 69 76 65 73 20 61 6e 64 20 74 68 65 69 72 0a 2a  ives and their.*
23e00 2a 20 63 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a  * callbacks..*/.
23e10 23 64 65 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74  #define WRC_Cont
23e20 69 6e 75 65 20 20 20 20 30 20 20 20 2f 2a 20 43  inue    0   /* C
23e30 6f 6e 74 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74  ontinue down int
23e40 6f 20 63 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64  o children */.#d
23e50 65 66 69 6e 65 20 57 52 43 5f 50 72 75 6e 65 20  efine WRC_Prune 
23e60 20 20 20 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69        1   /* Omi
23e70 74 20 63 68 69 6c 64 72 65 6e 20 62 75 74 20 63  t children but c
23e80 6f 6e 74 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20  ontinue walking 
23e90 73 69 62 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66  siblings */.#def
23ea0 69 6e 65 20 57 52 43 5f 41 62 6f 72 74 20 20 20  ine WRC_Abort   
23eb0 20 20 20 20 32 20 20 20 2f 2a 20 41 62 61 6e 64      2   /* Aband
23ec0 6f 6e 20 74 68 65 20 74 72 65 65 20 77 61 6c 6b  on the tree walk
23ed0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
23ee0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
23ef0 74 72 75 63 74 75 72 65 20 72 65 70 72 65 73 65  tructure represe
23f00 6e 74 73 20 61 20 73 65 74 20 6f 66 20 6f 6e 65  nts a set of one
23f10 20 6f 72 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a   or more CTEs.**
23f20 20 28 63 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65   (common table e
23f30 78 70 72 65 73 73 69 6f 6e 73 29 20 63 72 65 61  xpressions) crea
23f40 74 65 64 20 62 79 20 61 20 73 69 6e 67 6c 65 20  ted by a single 
23f50 57 49 54 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a  WITH clause..*/.
23f60 73 74 72 75 63 74 20 57 69 74 68 20 7b 0a 20 20  struct With {.  
23f70 69 6e 74 20 6e 43 74 65 3b 20 20 20 20 20 20 20  int nCte;       
23f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f90 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 43 54 45  /* Number of CTE
23fa0 73 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  s in the WITH cl
23fb0 61 75 73 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a  ause */.  With *
23fc0 70 4f 75 74 65 72 3b 20 20 20 20 20 20 20 20 20  pOuter;         
23fd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
23fe0 74 61 69 6e 69 6e 67 20 57 49 54 48 20 63 6c 61  taining WITH cla
23ff0 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a  use, or NULL */.
24000 20 20 73 74 72 75 63 74 20 43 74 65 20 7b 20 20    struct Cte {  
24010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24020 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 43 54    /* For each CT
24030 45 20 69 6e 20 74 68 65 20 57 49 54 48 20 63 6c  E in the WITH cl
24040 61 75 73 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20  ause.... */.    
24050 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
24060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24070 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
24080 43 54 45 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c  CTE */.    ExprL
24090 69 73 74 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20  ist *pCols;     
240a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69             /* Li
240b0 73 74 20 6f 66 20 65 78 70 6c 69 63 69 74 20 63  st of explicit c
240c0 6f 6c 75 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20  olumn names, or 
240d0 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65  NULL */.    Sele
240e0 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20  ct *pSelect;    
240f0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
24100 68 65 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66  he definition of
24110 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
24120 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 43 74   const char *zCt
24130 65 45 72 72 3b 20 20 20 20 20 20 20 20 20 20 20  eErr;           
24140 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61 67   /* Error messag
24150 65 20 66 6f 72 20 63 69 72 63 75 6c 61 72 20 72  e for circular r
24160 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d  eferences */.  }
24170 20 61 5b 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65   a[1];.};..#ifde
24180 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f  f SQLITE_DEBUG./
24190 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
241a0 20 6f 66 20 74 68 65 20 54 72 65 65 56 69 65 77   of the TreeView
241b0 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20   object is used 
241c0 66 6f 72 20 70 72 69 6e 74 69 6e 67 20 74 68 65  for printing the
241d0 20 63 6f 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64   content of.** d
241e0 61 74 61 20 73 74 72 75 63 74 75 72 65 73 20 6f  ata structures o
241f0 6e 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72  n sqlite3DebugPr
24200 69 6e 74 66 28 29 20 75 73 69 6e 67 20 61 20 74  intf() using a t
24210 72 65 65 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a  ree-like view..*
24220 2f 0a 73 74 72 75 63 74 20 54 72 65 65 56 69 65  /.struct TreeVie
24230 77 20 7b 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c  w {.  int iLevel
24240 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
24250 20 57 68 69 63 68 20 6c 65 76 65 6c 20 6f 66 20   Which level of 
24260 74 68 65 20 74 72 65 65 20 77 65 20 61 72 65 20  the tree we are 
24270 6f 6e 20 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e  on */.  u8  bLin
24280 65 5b 31 30 30 5d 3b 20 20 20 20 20 20 20 20 20  e[100];         
24290 2f 2a 20 44 72 61 77 20 76 65 72 74 69 63 61 6c  /* Draw vertical
242a0 20 69 6e 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20   in column i if 
242b0 62 4c 69 6e 65 5b 69 5d 20 69 73 20 74 72 75 65  bLine[i] is true
242c0 20 2a 2f 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a   */.};.#endif /*
242d0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f   SQLITE_DEBUG */
242e0 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67  ../*.** Assuming
242f0 20 7a 49 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74   zIn points to t
24300 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
24310 20 61 20 55 54 46 2d 38 20 63 68 61 72 61 63 74   a UTF-8 charact
24320 65 72 2c 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a  er,.** advance z
24330 49 6e 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74  In to point to t
24340 68 65 20 66 69 72 73 74 20 62 79 74 65 20 6f 66  he first byte of
24350 20 74 68 65 20 6e 65 78 74 20 55 54 46 2d 38 20   the next UTF-8 
24360 63 68 61 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64  character..*/.#d
24370 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49  efine SQLITE_SKI
24380 50 5f 55 54 46 38 28 7a 49 6e 29 20 7b 20 20 20  P_UTF8(zIn) {   
24390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243a0 20 20 20 20 20 5c 0a 20 20 69 66 28 20 28 2a 28       \.  if( (*(
243b0 7a 49 6e 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b  zIn++))>=0xc0 ){
243c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
243e0 20 20 20 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e      while( (*zIn
243f0 20 26 20 30 78 63 30 29 3d 3d 30 78 38 30 20 29   & 0xc0)==0x80 )
24400 7b 20 7a 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20  { zIn++; }      
24410 20 20 20 20 20 20 20 5c 0a 20 20 7d 20 20 20 20         \.  }    
24420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24450 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53  \.}../*.** The S
24460 51 4c 49 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63  QLITE_*_BKPT mac
24470 72 6f 73 20 61 72 65 20 73 75 62 73 74 69 74 75  ros are substitu
24480 74 65 73 20 66 6f 72 20 74 68 65 20 65 72 72 6f  tes for the erro
24490 72 20 63 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20  r codes with.** 
244a0 74 68 65 20 73 61 6d 65 20 6e 61 6d 65 20 62 75  the same name bu
244b0 74 20 77 69 74 68 6f 75 74 20 74 68 65 20 5f 42  t without the _B
244c0 4b 50 54 20 73 75 66 66 69 78 2e 20 20 54 68 65  KPT suffix.  The
244d0 73 65 20 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65  se macros invoke
244e0 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 74 68 61  .** routines tha
244f0 74 20 72 65 70 6f 72 74 20 74 68 65 20 6c 69 6e  t report the lin
24500 65 2d 6e 75 6d 62 65 72 20 6f 6e 20 77 68 69 63  e-number on whic
24510 68 20 74 68 65 20 65 72 72 6f 72 20 6f 72 69 67  h the error orig
24520 69 6e 61 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  inated.** using 
24530 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20  sqlite3_log().  
24540 54 68 65 20 72 6f 75 74 69 6e 65 73 20 61 6c 73  The routines als
24550 6f 20 70 72 6f 76 69 64 65 20 61 20 63 6f 6e 76  o provide a conv
24560 65 6e 69 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20  enient place.** 
24570 74 6f 20 73 65 74 20 61 20 64 65 62 75 67 67 65  to set a debugge
24580 72 20 62 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f  r breakpoint..*/
24590 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f 72 72  .int sqlite3Corr
245a0 75 70 74 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69  uptError(int);.i
245b0 6e 74 20 73 71 6c 69 74 65 33 4d 69 73 75 73 65  nt sqlite3Misuse
245c0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
245d0 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
245e0 72 72 6f 72 28 69 6e 74 29 3b 0a 23 64 65 66 69  rror(int);.#defi
245f0 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52 52 55 50  ne SQLITE_CORRUP
24600 54 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 6f  T_BKPT sqlite3Co
24610 72 72 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e  rruptError(__LIN
24620 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c  E__).#define SQL
24630 49 54 45 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20  ITE_MISUSE_BKPT 
24640 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
24650 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65  or(__LINE__).#de
24660 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 41 4e 54  fine SQLITE_CANT
24670 4f 50 45 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65  OPEN_BKPT sqlite
24680 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f  3CantopenError(_
24690 5f 4c 49 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20  _LINE__).#ifdef 
246a0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 69  SQLITE_DEBUG.  i
246b0 6e 74 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45  nt sqlite3NomemE
246c0 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74  rror(int);.  int
246d0 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
246e0 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b 0a 23 20  emError(int);.# 
246f0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
24700 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  MEM_BKPT sqlite3
24710 4e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e  NomemError(__LIN
24720 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51  E__).# define SQ
24730 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
24740 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65  _BKPT sqlite3Ioe
24750 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c  rrnomemError(__L
24760 49 4e 45 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64  INE__).#else.# d
24770 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
24780 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 4e  EM_BKPT SQLITE_N
24790 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
247a0 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d  LITE_IOERR_NOMEM
247b0 5f 42 4b 50 54 20 53 51 4c 49 54 45 5f 49 4f 45  _BKPT SQLITE_IOE
247c0 52 52 5f 4e 4f 4d 45 4d 0a 23 65 6e 64 69 66 0a  RR_NOMEM.#endif.
247d0 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61 6e 64 20  ./*.** FTS3 and 
247e0 46 54 53 34 20 62 6f 74 68 20 72 65 71 75 69 72  FTS4 both requir
247f0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
24800 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69 66 20 64  support.*/.#if d
24810 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
24820 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29  IT_VIRTUALTABLE)
24830 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
24840 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23 20 75 6e  ENABLE_FTS3.# un
24850 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
24860 45 5f 46 54 53 34 0a 23 65 6e 64 69 66 0a 0a 2f  E_FTS4.#endif../
24870 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20 72 65 61  *.** FTS4 is rea
24880 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73 69 6f 6e  lly an extension
24890 20 66 6f 72 20 46 54 53 33 2e 20 20 49 74 20 69   for FTS3.  It i
248a0 73 20 65 6e 61 62 6c 65 64 20 75 73 69 6e 67 20  s enabled using 
248b0 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  the.** SQLITE_EN
248c0 41 42 4c 45 5f 46 54 53 33 20 6d 61 63 72 6f 2e  ABLE_FTS3 macro.
248d0 20 20 42 75 74 20 74 6f 20 61 76 6f 69 64 20 63    But to avoid c
248e0 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61 6c 73 6f  onfusion we also
248f0 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 53 51 4c   call.** the SQL
24900 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 20  ITE_ENABLE_FTS4 
24910 6d 61 63 72 6f 20 74 6f 20 73 65 72 76 65 20 61  macro to serve a
24920 73 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 53  s an alias for S
24930 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
24940 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  3..*/.#if define
24950 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
24960 46 54 53 34 29 20 26 26 20 21 64 65 66 69 6e 65  FTS4) && !define
24970 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
24980 46 54 53 33 29 0a 23 20 64 65 66 69 6e 65 20 53  FTS3).# define S
24990 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
249a0 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  3 1.#endif../*.*
249b0 2a 20 54 68 65 20 63 74 79 70 65 2e 68 20 68 65  * The ctype.h he
249c0 61 64 65 72 20 69 73 20 6e 65 65 64 65 64 20 66  ader is needed f
249d0 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20 73 79 73  or non-ASCII sys
249e0 74 65 6d 73 2e 20 20 49 74 20 69 73 20 61 6c 73  tems.  It is als
249f0 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62 79 20 46  o.** needed by F
24a00 54 53 33 20 77 68 65 6e 20 46 54 53 33 20 69 73  TS3 when FTS3 is
24a10 20 69 6e 63 6c 75 64 65 64 20 69 6e 20 74 68 65   included in the
24a20 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e 2e 0a 2a   amalgamation..*
24a30 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
24a40 51 4c 49 54 45 5f 41 53 43 49 49 29 20 7c 7c 20  QLITE_ASCII) || 
24a50 5c 0a 20 20 20 20 28 64 65 66 69 6e 65 64 28 53  \.    (defined(S
24a60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
24a70 33 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  3) && defined(SQ
24a80 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
24a90 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65 20 3c 63  N)).# include <c
24aa0 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a  type.h>.#endif..
24ab0 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
24ac0 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69 6d 69 63  ing macros mimic
24ad0 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 6c 69   the standard li
24ae0 62 72 61 72 79 20 66 75 6e 63 74 69 6f 6e 73 20  brary functions 
24af0 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a 20 69 73  toupper(),.** is
24b00 73 70 61 63 65 28 29 2c 20 69 73 61 6c 6e 75 6d  space(), isalnum
24b10 28 29 2c 20 69 73 64 69 67 69 74 28 29 20 61 6e  (), isdigit() an
24b20 64 20 69 73 78 64 69 67 69 74 28 29 2c 20 72 65  d isxdigit(), re
24b30 73 70 65 63 74 69 76 65 6c 79 2e 20 54 68 65 0a  spectively. The.
24b40 2a 2a 20 73 71 6c 69 74 65 20 76 65 72 73 69 6f  ** sqlite versio
24b50 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20 66 6f 72  ns only work for
24b60 20 41 53 43 49 49 20 63 68 61 72 61 63 74 65 72   ASCII character
24b70 73 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  s, regardless of
24b80 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23 69 66 64   locale..*/.#ifd
24b90 65 66 20 53 51 4c 49 54 45 5f 41 53 43 49 49 0a  ef SQLITE_ASCII.
24ba0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24bb0 54 6f 75 70 70 65 72 28 78 29 20 20 28 28 78 29  Toupper(x)  ((x)
24bc0 26 7e 28 73 71 6c 69 74 65 33 43 74 79 70 65 4d  &~(sqlite3CtypeM
24bd0 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ap[(unsigned cha
24be0 72 29 28 78 29 5d 26 30 78 32 30 29 29 0a 23 20  r)(x)]&0x20)).# 
24bf0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
24c00 73 70 61 63 65 28 78 29 20 20 20 28 73 71 6c 69  space(x)   (sqli
24c10 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
24c20 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
24c30 30 78 30 31 29 0a 23 20 64 65 66 69 6e 65 20 73  0x01).# define s
24c40 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
24c50 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
24c60 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
24c70 61 72 29 28 78 29 5d 26 30 78 30 36 29 0a 23 20  ar)(x)]&0x06).# 
24c80 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
24c90 61 6c 70 68 61 28 78 29 20 20 20 28 73 71 6c 69  alpha(x)   (sqli
24ca0 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
24cb0 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
24cc0 30 78 30 32 29 0a 23 20 64 65 66 69 6e 65 20 73  0x02).# define s
24cd0 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 78 29  qlite3Isdigit(x)
24ce0 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
24cf0 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
24d00 61 72 29 28 78 29 5d 26 30 78 30 34 29 0a 23 20  ar)(x)]&0x04).# 
24d10 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
24d20 78 64 69 67 69 74 28 78 29 20 20 28 73 71 6c 69  xdigit(x)  (sqli
24d30 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
24d40 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
24d50 30 78 30 38 29 0a 23 20 64 65 66 69 6e 65 20 73  0x08).# define s
24d60 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29  qlite3Tolower(x)
24d70 20 20 20 28 73 71 6c 69 74 65 33 55 70 70 65 72     (sqlite3Upper
24d80 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69 67 6e 65  ToLower[(unsigne
24d90 64 20 63 68 61 72 29 28 78 29 5d 29 0a 23 20 64  d char)(x)]).# d
24da0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71  efine sqlite3Isq
24db0 75 6f 74 65 28 78 29 20 20 20 28 73 71 6c 69 74  uote(x)   (sqlit
24dc0 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73 69  e3CtypeMap[(unsi
24dd0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26 30  gned char)(x)]&0
24de0 78 38 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  x80).#else.# def
24df0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
24e00 65 72 28 78 29 20 20 20 74 6f 75 70 70 65 72 28  er(x)   toupper(
24e10 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24e20 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
24e30 69 74 65 33 49 73 73 70 61 63 65 28 78 29 20 20  ite3Isspace(x)  
24e40 20 69 73 73 70 61 63 65 28 28 75 6e 73 69 67 6e   isspace((unsign
24e50 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
24e60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 61  efine sqlite3Isa
24e70 6c 6e 75 6d 28 78 29 20 20 20 69 73 61 6c 6e 75  lnum(x)   isalnu
24e80 6d 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  m((unsigned char
24e90 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
24ea0 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78 29  qlite3Isalpha(x)
24eb0 20 20 20 69 73 61 6c 70 68 61 28 28 75 6e 73 69     isalpha((unsi
24ec0 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
24ed0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24ee0 73 64 69 67 69 74 28 78 29 20 20 20 69 73 64 69  sdigit(x)   isdi
24ef0 67 69 74 28 28 75 6e 73 69 67 6e 65 64 20 63 68  git((unsigned ch
24f00 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
24f10 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
24f20 28 78 29 20 20 69 73 78 64 69 67 69 74 28 28 75  (x)  isxdigit((u
24f30 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24f40 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
24f50 65 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 74  e3Tolower(x)   t
24f60 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67 6e 65 64  olower((unsigned
24f70 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
24f80 69 6e 65 20 73 71 6c 69 74 65 33 49 73 71 75 6f  ine sqlite3Isquo
24f90 74 65 28 78 29 20 20 20 28 28 78 29 3d 3d 27 22  te(x)   ((x)=='"
24fa0 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c 7c 28 78  '||(x)=='\''||(x
24fb0 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d 27 60 27  )=='['||(x)=='`'
24fc0 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ).#endif.#ifndef
24fd0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
24fe0 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
24ff0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 49 64  .int sqlite3IsId
25000 43 68 61 72 28 75 38 29 3b 0a 23 65 6e 64 69 66  Char(u8);.#endif
25010 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 6e 61 6c  ../*.** Internal
25020 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f 74 6f 74   function protot
25030 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ypes.*/.int sqli
25040 74 65 33 53 74 72 49 43 6d 70 28 63 6f 6e 73 74  te3StrICmp(const
25050 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
25060 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
25070 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73 74 20 63  Strlen30(const c
25080 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c  har*);.char *sql
25090 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70 65 28 43  ite3ColumnType(C
250a0 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29 3b 0a 23  olumn*,char*);.#
250b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74  define sqlite3St
250c0 72 4e 49 43 6d 70 20 73 71 6c 69 74 65 33 5f 73  rNICmp sqlite3_s
250d0 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20 73 71 6c  trnicmp..int sql
250e0 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69 74 28 76  ite3MallocInit(v
250f0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
25100 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
25110 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
25120 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a 76 6f 69  Malloc(u64);.voi
25130 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
25140 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f 69 64 20  Zero(u64);.void 
25150 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63  *sqlite3DbMalloc
25160 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a 2c 20 75  Zero(sqlite3*, u
25170 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
25180 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
25190 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
251a0 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
251b0 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69 74 65 33  locRawNN(sqlite3
251c0 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72 20 2a 73  *, u64);.char *s
251d0 71 6c 69 74 65 33 44 62 53 74 72 44 75 70 28 73  qlite3DbStrDup(s
251e0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
251f0 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69  ar*);.char *sqli
25200 74 65 33 44 62 53 74 72 4e 44 75 70 28 73 71 6c  te3DbStrNDup(sql
25210 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
25220 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
25230 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 76 6f  qlite3Realloc(vo
25240 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  id*, u64);.void 
25250 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
25260 63 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20  cOrFree(sqlite3 
25270 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
25280 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
25290 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74 65 33 20  Realloc(sqlite3 
252a0 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36 34 29 3b  *, void *, u64);
252b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
252c0 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f  ree(sqlite3*, vo
252d0 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
252e0 65 33 44 62 46 72 65 65 4e 4e 28 73 71 6c 69 74  e3DbFreeNN(sqlit
252f0 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69 6e 74  e3*, void*);.int
25300 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
25310 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73  ze(void*);.int s
25320 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 53 69  qlite3DbMallocSi
25330 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69  ze(sqlite3*, voi
25340 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  d*);.void *sqlit
25350 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f 63 28  e3ScratchMalloc(
25360 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25370 65 33 53 63 72 61 74 63 68 46 72 65 65 28 76 6f  e3ScratchFree(vo
25380 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  id*);.void *sqli
25390 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28 69 6e  te3PageMalloc(in
253a0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
253b0 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a 29 3b  PageFree(void*);
253c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
253d0 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69 64 29  SetDefault(void)
253e0 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
253f0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f 69 64  _UNTESTABLE.void
25400 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e 4d 61   sqlite3BenignMa
25410 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64 20 28  llocHooks(void (
25420 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64 20 28  *)(void), void (
25430 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e 64 69  *)(void));.#endi
25440 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48 65 61  f.int sqlite3Hea
25450 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f 69 64  pNearlyFull(void
25460 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73 79 73  );../*.** On sys
25470 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c 65 20  tems with ample 
25480 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e 64 20  stack space and 
25490 74 68 61 74 20 73 75 70 70 6f 72 74 20 61 6c 6c  that support all
254a0 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a 20 75  oca(), make.** u
254b0 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29 20 74  se of alloca() t
254c0 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65 20 66  o obtain space f
254d0 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d 61 74  or large automat
254e0 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42 79 20  ic objects.  By 
254f0 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62 74 61  default,.** obta
25500 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20 6d 61  in space from ma
25510 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20 54 68  lloc()..**.** Th
25520 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75 74 69  e alloca() routi
25530 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72 6e 73  ne never returns
25540 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77 69 6c   NULL.  This wil
25550 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70 61 74  l cause code pat
25560 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61 6c 20  hs.** that deal 
25570 77 69 74 68 20 73 71 6c 69 74 65 33 53 74 61 63  with sqlite3Stac
25580 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75 72 65  kAlloc() failure
25590 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63 68 61  s to be unreacha
255a0 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ble..*/.#ifdef S
255b0 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f 43 41  QLITE_USE_ALLOCA
255c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
255d0 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28 44  3StackAllocRaw(D
255e0 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e 29 0a  ,N)   alloca(N).
255f0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25600 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44  StackAllocZero(D
25610 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c 6c 6f  ,N)  memset(allo
25620 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23 20 64  ca(N), 0, N).# d
25630 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
25640 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65 6c 73  ckFree(D,P).#els
25650 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25660 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77 28  e3StackAllocRaw(
25670 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33 44 62  D,N)   sqlite3Db
25680 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 0a 23  MallocRaw(D,N).#
25690 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
256a0 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c  tackAllocZero(D,
256b0 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  N)  sqlite3DbMal
256c0 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23 20 64  locZero(D,N).# d
256d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
256e0 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20 20 20  ckFree(D,P)     
256f0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
25700 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  D,P).#endif../* 
25710 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62 6f 74  Do not allow bot
25720 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20 4d 45  h MEMSYS5 and ME
25730 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65 66 69  MSYS3 to be defi
25740 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20 20 49  ned together.  I
25750 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c 20 64  f they.** are, d
25760 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33 0a 2a  isable MEMSYS3.*
25770 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
25780 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35 0a 63  ENABLE_MEMSYS5.c
25790 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 65 6d  onst sqlite3_mem
257a0 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69 74 65  _methods *sqlite
257b0 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35 28 76  3MemGetMemsys5(v
257c0 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53 51 4c  oid);.#undef SQL
257d0 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59  ITE_ENABLE_MEMSY
257e0 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66  S3.#endif.#ifdef
257f0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
25800 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73 71 6c  EMSYS3.const sql
25810 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73  ite3_mem_methods
25820 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65 74 4d   *sqlite3MemGetM
25830 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a 23 65  emsys3(void);.#e
25840 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66 20 53  ndif...#ifndef S
25850 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54  QLITE_MUTEX_OMIT
25860 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
25870 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74 20 2a  _methods const *
25880 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 4d 75  sqlite3DefaultMu
25890 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71 6c  tex(void);.  sql
258a0 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
258b0 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
258c0 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69 64 29  3NoopMutex(void)
258d0 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65  ;.  sqlite3_mute
258e0 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65 78 41  x *sqlite3MutexA
258f0 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69 6e 74  lloc(int);.  int
25900 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49 6e 69   sqlite3MutexIni
25910 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74 20 73  t(void);.  int s
25920 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64 28 76  qlite3MutexEnd(v
25930 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  oid);.#endif.#if
25940 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
25950 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26 26 20  _MUTEX_OMIT) && 
25960 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
25970 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20 76 6f  MUTEX_NOOP).  vo
25980 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79  id sqlite3Memory
25990 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b 0a 23  Barrier(void);.#
259a0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
259b0 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
259c0 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73 71 6c  er().#endif..sql
259d0 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74  ite3_int64 sqlit
259e0 65 33 53 74 61 74 75 73 56 61 6c 75 65 28 69 6e  e3StatusValue(in
259f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25a00 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20 69 6e  StatusUp(int, in
25a10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
25a20 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74 2c 20  StatusDown(int, 
25a30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25a40 65 33 53 74 61 74 75 73 48 69 67 68 77 61 74 65  e3StatusHighwate
25a50 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 2f 2a  r(int, int);../*
25a60 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74 65 78   Access to mutex
25a70 65 73 20 75 73 65 64 20 62 79 20 73 71 6c 69 74  es used by sqlit
25a80 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f 0a 73  e3_status() */.s
25a90 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
25aa0 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75 74 65  lite3Pcache1Mute
25ab0 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74 65 33  x(void);.sqlite3
25ac0 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 4d  _mutex *sqlite3M
25ad0 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69 64 29  allocMutex(void)
25ae0 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
25af0 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e 47 5f  E_OMIT_FLOATING_
25b00 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71 6c 69  POINT.  int sqli
25b10 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c 65 29  te3IsNaN(double)
25b20 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
25b30 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28 58 29   sqlite3IsNaN(X)
25b40 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a    0.#endif../*.*
25b50 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
25b60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
25b70 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20 69  tructure holds i
25b80 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
25b90 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e   SQL.** function
25ba0 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68 61 74  s arguments that
25bb0 20 61 72 65 20 74 68 65 20 70 61 72 61 6d 65 74   are the paramet
25bc0 65 72 73 20 74 6f 20 74 68 65 20 70 72 69 6e 74  ers to the print
25bd0 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f  f() function..*/
25be0 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72  .struct PrintfAr
25bf0 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e 74 20  guments {.  int 
25c00 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
25c10 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20 6e 75       /* Total nu
25c20 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
25c30 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73 65 64  s */.  int nUsed
25c40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
25c50 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67  /* Number of arg
25c60 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f 20 66  uments used so f
25c70 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  ar */.  sqlite3_
25c80 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b 20 20  value **apArg;  
25c90 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65 6e 74   /* The argument
25ca0 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a 0a 76   values */.};..v
25cb0 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50 72 69  oid sqlite3VXPri
25cc0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  ntf(StrAccum*, c
25cd0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61 5f 6c  onst char*, va_l
25ce0 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ist);.void sqlit
25cf0 65 33 58 50 72 69 6e 74 66 28 53 74 72 41 63 63  e3XPrintf(StrAcc
25d00 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  um*, const char*
25d10 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73 71  , ...);.char *sq
25d20 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73 71 6c  lite3MPrintf(sql
25d30 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72  ite3*,const char
25d40 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a 73  *, ...);.char *s
25d50 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66 28 73  qlite3VMPrintf(s
25d60 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
25d70 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a 23  ar*, va_list);.#
25d80 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
25d90 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69  E_DEBUG) || defi
25da0 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56 45 5f  ned(SQLITE_HAVE_
25db0 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f 69 64  OS_TRACE).  void
25dc0 20 73 71 6c 69 74 65 33 44 65 62 75 67 50 72 69   sqlite3DebugPri
25dd0 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ntf(const char*,
25de0 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a 23 69   ...);.#endif.#i
25df0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
25e00 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20 2a 73  _TEST).  void *s
25e10 71 6c 69 74 65 33 54 65 73 74 54 65 78 74 54 6f  qlite3TestTextTo
25e20 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  Ptr(const char*)
25e30 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65  ;.#endif..#if de
25e40 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
25e50 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  UG).  void sqlit
25e60 65 33 54 72 65 65 56 69 65 77 45 78 70 72 28 54  e3TreeViewExpr(T
25e70 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
25e80 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  Expr*, u8);.  vo
25e90 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
25ea0 65 77 42 61 72 65 45 78 70 72 4c 69 73 74 28 54  ewBareExprList(T
25eb0 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
25ec0 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74  ExprList*, const
25ed0 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
25ee0 73 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 45  sqlite3TreeViewE
25ef0 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65 77  xprList(TreeView
25f00 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69 73  *, const ExprLis
25f10 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  t*, u8, const ch
25f20 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  ar*);.  void sql
25f30 69 74 65 33 54 72 65 65 56 69 65 77 53 65 6c 65  ite3TreeViewSele
25f40 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  ct(TreeView*, co
25f50 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75 38 29  nst Select*, u8)
25f60 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
25f70 54 72 65 65 56 69 65 77 57 69 74 68 28 54 72 65  TreeViewWith(Tre
25f80 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 57 69  eView*, const Wi
25f90 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66  th*, u8);.#endif
25fa0 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ...void sqlite3S
25fb0 65 74 53 74 72 69 6e 67 28 63 68 61 72 20 2a 2a  etString(char **
25fc0 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  , sqlite3*, cons
25fd0 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
25fe0 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 50  qlite3ErrorMsg(P
25ff0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
26000 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
26010 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28 63 68  qlite3Dequote(ch
26020 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
26030 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f 6b 65  e3TokenInit(Toke
26040 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73  n*,char*);.int s
26050 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43 6f 64  qlite3KeywordCod
26060 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  e(const unsigned
26070 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   char*, int);.in
26080 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61 72 73  t sqlite3RunPars
26090 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  er(Parse*, const
260a0 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a 2a 29   char*, char **)
260b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  ;.void sqlite3Fi
260c0 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72 73 65  nishCoding(Parse
260d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
260e0 65 74 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a  etTempReg(Parse*
260f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
26100 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28 50 61  eleaseTempReg(Pa
26110 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73  rse*,int);.int s
26120 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52 61 6e  qlite3GetTempRan
26130 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a  ge(Parse*,int);.
26140 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65  void sqlite3Rele
26150 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50 61 72  aseTempRange(Par
26160 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f  se*,int,int);.vo
26170 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61 72 54  id sqlite3ClearT
26180 65 6d 70 52 65 67 43 61 63 68 65 28 50 61 72 73  empRegCache(Pars
26190 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  e*);.#ifdef SQLI
261a0 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71 6c  TE_DEBUG.int sql
261b0 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52 61 6e  ite3NoTempsInRan
261c0 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c 69 6e  ge(Parse*,int,in
261d0 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70 72 20  t);.#endif.Expr 
261e0 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c 6c 6f  *sqlite3ExprAllo
261f0 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  c(sqlite3*,int,c
26200 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e 74 29  onst Token*,int)
26210 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
26220 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  xpr(sqlite3*,int
26230 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76  ,const char*);.v
26240 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 41  oid sqlite3ExprA
26250 74 74 61 63 68 53 75 62 74 72 65 65 73 28 73 71  ttachSubtrees(sq
26260 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45 78 70  lite3*,Expr*,Exp
26270 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  r*,Expr*);.Expr 
26280 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28 50 61  *sqlite3PExpr(Pa
26290 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 2a  rse*, int, Expr*
262a0 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
262b0 71 6c 69 74 65 33 50 45 78 70 72 41 64 64 53 65  qlite3PExprAddSe
262c0 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70  lect(Parse*, Exp
262d0 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 45 78  r*, Select*);.Ex
262e0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
262f0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  nd(sqlite3*,Expr
26300 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 20  *, Expr*);.Expr 
26310 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75 6e 63  *sqlite3ExprFunc
26320 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  tion(Parse*,Expr
26330 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  List*, Token*);.
26340 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26350 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65 72 28  AssignVarNumber(
26360 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75  Parse*, Expr*, u
26370 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  32);.void sqlite
26380 33 45 78 70 72 44 65 6c 65 74 65 28 73 71 6c 69  3ExprDelete(sqli
26390 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78  te3*, Expr*);.Ex
263a0 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45  prList *sqlite3E
263b0 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28 50 61  xprListAppend(Pa
263c0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 45  rse*,ExprList*,E
263d0 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74 20  xpr*);.ExprList 
263e0 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74  *sqlite3ExprList
263f0 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50 61 72  AppendVector(Par
26400 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 49 64  se*,ExprList*,Id
26410 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f  List*,Expr*);.vo
26420 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
26430 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72 28 45  stSetSortOrder(E
26440 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76  xprList*,int);.v
26450 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
26460 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72 73 65  istSetName(Parse
26470 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65  *,ExprList*,Toke
26480 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  n*,int);.void sq
26490 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
264a0 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78 70 72  Span(Parse*,Expr
264b0 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29  List*,ExprSpan*)
264c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
264d0 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73 71 6c  prListDelete(sql
264e0 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ite3*, ExprList*
264f0 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 45 78  );.u32 sqlite3Ex
26500 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f 6e 73  prListFlags(cons
26510 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  t ExprList*);.in
26520 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28 73 71  t sqlite3Init(sq
26530 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b  lite3*, char**);
26540 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74  .int sqlite3Init
26550 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20  Callback(void*, 
26560 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61  int, char**, cha
26570 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
26580 65 33 50 72 61 67 6d 61 28 50 61 72 73 65 2a 2c  e3Pragma(Parse*,
26590 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
265a0 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66 6e 64  ken*,int);.#ifnd
265b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
265c0 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f 64 75  IRTUALTABLE.Modu
265d0 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61 67 6d  le *sqlite3Pragm
265e0 61 56 74 61 62 52 65 67 69 73 74 65 72 28 73 71  aVtabRegister(sq
265f0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
26600 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e 64 69  r *zName);.#endi
26610 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  f.void sqlite3Re
26620 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43  setAllSchemasOfC
26630 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69 74 65  onnection(sqlite
26640 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  3*);.void sqlite
26650 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d 61 28  3ResetOneSchema(
26660 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76  sqlite3*,int);.v
26670 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 6c 61  oid sqlite3Colla
26680 70 73 65 44 61 74 61 62 61 73 65 41 72 72 61 79  pseDatabaseArray
26690 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
266a0 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 49 6e   sqlite3CommitIn
266b0 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28 73 71  ternalChanges(sq
266c0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
266d0 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c 75 6d  lite3DeleteColum
266e0 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33 2a 2c  nNames(sqlite3*,
266f0 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
26700 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f 6d 45  ite3ColumnsFromE
26710 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 45  xprList(Parse*,E
26720 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c 43 6f  xprList*,i16*,Co
26730 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  lumn**);.void sq
26740 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64 43 6f  lite3SelectAddCo
26750 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c 6c 61  lumnTypeAndColla
26760 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c  tion(Parse*,Tabl
26770 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  e*,Select*);.Tab
26780 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73 75 6c  le *sqlite3Resul
26790 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50 61 72  tSetOfSelect(Par
267a0 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 76 6f  se*,Select*);.vo
267b0 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e 4d 61  id sqlite3OpenMa
267c0 73 74 65 72 54 61 62 6c 65 28 50 61 72 73 65 20  sterTable(Parse 
267d0 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78 20 2a  *, int);.Index *
267e0 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
267f0 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29 3b 0a  yIndex(Table*);.
26800 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  i16 sqlite3Colum
26810 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78 2a 2c  nOfIndex(Index*,
26820 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71 6c 69   i16);.void sqli
26830 74 65 33 53 74 61 72 74 54 61 62 6c 65 28 50 61  te3StartTable(Pa
26840 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
26850 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69  n*,int,int,int,i
26860 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  nt);.#if SQLITE_
26870 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f 43 4f  ENABLE_HIDDEN_CO
26880 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73 71 6c  LUMNS.  void sql
26890 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65 72  ite3ColumnProper
268a0 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 61 62  tiesFromName(Tab
268b0 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b 0a 23  le*, Column*);.#
268c0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
268d0 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70 65  lite3ColumnPrope
268e0 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54 2c  rtiesFromName(T,
268f0 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23  C) /* no-op */.#
26900 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
26910 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73  e3AddColumn(Pars
26920 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a  e*,Token*,Token*
26930 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26940 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73 65 2a  ddNotNull(Parse*
26950 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26960 69 74 65 33 41 64 64 50 72 69 6d 61 72 79 4b 65  ite3AddPrimaryKe
26970 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69  y(Parse*, ExprLi
26980 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  st*, int, int, i
26990 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
269a0 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74 72 61  3AddCheckConstra
269b0 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  int(Parse*, Expr
269c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
269d0 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75 65 28  AddDefaultValue(
269e0 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61 6e 2a  Parse*,ExprSpan*
269f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26a00 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28 50 61  ddCollateType(Pa
26a10 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76  rse*, Token*);.v
26a20 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 54 61  oid sqlite3EndTa
26a30 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
26a40 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65 6c 65  *,Token*,u8,Sele
26a50 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
26a60 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73 74 20  3ParseUri(const 
26a70 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
26a80 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74 2a 2c  *,unsigned int*,
26a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26aa0 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76 66 73       sqlite3_vfs
26ab0 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72 20 2a  **,char**,char *
26ac0 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c 69 74  *);.Btree *sqlit
26ad0 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65 65 28  e3DbNameToBtree(
26ae0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
26af0 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66 20 53  har*);..#ifdef S
26b00 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45  QLITE_UNTESTABLE
26b10 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26b20 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53 51 4c  3FaultSim(X) SQL
26b30 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20 20 69  ITE_OK.#else.  i
26b40 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53  nt sqlite3FaultS
26b50 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a  im(int);.#endif.
26b60 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74 65 33  .Bitvec *sqlite3
26b70 42 69 74 76 65 63 43 72 65 61 74 65 28 75 33 32  BitvecCreate(u32
26b80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
26b90 74 76 65 63 54 65 73 74 28 42 69 74 76 65 63 2a  tvecTest(Bitvec*
26ba0 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69  , u32);.int sqli
26bb0 74 65 33 42 69 74 76 65 63 54 65 73 74 4e 6f 74  te3BitvecTestNot
26bc0 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20 75 33  Null(Bitvec*, u3
26bd0 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  2);.int sqlite3B
26be0 69 74 76 65 63 53 65 74 28 42 69 74 76 65 63 2a  itvecSet(Bitvec*
26bf0 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c  , u32);.void sql
26c00 69 74 65 33 42 69 74 76 65 63 43 6c 65 61 72 28  ite3BitvecClear(
26c10 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20 76 6f  Bitvec*, u32, vo
26c20 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  id*);.void sqlit
26c30 65 33 42 69 74 76 65 63 44 65 73 74 72 6f 79 28  e3BitvecDestroy(
26c40 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20 73 71  Bitvec*);.u32 sq
26c50 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a 65 28  lite3BitvecSize(
26c60 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e 64 65  Bitvec*);.#ifnde
26c70 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41  f SQLITE_UNTESTA
26c80 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65 33 42  BLE.int sqlite3B
26c90 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65 73 74  itvecBuiltinTest
26ca0 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65 6e 64  (int,int*);.#end
26cb0 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71 6c 69  if..RowSet *sqli
26cc0 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28 73 71  te3RowSetInit(sq
26cd0 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c 20 75  lite3*, void*, u
26ce0 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a 76 6f  nsigned int);.vo
26cf0 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53 65 74  id sqlite3RowSet
26d00 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29 3b 0a  Clear(RowSet*);.
26d10 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
26d20 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65 74 2a  etInsert(RowSet*
26d30 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69  , i64);.int sqli
26d40 74 65 33 52 6f 77 53 65 74 54 65 73 74 28 52 6f  te3RowSetTest(Ro
26d50 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61 74 63  wSet*, int iBatc
26d60 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  h, i64);.int sql
26d70 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74 28 52  ite3RowSetNext(R
26d80 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b 0a 0a  owSet*, i64*);..
26d90 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
26da0 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c 54 6f  teView(Parse*,To
26db0 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  ken*,Token*,Toke
26dc0 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c  n*,ExprList*,Sel
26dd0 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 0a  ect*,int,int);..
26de0 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
26df0 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 7c  ITE_OMIT_VIEW) |
26e00 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  | !defined(SQLIT
26e10 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
26e20 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c 69 74  BLE).  int sqlit
26e30 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e  e3ViewGetColumnN
26e40 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61 62 6c  ames(Parse*,Tabl
26e50 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  e*);.#else.# def
26e60 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65 77 47  ine sqlite3ViewG
26e70 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 41 2c  etColumnNames(A,
26e80 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66  B) 0.#endif..#if
26e90 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41   SQLITE_MAX_ATTA
26ea0 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20 73 71  CHED>30.  int sq
26eb0 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
26ec0 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23 65 6e  ro(yDbMask);.#en
26ed0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
26ee0 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65 2a  DropTable(Parse*
26ef0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c  , SrcList*, int,
26f00 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26f10 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62 6c 65  te3CodeDropTable
26f20 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
26f30 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
26f40 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 61   sqlite3DeleteTa
26f50 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54 61  ble(sqlite3*, Ta
26f60 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  ble*);.#ifndef S
26f70 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 49  QLITE_OMIT_AUTOI
26f80 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69 64 20  NCREMENT.  void 
26f90 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
26fa0 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73 65 20  mentBegin(Parse 
26fb0 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f 69 64  *pParse);.  void
26fc0 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72   sqlite3Autoincr
26fd0 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65 20 2a  ementEnd(Parse *
26fe0 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65 0a 23  pParse);.#else.#
26ff0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
27000 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65 67 69  utoincrementBegi
27010 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20 73 71  n(X).# define sq
27020 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65  lite3Autoincreme
27030 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69 66 0a  ntEnd(X).#endif.
27040 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65  void sqlite3Inse
27050 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rt(Parse*, SrcLi
27060 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 49 64  st*, Select*, Id
27070 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  List*, int);.voi
27080 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61 79 41  d *sqlite3ArrayA
27090 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65 33 2a  llocate(sqlite3*
270a0 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74 2a 2c  ,void*,int,int*,
270b0 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20 2a 73  int*);.IdList *s
270c0 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70 70 65  qlite3IdListAppe
270d0 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c  nd(sqlite3*, IdL
270e0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
270f0 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  nt sqlite3IdList
27100 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c 63 6f  Index(IdList*,co
27110 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72 63 4c  nst char*);.SrcL
27120 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
27130 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c 69 74  istEnlarge(sqlit
27140 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  e3*, SrcList*, i
27150 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c 69 73  nt, int);.SrcLis
27160 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73  t *sqlite3SrcLis
27170 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65 33 2a  tAppend(sqlite3*
27180 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
27190 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53 72 63  n*, Token*);.Src
271a0 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63  List *sqlite3Src
271b0 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d 54 65  ListAppendFromTe
271c0 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  rm(Parse*, SrcLi
271d0 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  st*, Token*, Tok
271e0 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  en*,.           
271f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27200 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b 65 6e             Token
27210 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70 72  *, Select*, Expr
27220 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
27230 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
27240 49 6e 64 65 78 65 64 42 79 28 50 61 72 73 65 20  IndexedBy(Parse 
27250 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 6f  *, SrcList *, To
27260 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ken *);.void sql
27270 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e 63 41  ite3SrcListFuncA
27280 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rgs(Parse*, SrcL
27290 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29  ist*, ExprList*)
272a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
272b0 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50 61 72  exedByLookup(Par
272c0 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53 72 63  se *, struct Src
272d0 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 76 6f  List_item *);.vo
272e0 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73  id sqlite3SrcLis
272f0 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 53  tShiftJoinType(S
27300 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  rcList*);.void s
27310 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 73 73  qlite3SrcListAss
27320 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72 73 65  ignCursors(Parse
27330 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f  *, SrcList*);.vo
27340 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69 73 74  id sqlite3IdList
27350 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
27360 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20   IdList*);.void 
27370 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44 65  sqlite3SrcListDe
27380 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  lete(sqlite3*, S
27390 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65 78 20  rcList*);.Index 
273a0 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61 74 65  *sqlite3Allocate
273b0 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71 6c 69  IndexObject(sqli
273c0 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63 68 61  te3*,i16,int,cha
273d0 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  r**);.void sqlit
273e0 65 33 43 72 65 61 74 65 49 6e 64 65 78 28 50 61  e3CreateIndex(Pa
273f0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
27400 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72  n*,SrcList*,Expr
27410 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65 6e 2a  List*,int,Token*
27420 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
27430 20 20 20 20 20 20 20 20 20 20 20 20 45 78 70 72              Expr
27440 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29  *, int, int, u8)
27450 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72  ;.void sqlite3Dr
27460 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20  opIndex(Parse*, 
27470 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
27480 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63  int sqlite3Selec
27490 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  t(Parse*, Select
274a0 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a 29 3b  *, SelectDest*);
274b0 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33  .Select *sqlite3
274c0 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73 65 2a  SelectNew(Parse*
274d0 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63 4c 69  ,ExprList*,SrcLi
274e0 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69  st*,Expr*,ExprLi
274f0 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  st*,.           
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
27510 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 75 33  pr*,ExprList*,u3
27520 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a  2,Expr*,Expr*);.
27530 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
27540 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  ctDelete(sqlite3
27550 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54 61 62  *, Select*);.Tab
27560 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63 4c 69  le *sqlite3SrcLi
27570 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65 2a 2c  stLookup(Parse*,
27580 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
27590 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f 6e 6c  sqlite3IsReadOnl
275a0 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  y(Parse*, Table*
275b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
275c0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 50 61  ite3OpenTable(Pa
275d0 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  rse*, int iCur, 
275e0 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65 2a 2c  int iDb, Table*,
275f0 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66 69 6e   int);.#if defin
27600 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ed(SQLITE_ENABLE
27610 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45 5f 4c  _UPDATE_DELETE_L
27620 49 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e 65  IMIT) && !define
27630 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  d(SQLITE_OMIT_SU
27640 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a 73 71  BQUERY).Expr *sq
27650 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72 65 28  lite3LimitWhere(
27660 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
27670 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
27680 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68 61 72  Expr*,Expr*,char
27690 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  *);.#endif.void 
276a0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46 72 6f  sqlite3DeleteFro
276b0 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  m(Parse*, SrcLis
276c0 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  t*, Expr*);.void
276d0 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 50   sqlite3Update(P
276e0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
276f0 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72   ExprList*, Expr
27700 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65 49 6e  *, int);.WhereIn
27710 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65 72 65  fo *sqlite3Where
27720 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53 72 63  Begin(Parse*,Src
27730 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
27740 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
27750 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  u16,int);.void s
27760 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64 28 57  qlite3WhereEnd(W
27770 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f 67 45  hereInfo*);.LogE
27780 73 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 4f  st sqlite3WhereO
27790 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28 57 68  utputRowCount(Wh
277a0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
277b0 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73  qlite3WhereIsDis
277c0 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66 6f 2a  tinct(WhereInfo*
277d0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
277e0 65 72 65 49 73 4f 72 64 65 72 65 64 28 57 68 65  ereIsOrdered(Whe
277f0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27800 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65 72 65  lite3WhereOrdere
27810 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65 72 65  dInnerLoop(Where
27820 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
27830 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64  te3WhereIsSorted
27840 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
27850 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 43 6f  t sqlite3WhereCo
27860 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68 65 72  ntinueLabel(Wher
27870 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
27880 69 74 65 33 57 68 65 72 65 42 72 65 61 6b 4c 61  ite3WhereBreakLa
27890 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b  bel(WhereInfo*);
278a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72  .int sqlite3Wher
278b0 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65 72 65  eOkOnePass(Where
278c0 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a 23 64  Info*, int*);.#d
278d0 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4f 46  efine ONEPASS_OF
278e0 46 20 20 20 20 20 20 30 20 20 20 20 20 20 20 20  F      0        
278f0 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50 41 53  /* Use of ONEPAS
27900 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 2a 2f  S not allowed */
27910 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
27920 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20 20 20  _SINGLE   1     
27930 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 76 61     /* ONEPASS va
27940 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67 6c 65  lid for a single
27950 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f 0a 23   row update */.#
27960 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f 4d  define ONEPASS_M
27970 55 4c 54 49 20 20 20 20 32 20 20 20 20 20 20 20  ULTI    2       
27980 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20 76   /* ONEPASS is v
27990 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69 70 6c  alid for multipl
279a0 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64 20 73  e rows */.void s
279b0 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 4c 6f  qlite3ExprCodeLo
279c0 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28 50 61  adIndexColumn(Pa
279d0 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e  rse*, Index*, in
279e0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e  t, int, int);.in
279f0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
27a00 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72 73 65  eGetColumn(Parse
27a10 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
27a20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76  int, int, u8);.v
27a30 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
27a40 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f 52 65  odeGetColumnToRe
27a50 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  g(Parse*, Table*
27a60 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
27a70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27a80 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
27a90 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20 54 61  fTable(Vdbe*, Ta
27aa0 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
27ab0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27ac0 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65 28 50  e3ExprCodeMove(P
27ad0 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  arse*, int, int,
27ae0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27af0 74 65 33 45 78 70 72 43 61 63 68 65 53 74 6f 72  te3ExprCacheStor
27b00 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  e(Parse*, int, i
27b10 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  nt, int);.void s
27b20 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 50  qlite3ExprCacheP
27b30 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ush(Parse*);.voi
27b40 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
27b50 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b 0a 76  hePop(Parse*);.v
27b60 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
27b70 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72 73 65  acheRemove(Parse
27b80 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
27b90 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61  id sqlite3ExprCa
27ba0 63 68 65 43 6c 65 61 72 28 50 61 72 73 65 2a 29  cheClear(Parse*)
27bb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27bc0 70 72 43 61 63 68 65 41 66 66 69 6e 69 74 79 43  prCacheAffinityC
27bd0 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20 69 6e  hange(Parse*, in
27be0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27bf0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28 50 61  lite3ExprCode(Pa
27c00 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
27c10 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27c20 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61 72 73  xprCodeCopy(Pars
27c30 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
27c40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27c50 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c 65 28  rCodeFactorable(
27c60 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
27c70 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27c80 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74 28 50  ExprCodeAtInit(P
27c90 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
27ca0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
27cb0 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61 72 73  xprCodeTemp(Pars
27cc0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2a 29  e*, Expr*, int*)
27cd0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
27ce0 72 43 6f 64 65 54 61 72 67 65 74 28 50 61 72 73  rCodeTarget(Pars
27cf0 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  e*, Expr*, int);
27d00 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27d10 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28 50 61  rCodeAndCache(Pa
27d20 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
27d30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
27d40 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74 28 50  prCodeExprList(P
27d50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a  arse*, ExprList*
27d60 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
27d70 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
27d80 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20 30 78  ECEL_DUP      0x
27d90 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e 6f 74  01  /* Deep, not
27da0 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65 73 20   shallow copies 
27db0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
27dc0 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20 20 20  E_ECEL_FACTOR   
27dd0 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f 72 20  0x02  /* Factor 
27de0 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74 65 72  out constant ter
27df0 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
27e00 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20 20 20  LITE_ECEL_REF   
27e10 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73 65 20     0x04  /* Use 
27e20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69 4f 72  ExprList.u.x.iOr
27e30 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64 65 66  derByCol */.#def
27e40 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
27e50 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20 20 2f  OMITREF  0x08  /
27e60 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72 4c 69  * Omit if ExprLi
27e70 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
27e80 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  ol */.void sqlit
27e90 65 33 45 78 70 72 49 66 54 72 75 65 28 50 61 72  e3ExprIfTrue(Par
27ea0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c  se*, Expr*, int,
27eb0 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
27ec0 74 65 33 45 78 70 72 49 66 46 61 6c 73 65 28 50  te3ExprIfFalse(P
27ed0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
27ee0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27ef0 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
27f00 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Dup(Parse*, Expr
27f10 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61  *, int, int);.Ta
27f20 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69 6e 64  ble *sqlite3Find
27f30 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63  Table(sqlite3*,c
27f40 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
27f50 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  t char*);.#defin
27f60 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20 20 20  e LOCATE_VIEW   
27f70 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f   0x01.#define LO
27f80 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30 78 30  CATE_NOERR   0x0
27f90 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  2.Table *sqlite3
27fa0 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61 72 73  LocateTable(Pars
27fb0 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e  e*,u32 flags,con
27fc0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
27fd0 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  char*);.Table *s
27fe0 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c  qlite3LocateTabl
27ff0 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75 33 32  eItem(Parse*,u32
28000 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20 53 72   flags,struct Sr
28010 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49  cList_item *);.I
28020 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46 69 6e  ndex *sqlite3Fin
28030 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c  dIndex(sqlite3*,
28040 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e  const char*, con
28050 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20  st char*);.void 
28060 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64  sqlite3UnlinkAnd
28070 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71 6c 69  DeleteTable(sqli
28080 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
28090 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
280a0 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65  te3UnlinkAndDele
280b0 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65 33 2a  teIndex(sqlite3*
280c0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
280d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
280e0 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54 6f 6b  acuum(Parse*,Tok
280f0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
28100 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61 72 2a  3RunVacuum(char*
28110 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  *, sqlite3*, int
28120 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
28130 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73 71  NameFromToken(sq
28140 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  lite3*, Token*);
28150 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28160 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20 45  Compare(Expr*, E
28170 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
28180 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
28190 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45 78  reSkip(Expr*, Ex
281a0 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  pr*, int);.int s
281b0 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43 6f  qlite3ExprListCo
281c0 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a 2c  mpare(ExprList*,
281d0 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29   ExprList*, int)
281e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
281f0 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45 78 70  rImpliesExpr(Exp
28200 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
28210 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28220 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
28230 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
28240 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
28250 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
28260 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
28270 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
28280 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28290 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45  CoveredByIndex(E
282a0 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  xpr*, int iCur, 
282b0 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e  Index *pIdx);.in
282c0 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
282d0 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
282e0 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
282f0 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
28300 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  dbe(Parse*);.#if
28310 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
28320 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
28330 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
28340 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
28350 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
28360 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64  tate(void);.#end
28370 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
28380 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
28390 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
283a0 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
283b0 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
283c0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
283d0 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
283e0 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
283f0 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
28400 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
28410 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
28420 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
28430 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74 54 72   sqlite3CommitTr
28440 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a  ansaction(Parse*
28450 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
28460 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63 74 69  ollbackTransacti
28470 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
28480 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
28490 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
284a0 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
284b0 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
284c0 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  nts(sqlite3 *);.
284d0 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76  void sqlite3Leav
284e0 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f  eMutexAndCloseZo
284f0 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a  mbie(sqlite3*);.
28500 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
28510 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
28520 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28530 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f  rIsConstantNotJo
28540 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  in(Expr*);.int s
28550 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
28560 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45  tantOrFunction(E
28570 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  xpr*, u8);.int s
28580 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
28590 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61  tantOrGroupBy(Pa
285a0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
285b0 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
285c0 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
285d0 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
285e0 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
285f0 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
28600 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
28610 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
28620 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
28630 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
28640 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
28650 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
28660 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
28670 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
28680 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28690 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
286a0 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
286b0 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
286c0 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
286d0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
286e0 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
286f0 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
28700 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
28710 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
28720 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
28730 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
28740 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
28750 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
28760 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
28770 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
28780 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
28790 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
287a0 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
287b0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
287c0 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
287d0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
287e0 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
287f0 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
28800 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
28810 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
28820 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
28830 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
28840 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
28850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28860 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
28870 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69 66  ,int*,int*);.#if
28880 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28890 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f  E_NULL_TRIM.  vo
288a0 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b  id sqlite3SetMak
288b0 65 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c  eRecordP5(Vdbe*,
288c0 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
288d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
288e0 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41  etMakeRecordP5(A
288f0 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
28900 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
28910 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
28920 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Table*,int,int,i
28930 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  nt,int*,int,int,
28940 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28950 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
28960 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ices(Parse*, Tab
28970 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e  le*, int, u8, in
28980 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
28990 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
289a0 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
289b0 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
289c0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
289d0 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
289e0 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
289f0 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
28a00 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28a10 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
28a20 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
28a30 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
28a40 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
28a50 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
28a60 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
28a70 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
28a80 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
28a90 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
28aa0 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
28ab0 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
28ac0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
28ad0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
28ae0 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
28af0 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
28b00 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
28b10 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
28b20 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
28b30 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
28b40 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
28b50 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
28b60 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
28b70 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
28b80 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
28b90 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43  ,int);.#if SELEC
28ba0 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76  TTRACE_ENABLED.v
28bb0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
28bc0 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a  tSetName(Select*
28bd0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  ,const char*);.#
28be0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28bf0 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
28c00 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  me(A,B).#endif.v
28c10 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
28c20 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75  tBuiltinFuncs(Fu
28c30 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e  ncDef*,int);.Fun
28c40 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
28c50 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
28c60 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
28c70 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
28c80 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
28c90 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
28ca0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
28cb0 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
28cc0 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
28cd0 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
28ce0 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65  RegisterPerConne
28cf0 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63  ctionBuiltinFunc
28d00 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
28d10 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
28d20 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65  tyCheckOk(sqlite
28d30 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
28d40 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
28d50 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  rOk(sqlite3*);.v
28d60 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67  oid sqlite3Chang
28d70 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20  eCookie(Parse*, 
28d80 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
28d90 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
28da0 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65  VIEW) && !define
28db0 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
28dc0 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69  IGGER).void sqli
28dd0 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69  te3MaterializeVi
28de0 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ew(Parse*, Table
28df0 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
28e00 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
28e10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
28e20 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  GER.  void sqlit
28e30 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50  e3BeginTrigger(P
28e40 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f  arse*, Token*,To
28e50 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c  ken*,int,int,IdL
28e60 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20  ist*,SrcList*,. 
28e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e80 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
28e90 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
28ea0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54  d sqlite3FinishT
28eb0 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
28ec0 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b  riggerStep*, Tok
28ed0 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  en*);.  void sql
28ee0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28  ite3DropTrigger(
28ef0 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
28f00 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
28f10 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
28f20 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69  rPtr(Parse*, Tri
28f30 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  gger*);.  Trigge
28f40 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
28f50 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c  rsExist(Parse *,
28f60 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78   Table*, int, Ex
28f70 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d  prList*, int *pM
28f80 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20  ask);.  Trigger 
28f90 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c  *sqlite3TriggerL
28fa0 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
28fb0 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  le *);.  void sq
28fc0 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
28fd0 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
28fe0 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72  ger *, int, Expr
28ff0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  List*, int, Tabl
29000 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  e *,.           
29010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29020 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
29030 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
29040 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
29050 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69  ect(Parse *, Tri
29060 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  gger *, Table *,
29070 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
29080 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69  .  void sqliteVi
29090 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65  ewTriggers(Parse
290a0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
290b0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
290c0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
290d0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74  3DeleteTriggerSt
290e0 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  ep(sqlite3*, Tri
290f0 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72  ggerStep*);.  Tr
29100 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
29110 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53  e3TriggerSelectS
29120 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  tep(sqlite3*,Sel
29130 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ect*);.  Trigger
29140 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
29150 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73  ggerInsertStep(s
29160 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
29170 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  IdList*,.       
29180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
291a0 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20   Select*,u8);.  
291b0 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
291c0 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
291d0 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
291e0 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
291f0 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54   Expr*, u8);.  T
29200 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
29210 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65  te3TriggerDelete
29220 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
29230 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20  ken*, Expr*);.  
29240 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
29250 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
29260 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
29270 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
29280 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
29290 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
292a0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
292b0 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
292c0 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
292d0 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
292e0 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
292f0 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
29300 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
29310 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
29320 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
29330 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
29340 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
29350 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
29360 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
29370 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
29380 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
29390 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
293a0 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
293b0 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
293c0 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
293d0 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
293e0 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
293f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
29400 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
29410 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
29420 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
29430 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
29440 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
29450 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
29460 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
29470 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
29480 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
29490 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
294a0 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
294b0 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
294c0 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
294d0 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
294e0 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73  (p) 1.# define s
294f0 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
29500 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
29510 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
29520 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
29530 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
29540 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
29550 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
29560 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
29570 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
29580 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
29590 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
295a0 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
295b0 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
295c0 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
295d0 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
295e0 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
295f0 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
29600 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
29610 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
29620 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
29630 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
29640 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
29650 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
29660 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
29670 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
29680 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
29690 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
296a0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
296b0 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
296c0 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
296d0 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
296e0 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
296f0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
29700 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
29710 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
29720 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29730 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
29740 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
29750 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
29760 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
29770 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
29780 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
29790 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
297a0 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
297b0 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
297c0 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
297d0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
297e0 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
297f0 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
29800 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
29810 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
29820 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
29830 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
29840 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
29850 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
29860 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
29870 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
29880 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
29890 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
298a0 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
298b0 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
298c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
298d0 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
298e0 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
298f0 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
29900 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
29910 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
29920 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
29930 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
29940 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
29950 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
29960 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
29970 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
29980 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
29990 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
299a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
299b0 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
299c0 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
299d0 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
299e0 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
299f0 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
29a00 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
29a10 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
29a20 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
29a30 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
29a40 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
29a50 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
29a60 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
29a70 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
29a80 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
29a90 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29aa0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
29ab0 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
29ac0 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
29ad0 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
29ae0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
29af0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
29b00 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a  CANSTATUS) || \.
29b10 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
29b20 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
29b30 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20  OR_STAT4) || \. 
29b40 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
29b50 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41  E_EXPLAIN_ESTIMA
29b60 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71  TED_ROWS).u64 sq
29b70 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
29b80 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66  (LogEst);.#endif
29b90 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56  .VList *sqlite3V
29ba0 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a  ListAdd(sqlite3*
29bb0 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  ,VList*,const ch
29bc0 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f  ar*,int,int);.co
29bd0 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
29be0 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
29bf0 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74  VList*,int);.int
29c00 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d   sqlite3VListNam
29c10 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f  eToNum(VList*,co
29c20 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
29c30 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
29c40 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
29c50 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
29c60 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
29c70 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
29c80 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
29c90 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
29ca0 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
29cb0 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
29cc0 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
29cd0 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
29ce0 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
29cf0 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
29d00 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
29d10 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
29d20 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
29d30 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
29d40 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
29d50 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
29d60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
29d70 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
29d80 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
29d90 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
29da0 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
29db0 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
29dc0 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
29dd0 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
29de0 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
29df0 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
29e00 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
29e10 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
29e20 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
29e30 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
29e40 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
29e50 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
29e60 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
29e70 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
29e80 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
29e90 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
29ea0 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
29eb0 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
29ec0 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
29ed0 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
29ee0 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
29ef0 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
29f00 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
29f10 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
29f20 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
29f30 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
29f40 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
29f50 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
29f60 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
29f70 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
29f80 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
29f90 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
29fa0 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
29fb0 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
29fc0 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
29fd0 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
29fe0 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
29ff0 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
2a000 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2a010 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
2a020 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
2a030 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
2a040 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43  ar sqlite3TableC
2a050 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61  olumnAffinity(Ta
2a060 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  ble*,int);.char 
2a070 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
2a080 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
2a090 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2a0a0 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
2a0b0 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
2a0c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
2a0d0 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
2a0e0 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
2a0f0 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
2a100 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
2a110 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2a120 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
2a130 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2a140 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2a150 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72  lite3SystemError
2a160 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2a170 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
2a180 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
2a190 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2a1a0 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
2a1b0 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
2a1c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
2a1d0 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
2a1e0 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2a1f0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
2a200 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2a210 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
2a220 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  E).const char *s
2a230 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
2a240 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  t);.#endif..cons
2a250 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2a260 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
2a270 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
2a280 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
2a290 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2a2a0 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
2a2b0 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
2a2c0 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2a2d0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a2e0 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
2a2f0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
2a300 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
2a310 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a320 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
2a330 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2a340 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
2a350 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2a360 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
2a370 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
2a380 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69   const Token*, i
2a390 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2a3a0 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2a3b0 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
2a3c0 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
2a3d0 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2a3e0 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
2a3f0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2a400 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
2a410 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
2a420 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2a430 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
2a440 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
2a450 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
2a460 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2a470 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
2a480 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
2a490 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
2a4a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
2a4b0 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2a4c0 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
2a4d0 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2a4e0 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
2a4f0 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
2a500 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
2a510 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
2a520 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2a530 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
2a540 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
2a550 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
2a560 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
2a570 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
2a580 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
2a590 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
2a5a0 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
2a5b0 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
2a5c0 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
2a5d0 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
2a5e0 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
2a5f0 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
2a600 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2a610 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
2a620 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
2a630 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20  d *,u8,.        
2a640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a650 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2a660 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2a670 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
2a680 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
2a690 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
2a6a0 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2a6b0 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
2a6c0 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
2a6d0 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61  (sqlite3 *);.cha
2a6e0 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74  r *sqlite3Utf16t
2a6f0 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  o8(sqlite3 *, co
2a700 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2a710 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2a720 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
2a730 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
2a740 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
2a750 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
2a760 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2a770 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
2a780 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
2a790 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
2a7a0 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2a7b0 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2a7c0 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2a7d0 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
2a7e0 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
2a7f0 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74  t char sqlite3St
2a800 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72  rBINARY[];.exter
2a810 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2a820 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70   char sqlite3Upp
2a830 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74  erToLower[];.ext
2a840 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2a850 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43  ed char sqlite3C
2a860 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72  typeMap[];.exter
2a870 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71  n const Token sq
2a880 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d  lite3IntTokens[]
2a890 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
2a8a0 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74  WSD struct Sqlit
2a8b0 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  e3Config sqlite3
2a8c0 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46  Config;.extern F
2a8d0 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
2a8e0 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  e3BuiltinFunctio
2a8f0 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
2a900 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
2a910 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
2a920 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
2a930 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  f.#endif.void sq
2a940 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2a950 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
2a960 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2a970 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
2a980 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2a990 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2a9a0 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
2a9b0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
2a9c0 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2a9d0 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
2a9e0 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2a9f0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
2aa00 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
2aa10 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
2aa20 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
2aa30 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
2aa40 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2aa50 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
2aa60 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
2aa70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
2aa80 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2aa90 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
2aaa0 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 20  ct(Parse*, Expr 
2aab0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2aac0 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2aad0 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
2aae0 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2aaf0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2ab00 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54  3SelectWrongNumT
2ab10 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20  ermsError(Parse 
2ab20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20  *pParse, Select 
2ab30 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  *p);.int sqlite3
2ab40 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
2ab50 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2ab60 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2ab70 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2ab80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2ab90 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
2aba0 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2abb0 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2abc0 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e  ResolveExprListN
2abd0 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2abe0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76  *, ExprList*);.v
2abf0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2ac00 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
2ac10 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
2ac20 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
2ac30 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
2ac40 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
2ac50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
2ac60 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
2ac70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2ac80 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
2ac90 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
2aca0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
2acb0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2acc0 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
2acd0 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
2ace0 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
2acf0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2ad00 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
2ad10 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
2ad20 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
2ad30 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
2ad40 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
2ad50 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
2ad60 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
2ad70 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
2ad80 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
2ad90 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
2ada0 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
2adb0 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
2adc0 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
2add0 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
2ade0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2adf0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2ae00 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
2ae10 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a  (BusyHandler*);.
2ae20 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2ae30 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
2ae40 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2ae50 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
2ae60 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2ae70 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2ae80 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
2ae90 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
2aea0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2aeb0 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
2aec0 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
2aed0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2aee0 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
2aef0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2af00 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
2af10 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
2af20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2af30 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
2af40 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2af50 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
2af60 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
2af70 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
2af80 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
2af90 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
2afa0 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
2afb0 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
2afc0 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
2afd0 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
2afe0 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2aff0 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
2b000 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
2b010 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
2b020 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
2b030 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2b040 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
2b050 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2b060 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
2b070 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
2b080 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ex*);.#ifdef SQL
2b090 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
2b0a0 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
2b0b0 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
2b0c0 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2b0d0 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
2b0e0 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2b0f0 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
2b100 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69  t, void *,.  voi
2b110 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2b120 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2b130 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
2b140 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2b150 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2b160 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2b170 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2b180 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
2b190 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
2b1a0 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f  Destructor.);.vo
2b1b0 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75  id sqlite3OomFau
2b1c0 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  lt(sqlite3*);.vo
2b1d0 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65  id sqlite3OomCle
2b1e0 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ar(sqlite3*);.in
2b1f0 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
2b200 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
2b210 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
2b220 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
2b230 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
2b240 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
2b250 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
2b260 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
2b270 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b280 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
2b290 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
2b2a0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2b2b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2b2c0 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
2b2d0 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
2b2e0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2b2f0 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53  ite3AppendChar(S
2b300 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61  trAccum*,int,cha
2b310 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  r);.char *sqlite
2b320 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
2b330 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
2b340 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b350 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
2b360 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2b370 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
2b380 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
2b390 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2b3a0 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
2b3b0 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
2b3c0 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
2b3d0 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
2b3e0 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
2b3f0 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
2b400 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
2b410 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
2b420 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
2b430 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
2b440 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b450 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20  IT_SUBQUERY.int 
2b460 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2b470 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  IN(Parse*, Expr*
2b480 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2b490 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
2b4a0 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45  ckIN(x,y) SQLITE
2b4b0 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  _OK.#endif..#ifd
2b4c0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2b4d0 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
2b4e0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
2b4f0 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  yzeFunctions(voi
2b500 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
2b510 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75  tat4ProbeSetValu
2b520 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49 6e  e(.    Parse*,In
2b530 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63  dex*,UnpackedRec
2b540 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c  ord**,Expr*,int,
2b550 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  int,int*);.int s
2b560 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65  qlite3Stat4Value
2b570 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c  FromExpr(Parse*,
2b580 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69   Expr*, u8, sqli
2b590 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f  te3_value**);.vo
2b5a0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  id sqlite3Stat4P
2b5b0 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65  robeFree(Unpacke
2b5c0 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73  dRecord*);.int s
2b5d0 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d  qlite3Stat4Colum
2b5e0 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  n(sqlite3*, cons
2b5f0 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e  t void*, int, in
2b600 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
2b610 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  **);.char sqlite
2b620 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69  3IndexColumnAffi
2b630 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20 49  nity(sqlite3*, I
2b640 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  ndex*, int);.#en
2b650 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
2b660 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2b670 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
2b680 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  parser.*/.#ifnde
2b690 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
2b6a0 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71  ATION.  void *sq
2b6b0 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63  lite3ParserAlloc
2b6c0 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b  (void*(*)(u64));
2b6d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2b6e0 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
2b6f0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2b700 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2b710 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
2b720 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50  *, int, Token, P
2b730 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59  arse*);.#ifdef Y
2b740 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45  YTRACKMAXSTACKDE
2b750 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  PTH.  int sqlite
2b760 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b  3ParserStackPeak
2b770 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a  (void*);.#endif.
2b780 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74  .void sqlite3Aut
2b790 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28  oLoadExtensions(
2b7a0 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64  sqlite3*);.#ifnd
2b7b0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
2b7c0 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
2b7d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
2b7e0 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  eExtensions(sqli
2b7f0 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  te3*);.#else.# d
2b800 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f  efine sqlite3Clo
2b810 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a  seExtensions(X).
2b820 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2b830 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2b840 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20  ED_CACHE.  void 
2b850 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
2b860 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69  (Parse *, int, i
2b870 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  nt, u8, const ch
2b880 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  ar *);.#else.  #
2b890 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61  define sqlite3Ta
2b8a0 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c  bleLock(v,w,x,y,
2b8b0 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  z).#endif..#ifde
2b8c0 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
2b8d0 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54  int sqlite3Utf8T
2b8e0 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  o8(unsigned char
2b8f0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  *);.#endif..#ifd
2b900 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2b910 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
2b920 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2b930 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66  bClear(Y).#  def
2b940 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
2b950 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f  ync(X,Y) SQLITE_
2b960 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
2b970 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2b980 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2b990 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
2b9a0 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2b9b0 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
2b9c0 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73  b) 0.#  define s
2b9d0 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58  qlite3VtabLock(X
2b9e0 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2b9f0 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
2ba00 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2ba10 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
2ba20 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2ba30 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2ba40 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
2ba50 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
2ba60 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
2ba70 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
2ba80 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
2ba90 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
2baa0 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
2bab0 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
2bac0 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
2bad0 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
2bae0 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
2baf0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2bb00 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
2bb10 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e  b, Vdbe*);.   in
2bb20 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
2bb30 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
2bb40 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
2bb50 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
2bb60 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
2bb70 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
2bb80 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2bb90 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2bba0 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
2bbb0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2bbc0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
2bbd0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
2bbe0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
2bbf0 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
2bc00 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
2bc10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2bc20 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64  bImportErrmsg(Vd
2bc30 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61  be*, sqlite3_vta
2bc40 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  b*);.   VTable *
2bc50 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
2bc60 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
2bc70 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73  *);.   Module *s
2bc80 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74 65  qlite3VtabCreate
2bc90 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71 6c  Module(.     sql
2bca0 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73  ite3*,.     cons
2bcb0 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f  t char*,.     co
2bcc0 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2bcd0 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c  le*,.     void*,
2bce0 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f  .     void(*)(vo
2bcf0 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64 65  id*).   );.#  de
2bd00 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2bd10 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
2bd20 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
2bd30 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
2bd40 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2bd50 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73  te3VtabEponymous
2bd60 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a  TableInit(Parse*
2bd70 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
2bd80 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2bd90 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73  mousTableClear(s
2bda0 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29  qlite3*,Module*)
2bdb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2bdc0 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
2bdd0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
2bde0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
2bdf0 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
2be00 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2be10 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
2be20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2be30 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
2be40 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
2be50 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
2be60 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
2be70 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
2be80 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
2be90 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2bea0 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
2beb0 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
2bec0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2bed0 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
2bee0 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
2bef0 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
2bf00 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2bf10 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
2bf20 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2bf30 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
2bf40 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
2bf50 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
2bf60 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
2bf70 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
2bf80 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
2bf90 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
2bfa0 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
2bfb0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2bfc0 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
2bfd0 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2bfe0 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2bff0 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  lue**);.sqlite3_
2c000 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d  int64 sqlite3Stm
2c010 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c  tCurrentTime(sql
2c020 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
2c030 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50  int sqlite3VdbeP
2c040 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64  arameterIndex(Vd
2c050 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
2c060 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2c070 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
2c080 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
2c090 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   *, sqlite3_stmt
2c0a0 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2c0b0 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72  3ParserReset(Par
2c0c0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
2c0d0 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
2c0e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2c0f0 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
2c100 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
2c110 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2c120 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
2c130 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
2c140 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2c150 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
2c160 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
2c170 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
2c180 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
2c190 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
2c1a0 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
2c1b0 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
2c1c0 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
2c1d0 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
2c1e0 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
2c1f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2c200 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
2c210 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
2c220 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
2c230 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2c240 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
2c250 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54  f SQLITE_OMIT_CT
2c260 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65  E.  With *sqlite
2c270 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c  3WithAdd(Parse*,
2c280 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  With*,Token*,Exp
2c290 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b  rList*,Select*);
2c2a0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
2c2b0 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ithDelete(sqlite
2c2c0 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69  3*,With*);.  voi
2c2d0 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  d sqlite3WithPus
2c2e0 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c  h(Parse*, With*,
2c2f0 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66   u8);.#else.#def
2c300 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50  ine sqlite3WithP
2c310 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69  ush(x,y,z).#defi
2c320 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  ne sqlite3WithDe
2c330 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66  lete(x,y).#endif
2c340 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
2c350 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
2c360 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
2c370 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
2c380 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
2c390 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
2c3a0 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
2c3b0 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
2c3c0 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
2c3d0 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
2c3e0 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
2c3f0 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
2c400 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
2c410 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
2c420 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
2c430 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
2c440 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
2c450 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
2c460 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
2c470 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
2c480 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
2c490 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20  tionality is.** 
2c4a0 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
2c4b0 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
2c4c0 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
2c4d0 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
2c4e0 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
2c4f0 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2c500 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2c510 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
2c520 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2c530 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
2c540 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
2c550 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2c560 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2c570 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2c580 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
2c590 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
2c5a0 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
2c5b0 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
2c5c0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2c5d0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2c5e0 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  nt*, int);.  int
2c5f0 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
2c600 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
2c610 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
2c620 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
2c630 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
2c640 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
2c650 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
2c660 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
2c670 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2c680 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
2c690 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2c6a0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
2c6b0 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  eck(a,b,c,d,e,f)
2c6c0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2c6d0 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
2c6e0 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
2c6f0 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2c700 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20  a,b)         0. 
2c710 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2c720 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
2c730 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66 69  ,d)    0.  #defi
2c740 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65  ne sqlite3FkRefe
2c750 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20 20  rences(a)       
2c760 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
2c770 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2c780 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
2c790 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2c7a0 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
2c7b0 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
2c7c0 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
2c7d0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
2c7e0 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
2c7f0 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2c800 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
2c810 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
2c820 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
2c830 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
2c840 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
2c850 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
2c860 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
2c870 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
2c880 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2c890 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
2c8a0 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
2c8b0 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
2c8c0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2c8d0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
2c8e0 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
2c8f0 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
2c900 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
2c910 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
2c920 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
2c930 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
2c940 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
2c950 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
2c960 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2c970 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  E.** is not defi
2c980 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
2c990 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2c9a0 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2c9b0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2c9c0 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
2c9d0 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
2c9e0 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
2c9f0 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2ca00 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
2ca10 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
2ca20 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
2ca30 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
2ca40 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
2ca50 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
2ca60 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
2ca70 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
2ca80 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
2ca90 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
2caa0 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
2cab0 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
2cac0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2cad0 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
2cae0 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
2caf0 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
2cb00 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
2cb10 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
2cb20 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
2cb30 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
2cb40 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
2cb50 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
2cb60 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
2cb70 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
2cb80 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2cb90 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
2cba0 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
2cbb0 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
2cbc0 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
2cbd0 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
2cbe0 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
2cbf0 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
2cc00 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
2cc10 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
2cc20 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2cc30 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
2cc40 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
2cc50 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
2cc60 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2cc70 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
2cc80 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
2cc90 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
2cca0 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
2ccb0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2ccc0 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
2ccd0 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
2cce0 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
2ccf0 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
2cd00 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
2cd10 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
2cd20 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  32, int*, int*);
2cd30 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
2cd40 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2cd50 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
2cd60 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
2cd70 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
2cd80 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2cd90 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
2cda0 76 66 73 20 2a 29 3b 0a 23 69 66 64 65 66 20 53  vfs *);.#ifdef S
2cdb0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
2cdc0 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20  MIC_WRITE.  int 
2cdd0 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
2cde0 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
2cdf0 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e *);.#endif..in
2ce00 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2ce10 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74  IsInMemory(sqlit
2ce20 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69  e3_file *p);.voi
2ce30 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
2ce40 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
2ce50 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  file *);..void s
2ce60 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
2ce70 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73  ghtAndFlags(Pars
2ce80 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2ce90 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p);.#if SQLITE_
2cea0 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
2ceb0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
2cec0 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
2ced0 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
2cee0 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2cef0 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
2cf00 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
2cf10 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
2cf20 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
2cf30 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2cf40 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
2cf50 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
2cf60 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
2cf70 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
2cf80 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
2cf90 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
2cfa0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2cfb0 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
2cfc0 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
2cfd0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2cfe0 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
2cff0 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
2d000 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2d010 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
2d020 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
2d030 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d040 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
2d050 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
2d060 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2d070 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
2d080 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
2d090 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2d0a0 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
2d0b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2d0c0 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
2d0d0 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2d0e0 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
2d0f0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2d100 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
2d110 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ar *);.#endif../
2d120 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
2d130 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
2d140 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
2d150 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
2d160 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
2d170 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
2d180 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
2d190 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
2d1a0 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
2d1b0 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
2d1c0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2d1d0 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
2d1e0 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2d1f0 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
2d200 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
2d210 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
2d220 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
2d230 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
2d240 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20  e*);.SQLITE_API 
2d250 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
2d260 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  id (SQLITE_CDECL
2d270 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65   *sqlite3IoTrace
2d280 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
2d290 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
2d2a0 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
2d2b0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
2d2c0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
2d2d0 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2d2e0 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
2d2f0 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
2d300 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
2d310 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
2d320 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
2d330 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
2d340 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
2d350 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
2d360 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
2d370 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
2d380 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
2d390 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
2d3a0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2d3b0 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
2d3c0 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
2d3d0 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
2d3e0 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
2d3f0 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
2d400 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
2d410 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
2d420 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
2d430 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
2d440 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2d450 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
2d460 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2d470 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
2d480 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
2d490 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
2d4a0 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
2d4b0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
2d4c0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2d4d0 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
2d4e0 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2d4f0 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
2d500 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
2d510 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2d520 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
2d530 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2d540 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2d550 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
2d560 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
2d570 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
2d580 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
2d590 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
2d5a0 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2d5b0 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
2d5c0 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
2d5d0 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
2d5e0 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
2d5f0 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
2d600 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
2d610 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2d620 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
2d630 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
2d640 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
2d650 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
2d660 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
2d670 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
2d680 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
2d690 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
2d6a0 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
2d6b0 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
2d6c0 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
2d6d0 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
2d6e0 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
2d6f0 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
2d700 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
2d710 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
2d720 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
2d730 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
2d740 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2d750 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
2d760 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
2d770 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
2d780 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
2d790 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
2d7a0 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2d7b0 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
2d7c0 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
2d7d0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
2d7e0 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
2d7f0 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
2d800 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
2d810 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
2d820 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
2d830 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
2d840 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
2d850 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
2d860 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
2d870 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
2d880 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
2d890 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
2d8a0 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2d8b0 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
2d8c0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
2d8d0 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
2d8e0 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
2d8f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2d900 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
2d910 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
2d920 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2d930 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2d940 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
2d950 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2d960 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
2d970 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
2d980 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
2d990 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
2d9a0 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
2d9b0 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
2d9c0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2d9d0 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
2d9e0 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
2d9f0 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
2da00 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2da10 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
2da20 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
2da30 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
2da40 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
2da50 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
2da60 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
2da70 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
2da80 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
2da90 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
2daa0 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
2dab0 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
2dac0 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
2dad0 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
2dae0 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
2daf0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
2db00 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
2db10 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
2db20 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
2db30 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2db40 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
2db50 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
2db60 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
2db70 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65   sqlite3DbstatRe
2db80 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
2db90 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
2dba0 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53  lite3ExprVectorS
2dbb0 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29  ize(Expr *pExpr)
2dbc0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2dbd0 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a  rIsVector(Expr *
2dbe0 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
2dbf0 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64  lite3VectorField
2dc00 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69  Subexpr(Expr*, i
2dc10 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2dc20 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46  e3ExprForVectorF
2dc30 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72  ield(Parse*,Expr
2dc40 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2dc50 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d  ite3VectorErrorM
2dc60 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  sg(Parse*, Expr*
2dc70 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  );..#endif /* SQ
2dc80 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a           LITEINT_H */.