/ Hex Artifact Content
Login

Artifact 4faf6f2542949b61fd0aa69233dd23ad3469656c24085e874dbfa2e0cc03b901:


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 20   to COLUMNs */. 
18190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181a0 20 2f 2a 20 30 78 30 30 30 30 30 38 20 2f 2f 20   /* 0x000008 // 
181b0 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73  available for us
181c0 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  e */.#define EP_
181d0 44 69 73 74 69 6e 63 74 20 20 30 78 30 30 30 30  Distinct  0x0000
181e0 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  10 /* Aggregate 
181f0 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 44 49  function with DI
18200 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64 20 2a  STINCT keyword *
18210 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56 61 72  /.#define EP_Var
18220 53 65 6c 65 63 74 20 30 78 30 30 30 30 32 30 20  Select 0x000020 
18230 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20 63 6f  /* pSelect is co
18240 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20 63 6f  rrelated, not co
18250 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  nstant */.#defin
18260 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64 20 30  e EP_DblQuoted 0
18270 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b 65 6e  x000040 /* token
18280 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  .z was originall
18290 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a 23 64  y in "..." */.#d
182a0 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78 46 75  efine EP_InfixFu
182b0 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a 20 54  nc 0x000080 /* T
182c0 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66 69 78  rue for an infix
182d0 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b 45 2c   function: LIKE,
182e0 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a 23 64   GLOB, etc */.#d
182f0 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61 74 65  efine EP_Collate
18300 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a 20 54     0x000100 /* T
18310 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54  ree contains a T
18320 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72 61 74  K_COLLATE operat
18330 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
18340 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30 30 30  _Generic   0x000
18350 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20 43 4f  200 /* Ignore CO
18360 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e 69 74  LLATE or affinit
18370 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65 20 2a  y on this tree *
18380 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 74  /.#define EP_Int
18390 56 61 6c 75 65 20 20 30 78 30 30 30 34 30 30 20  Value  0x000400 
183a0 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c 75 65  /* Integer value
183b0 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 75 2e   contained in u.
183c0 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66 69 6e  iValue */.#defin
183d0 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74 20 30  e EP_xIsSelect 0
183e0 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70 53 65  x000800 /* x.pSe
183f0 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20 28 6f  lect is valid (o
18400 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69 73 74  therwise x.pList
18410 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20   is) */.#define 
18420 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30 78 30  EP_Skip      0x0
18430 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41 54 45  01000 /* COLLATE
18440 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b 45 4c  , AS, or UNLIKEL
18450 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  Y */.#define EP_
18460 52 65 64 75 63 65 64 20 20 20 30 78 30 30 32 30  Reduced   0x0020
18470 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63  00 /* Expr struc
18480 74 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  t EXPR_REDUCEDSI
18490 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
184a0 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f 6b 65  .#define EP_Toke
184b0 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30 20 2f  nOnly 0x004000 /
184c0 2a 20 45 78 70 72 20 73 74 72 75 63 74 20 45 58  * Expr struct EX
184d0 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45  PR_TOKENONLYSIZE
184e0 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f 0a 23   bytes only */.#
184f0 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74 69 63  define EP_Static
18500 20 20 20 20 30 78 30 30 38 30 30 30 20 2f 2a 20      0x008000 /* 
18510 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79 20 6e  Held in memory n
18520 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d  ot obtained from
18530 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23 64 65   malloc() */.#de
18540 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b 65 6e  fine EP_MemToken
18550 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20 4e 65    0x010000 /* Ne
18560 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44 62 46  ed to sqlite3DbF
18570 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f 6b 65  ree() Expr.zToke
18580 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f  n */.#define EP_
18590 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32 30 30  NoReduce  0x0200
185a0 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45 58 50  00 /* Cannot EXP
185b0 52 44 55 50 5f 52 45 44 55 43 45 20 74 68 69 73  RDUP_REDUCE this
185c0 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69 6e 65   Expr */.#define
185d0 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20 30 78   EP_Unlikely  0x
185e0 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69 6b 65  040000 /* unlike
185f0 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69 68 6f  ly() or likeliho
18600 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  od() function */
18610 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6e 73  .#define EP_Cons
18620 74 46 75 6e 63 20 30 78 30 38 30 30 30 30 20 2f  tFunc 0x080000 /
18630 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  * A SQLITE_FUNC_
18640 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53 4c 4f  CONSTANT or _SLO
18650 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  CHNG function */
18660 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61 6e 42  .#define EP_CanB
18670 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30 20 2f  eNull 0x100000 /
18680 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 64 65  * Can be null de
18690 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c 20 63  spite NOT NULL c
186a0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
186b0 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65 72 79  fine EP_Subquery
186c0 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20 54 72    0x200000 /* Tr
186d0 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20 54 4b  ee contains a TK
186e0 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74 6f 72  _SELECT operator
186f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 41   */.#define EP_A
18700 6c 69 61 73 20 20 20 20 20 30 78 34 30 30 30 30  lias     0x40000
18710 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69 61 73  0 /* Is an alias
18720 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20 73 65   for a result se
18730 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64 65 66  t column */.#def
18740 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20 20 20  ine EP_Leaf     
18750 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45 78 70   0x800000 /* Exp
18760 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67 68 74  r.pLeft, .pRight
18770 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61 6c 6c  , .u.pSelect all
18780 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   NULL */../*.** 
18790 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f 66 20  Combinations of 
187a0 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a  two or more EP_*
187b0 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e   flags.*/.#defin
187c0 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65 20 28  e EP_Propagate (
187d0 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f 53 75  EP_Collate|EP_Su
187e0 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f 70 61  bquery) /* Propa
187f0 67 61 74 65 20 74 68 65 73 65 20 62 69 74 73 20  gate these bits 
18800 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a  up tree */../*.*
18810 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63  * These macros c
18820 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74 65  an be used to te
18830 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61  st, set, or clea
18840 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a  r bits in the.**
18850 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69 65 6c   Expr.flags fiel
18860 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 78  d..*/.#define Ex
18870 70 72 48 61 73 50 72 6f 70 65 72 74 79 28 45 2c  prHasProperty(E,
18880 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e 66 6c  P)     (((E)->fl
18890 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
188a0 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c 6c 50  fine ExprHasAllP
188b0 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 28  roperty(E,P)  ((
188c0 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 3d  (E)->flags&(P))=
188d0 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20 45 78  =(P)).#define Ex
188e0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 45 2c  prSetProperty(E,
188f0 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c 61 67  P)     (E)->flag
18900 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65 20 45  s|=(P).#define E
18910 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72 74 79  xprClearProperty
18920 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66 6c 61  (E,P)   (E)->fla
18930 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54 68 65  gs&=~(P)../* The
18940 20 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65   ExprSetVVAPrope
18950 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73 20 75  rty() macro is u
18960 73 65 64 20 66 6f 72 20 56 65 72 69 66 69 63 61  sed for Verifica
18970 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69 6f 6e  tion, Validation
18980 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65 64 69  ,.** and Accredi
18990 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74  tation only.  It
189a0 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78 70 72   works like Expr
189b0 53 65 74 50 72 6f 70 65 72 74 79 28 29 20 64 75  SetProperty() du
189c0 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72 6f 63  ring VVA.** proc
189d0 65 73 73 65 73 20 62 75 74 20 69 73 20 61 20 6e  esses but is a n
189e0 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76 65 72  o-op for deliver
189f0 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  y..*/.#ifdef SQL
18a00 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65 66 69  ITE_DEBUG.# defi
18a10 6e 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  ne ExprSetVVAPro
18a20 70 65 72 74 79 28 45 2c 50 29 20 20 28 45 29 2d  perty(E,P)  (E)-
18a30 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65 6c 73  >flags|=(P).#els
18a40 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70 72 53  e.# define ExprS
18a50 65 74 56 56 41 50 72 6f 70 65 72 74 79 28 45 2c  etVVAProperty(E,
18a60 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  P).#endif../*.**
18a70 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
18a80 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65 72 20  mine the number 
18a90 6f 66 20 62 79 74 65 73 20 72 65 71 75 69 72 65  of bytes require
18aa0 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20 45 78  d by a normal Ex
18ab0 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20 61 6e  pr.** struct, an
18ac0 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69 74   Expr struct wit
18ad0 68 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  h the EP_Reduced
18ae0 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45 78 70   flag set in Exp
18af0 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64 20 61  r.flags.** and a
18b00 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77 69  n Expr struct wi
18b10 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f  th the EP_TokenO
18b20 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a 2a 2f  nly flag set..*/
18b30 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 46 55  .#define EXPR_FU
18b40 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  LLSIZE          
18b50 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20 20 20   sizeof(Expr)   
18b60 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c 6c 20          /* Full 
18b70 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  size */.#define 
18b80 45 58 50 52 5f 52 45 44 55 43 45 44 53 49 5a 45  EXPR_REDUCEDSIZE
18b90 20 20 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66          offsetof
18ba0 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20 20 2f  (Expr,iTable)  /
18bb0 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75 72 65  * Common feature
18bc0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50  s */.#define EXP
18bd0 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20  R_TOKENONLYSIZE 
18be0 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78       offsetof(Ex
18bf0 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a 20 46  pr,pLeft)   /* F
18c00 65 77 65 72 20 66 65 61 74 75 72 65 73 20 2a 2f  ewer features */
18c10 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 70 61  ../*.** Flags pa
18c20 73 73 65 64 20 74 6f 20 74 68 65 20 73 71 6c 69  ssed to the sqli
18c30 74 65 33 45 78 70 72 44 75 70 28 29 20 66 75 6e  te3ExprDup() fun
18c40 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65 20 68  ction. See the h
18c50 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a  eader comment.**
18c60 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33 45 78   above sqlite3Ex
18c70 70 72 44 75 70 28 29 20 66 6f 72 20 64 65 74 61  prDup() for deta
18c80 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ils..*/.#define 
18c90 45 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 20  EXPRDUP_REDUCE  
18ca0 20 20 20 20 20 20 20 30 78 30 30 30 31 20 20 2f         0x0001  /
18cb0 2a 20 55 73 65 64 20 72 65 64 75 63 65 64 2d 73  * Used reduced-s
18cc0 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73 20 2a  ize Expr nodes *
18cd0 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73 74 20  /../*.** A list 
18ce0 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  of expressions. 
18cf0 20 45 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   Each expression
18d00 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c 79 20   may optionally 
18d10 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20  have a.** name. 
18d20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20 63 6f   An expr/name co
18d30 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20 62 65  mbination can be
18d40 20 75 73 65 64 20 69 6e 20 73 65 76 65 72 61 6c   used in several
18d50 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a 20 61   ways, such.** a
18d60 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20 22 65  s the list of "e
18d70 78 70 72 20 41 53 20 49 44 22 20 66 69 65 6c 64  xpr AS ID" field
18d80 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20 22 53  s following a "S
18d90 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74 68 65  ELECT" or in the
18da0 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49 44 20  .** list of "ID 
18db0 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20 69 6e  = expr" items in
18dc0 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41 20 6c   an UPDATE.  A l
18dd0 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f  ist of expressio
18de0 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62  ns can.** also b
18df0 65 20 75 73 65 64 20 61 73 20 74 68 65 20 61 72  e used as the ar
18e00 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75 6e 63  gument to a func
18e10 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68 20 63  tion, in which c
18e20 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d 65 0a  ase the a.zName.
18e30 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f 74 20  ** field is not 
18e40 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64  used..**.** By d
18e50 65 66 61 75 6c 74 20 74 68 65 20 45 78 70 72 2e  efault the Expr.
18e60 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f 6c 64  zSpan field hold
18e70 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  s a human-readab
18e80 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e 20 6f  le description o
18e90 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65 73 73  f.** the express
18ea0 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 65 64  ion that is used
18eb0 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61 74 69   in the generati
18ec0 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65 73 73  on of error mess
18ed0 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75  ages and.** colu
18ee0 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e 20 74  mn labels.  In t
18ef0 68 69 73 20 63 61 73 65 2c 20 45 78 70 72 2e 7a  his case, Expr.z
18f00 53 70 61 6e 20 69 73 20 74 79 70 69 63 61 6c 6c  Span is typicall
18f10 79 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 0a  y the text of a.
18f20 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72 65 73  ** column expres
18f30 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69 73 74  sion as it exist
18f40 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20 73 74  s in a SELECT st
18f50 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65 76 65  atement.  Howeve
18f60 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62 53 70  r, if.** the bSp
18f70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69 73 20  anIsTab flag is 
18f80 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61 6e 20  set, then zSpan 
18f90 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20 74 6f  is overloaded to
18fa0 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65 0a 2a   mean the name.*
18fb0 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20  * of the result 
18fc0 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20 66 6f  column in the fo
18fd0 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54 41 42  rm: DATABASE.TAB
18fe0 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68 69 73  LE.COLUMN.  This
18ff0 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d 20 69   later.** form i
19000 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d 65 20  s used for name 
19010 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74 68 20  resolution with 
19020 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c 61 75  nested FROM clau
19030 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ses..*/.struct E
19040 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20  xprList {.  int 
19050 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  nExpr;          
19060 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
19070 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e 20 74  expressions on t
19080 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69 6e 74  he list */.  int
19090 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
190a0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
190b0 20 61 5b 5d 20 73 6c 6f 74 73 20 61 6c 6c 6f 63   a[] slots alloc
190c0 61 74 65 64 20 2a 2f 0a 20 20 73 74 72 75 63 74  ated */.  struct
190d0 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b   ExprList_item {
190e0 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70   /* For each exp
190f0 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c  ression in the l
19100 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ist */.    Expr 
19110 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
19120 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 20     /* The parse 
19130 74 72 65 65 20 66 6f 72 20 74 68 69 73 20 65 78  tree for this ex
19140 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20  pression */.    
19150 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
19160 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e          /* Token
19170 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
19180 20 74 68 69 73 20 65 78 70 72 65 73 73 69 6f 6e   this expression
19190 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 53   */.    char *zS
191a0 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  pan;            
191b0 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65 78 74  /* Original text
191c0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
191d0 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73 6f 72  on */.    u8 sor
191e0 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20  tOrder;         
191f0 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53 43 20    /* 1 for DESC 
19200 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a 2f 0a  or 0 for ASC */.
19210 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64 6f 6e      unsigned don
19220 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a 20 41  e :1;       /* A
19230 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63 61 74   flag to indicat
19240 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73 69 6e  e when processin
19250 67 20 69 73 20 66 69 6e 69 73 68 65 64 20 2a 2f  g is finished */
19260 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 62 53  .    unsigned bS
19270 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f 2a 20  panIsTab :1; /* 
19280 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42 2e 54  zSpan holds DB.T
19290 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f 0a 20  ABLE.COLUMN */. 
192a0 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65 75 73     unsigned reus
192b0 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20 43 6f  able :1;   /* Co
192c0 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
192d0 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20 2a 2f  n is reusable */
192e0 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  .    union {.   
192f0 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20 20 20     struct {.    
19300 20 20 20 20 75 31 36 20 69 4f 72 64 65 72 42 79      u16 iOrderBy
19310 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46 6f 72  Col;      /* For
19320 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c 75 6d   ORDER BY, colum
19330 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65 73 75  n number in resu
19340 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20 20 20  lt set */.      
19350 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20 20 20    u16 iAlias;   
19360 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
19370 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41 6c 69   into Parse.aAli
19380 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65 20 2a  as[] for zName *
19390 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20 20 20  /.      } x;.   
193a0 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45 78 70     int iConstExp
193b0 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20 52 65  rReg;      /* Re
193c0 67 69 73 74 65 72 20 69 6e 20 77 68 69 63 68 20  gister in which 
193d0 45 78 70 72 20 76 61 6c 75 65 20 69 73 20 63 61  Expr value is ca
193e0 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20 75 3b  ched */.    } u;
193f0 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20  .  } a[1];      
19400 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
19410 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61 63 68  ne slot for each
19420 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74   expression in t
19430 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f  he list */.};../
19440 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
19450 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
19460 72 65 20 69 73 20 75 73 65 64 20 62 79 20 74 68  re is used by th
19470 65 20 70 61 72 73 65 72 20 74 6f 20 72 65 63 6f  e parser to reco
19480 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65 20 70  rd both.** the p
19490 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 61 6e  arse tree for an
194a0 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
194b0 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e 70 75  the span of inpu
194c0 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a 2a 2a  t text for an.**
194d0 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2f 0a   expression..*/.
194e0 73 74 72 75 63 74 20 45 78 70 72 53 70 61 6e 20  struct ExprSpan 
194f0 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b  {.  Expr *pExpr;
19500 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
19510 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61 72 73   expression pars
19520 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f 6e 73  e tree */.  cons
19530 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74 3b 20  t char *zStart; 
19540 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61 72 61    /* First chara
19550 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20 74 65  cter of input te
19560 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  xt */.  const ch
19570 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20 2f 2a  ar *zEnd;     /*
19580 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72 20 70   One character p
19590 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66 20 69  ast the end of i
195a0 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d 3b 0a  nput text */.};.
195b0 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
195c0 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
195d0 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20 61 20  ture can hold a 
195e0 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66 20 69  simple list of i
195f0 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a 20 73  dentifiers,.** s
19600 75 63 68 20 61 73 20 74 68 65 20 6c 69 73 74 20  uch as the list 
19610 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65 20 66  "a,b,c" in the f
19620 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65 6d 65  ollowing stateme
19630 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  nts:.**.**      
19640 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28 61 2c  INSERT INTO t(a,
19650 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e 2e 3b  b,c) VALUES ...;
19660 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54 45 20  .**      CREATE 
19670 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74 28 61  INDEX idx ON t(a
19680 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20 20 43  ,b,c);.**      C
19690 52 45 41 54 45 20 54 52 49 47 47 45 52 20 74 72  REATE TRIGGER tr
196a0 69 67 20 42 45 46 4f 52 45 20 55 50 44 41 54 45  ig BEFORE UPDATE
196b0 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e   ON t(a,b,c) ...
196c0 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64 4c 69  ;.**.** The IdLi
196d0 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64 20 69  st.a.idx field i
196e0 73 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20  s used when the 
196f0 49 64 4c 69 73 74 20 72 65 70 72 65 73 65 6e 74  IdList represent
19700 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a 2a 2a  s the list of.**
19710 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 61 66   column names af
19720 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61 6d 65  ter a table name
19730 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20 73 74   in an INSERT st
19740 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74 68 65  atement.  In the
19750 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a 2a 2a   statement.**.**
19760 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19770 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a 2a 2a   t(a,b,c) ....**
19780 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20 74 68  .** If "a" is th
19790 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20 6f 66  e k-th column of
197a0 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68 65 6e   table "t", then
197b0 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69 64 78   IdList.a[0].idx
197c0 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49  ==k..*/.struct I
197d0 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75 63 74  dList {.  struct
197e0 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20   IdList_item {. 
197f0 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
19800 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
19810 74 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 2a  the identifier *
19820 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b 20 20  /.    int idx;  
19830 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
19840 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65 2e 61   in some Table.a
19850 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c 75 6d  Col[] of a colum
19860 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20 2a 2f  n named zName */
19870 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74 20 6e  .  } *a;.  int n
19880 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  Id;         /* N
19890 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74 69 66  umber of identif
198a0 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69 73 74  iers on the list
198b0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
198c0 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61 74 79  e bitmask dataty
198d0 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  pe defined below
198e0 20 69 73 20 75 73 65 64 20 66 6f 72 20 76 61 72   is used for var
198f0 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f  ious optimizatio
19900 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e 67 69  ns..**.** Changi
19910 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61 20 36  ng this from a 6
19920 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d 62 69  4-bit to a 32-bi
19930 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20 74 68  t type limits th
19940 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a 20 74  e number of.** t
19950 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69 6e 20  ables in a join 
19960 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20 6f 66  to 32 instead of
19970 20 36 34 2e 20 20 42 75 74 20 69 74 20 61 6c 73   64.  But it als
19980 6f 20 72 65 64 75 63 65 73 20 74 68 65 20 73 69  o reduces the si
19990 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c 69 62  ze.** of the lib
199a0 72 61 72 79 20 62 79 20 37 33 38 20 62 79 74 65  rary by 738 byte
199b0 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a 23 69  s on ix86..*/.#i
199c0 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d  fdef SQLITE_BITM
199d0 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70 65 64  ASK_TYPE.  typed
199e0 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d 41 53  ef SQLITE_BITMAS
199f0 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b 3b 0a  K_TYPE Bitmask;.
19a00 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20  #else.  typedef 
19a10 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23 65 6e  u64 Bitmask;.#en
19a20 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e  dif../*.** The n
19a30 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20 69 6e  umber of bits in
19a40 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22 42 4d   a Bitmask.  "BM
19a50 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d 61 73  S" means "BitMas
19a60 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64 65 66  k Size"..*/.#def
19a70 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74 29 28  ine BMS  ((int)(
19a80 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b 29 2a  sizeof(Bitmask)*
19a90 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62 69 74  8))../*.** A bit
19aa0 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a 2a 2f   in a Bitmask.*/
19ab0 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54  .#define MASKBIT
19ac0 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61 73 6b  (n)   (((Bitmask
19ad0 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
19ae0 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29 20 28  e MASKBIT32(n) (
19af0 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 31  ((unsigned int)1
19b00 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e 65 20  )<<(n)).#define 
19b10 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28 28 42  ALLBITS      ((B
19b20 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a 0a 2a  itmask)-1)../*.*
19b30 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
19b40 73 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69  structure descri
19b50 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63 6c 61  bes the FROM cla
19b60 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
19b70 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20 45 61  statement..** Ea
19b80 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75 62 71  ch table or subq
19b90 75 65 72 79 20 69 6e 20 74 68 65 20 46 52 4f 4d  uery in the FROM
19ba0 20 63 6c 61 75 73 65 20 69 73 20 61 20 73 65 70   clause is a sep
19bb0 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20 6f 66  arate element of
19bc0 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73 74 2e  .** the SrcList.
19bd0 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a 2a 2a  a[] array..**.**
19be0 20 57 69 74 68 20 74 68 65 20 61 64 64 69 74 69   With the additi
19bf0 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65 20 64  on of multiple d
19c00 61 74 61 62 61 73 65 20 73 75 70 70 6f 72 74 2c  atabase support,
19c10 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
19c20 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61 6e 20  tructure.** can 
19c30 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f 20  also be used to 
19c40 64 65 73 63 72 69 62 65 20 61 20 70 61 72 74 69  describe a parti
19c50 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75 63 68  cular table such
19c60 20 61 73 20 74 68 65 20 74 61 62 6c 65 20 74 68   as the table th
19c70 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66 69 65  at.** is modifie
19c80 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54 2c 20  d by an INSERT, 
19c90 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44 41 54  DELETE, or UPDAT
19ca0 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e  E statement.  In
19cb0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c 0a 2a   standard SQL,.*
19cc0 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65 20 6d  * such a table m
19cd0 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c 65 20  ust be a simple 
19ce0 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74 20 69  name: ID.  But i
19cf0 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20 74 61  n SQLite, the ta
19d00 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77 20 62  ble can.** now b
19d10 65 20 69 64 65 6e 74 69 66 69 65 64 20 62 79 20  e identified by 
19d20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2c  a database name,
19d30 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74 68 65   a dot, then the
19d40 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49 44 2e   table name: ID.
19d50 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6a 6f  ID..**.** The jo
19d60 69 6e 74 79 70 65 20 73 74 61 72 74 73 20 6f 75  intype starts ou
19d70 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20 6a 6f  t showing the jo
19d80 69 6e 20 74 79 70 65 20 62 65 74 77 65 65 6e 20  in type between 
19d90 74 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c  the current tabl
19da0 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e 65 78  e.** and the nex
19db0 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65 20 6c  t table on the l
19dc0 69 73 74 2e 20 20 54 68 65 20 70 61 72 73 65 72  ist.  The parser
19dd0 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69 73 74   builds the list
19de0 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20 42 75   this way..** Bu
19df0 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  t sqlite3SrcList
19e00 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28 29 20  ShiftJoinType() 
19e10 6c 61 74 65 72 20 73 68 69 66 74 73 20 74 68 65  later shifts the
19e20 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20 74 68   jointypes so th
19e30 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69 6e 74  at each.** joint
19e40 79 70 65 20 65 78 70 72 65 73 73 65 73 20 74 68  ype expresses th
19e50 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20 74  e join between t
19e60 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74 68 65  he table and the
19e70 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c 65 2e   previous table.
19e80 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 63 6f  .**.** In the co
19e90 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74 68 65  lUsed field, the
19ea0 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69 74 20   high-order bit 
19eb0 28 62 69 74 20 36 33 29 20 69 73 20 73 65 74 20  (bit 63) is set 
19ec0 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a 2a 20  if the table.** 
19ed0 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20 74 68  contains more th
19ee0 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20 61 6e  an 63 columns an
19ef0 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72 20 6c  d the 64-th or l
19f00 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73 20 75  ater column is u
19f10 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53  sed..*/.struct S
19f20 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e  rcList {.  int n
19f30 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  Src;        /* N
19f40 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 73 20  umber of tables 
19f50 6f 72 20 73 75 62 71 75 65 72 69 65 73 20 69 6e  or subqueries in
19f60 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65   the FROM clause
19f70 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c 6f 63   */.  u32 nAlloc
19f80 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
19f90 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c 6c 6f   of entries allo
19fa0 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62 65 6c  cated in a[] bel
19fb0 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 53  ow */.  struct S
19fc0 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a 20 20  rcList_item {.  
19fd0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
19fe0 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20 74 6f  a;  /* Schema to
19ff0 20 77 68 69 63 68 20 74 68 69 73 20 69 74 65 6d   which this item
1a000 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20 20 20   is fixed */.   
1a010 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61 73 65   char *zDatabase
1a020 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 64 61  ;  /* Name of da
1a030 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 74  tabase holding t
1a040 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  his table */.   
1a050 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
1a060 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
1a070 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 63  e table */.    c
1a080 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20 20 20  har *zAlias;    
1a090 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61 72 74   /* The "B" part
1a0a0 20 6f 66 20 61 20 22 41 20 41 53 20 42 22 20 70   of a "A AS B" p
1a0b0 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20 69 73  hrase.  zName is
1a0c0 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20 20 20   the "A" */.    
1a0d0 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20  Table *pTab;    
1a0e0 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61 62 6c    /* An SQL tabl
1a0f0 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
1a100 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20 20 20  to zName */.    
1a110 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
1a120 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20 73 74    /* A SELECT st
1a130 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69 6e 20  atement used in 
1a140 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62 6c 65  place of a table
1a150 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69 6e 74   name */.    int
1a160 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20 20 2f   addrFillSub;  /
1a170 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73 75 62  * Address of sub
1a180 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e 69 66  routine to manif
1a190 65 73 74 20 61 20 73 75 62 71 75 65 72 79 20 2a  est a subquery *
1a1a0 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 74  /.    int regRet
1a1b0 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  urn;    /* Regis
1a1c0 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65 74 75  ter holding retu
1a1d0 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20 61 64  rn address of ad
1a1e0 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20 20 20  drFillSub */.   
1a1f0 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b 20   int regResult; 
1a200 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 73 20     /* Registers 
1a210 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74 73 20  holding results 
1a220 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  of a co-routine 
1a230 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 7b 0a  */.    struct {.
1a240 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74 79 70        u8 jointyp
1a250 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70 65 20  e;      /* Type 
1a260 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e 20  of join between 
1a270 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64 20 74  this table and t
1a280 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f 0a 20  he previous */. 
1a290 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 6e 6f       unsigned no
1a2a0 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20 20 20  tIndexed :1;    
1a2b0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65  /* True if there
1a2c0 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45 58 45   is a NOT INDEXE
1a2d0 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  D clause */.    
1a2e0 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49 6e 64    unsigned isInd
1a2f0 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f 2a 20  exedBy :1;   /* 
1a300 54 72 75 65 20 69 66 20 74 68 65 72 65 20 69 73  True if there is
1a310 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59 20 63   an INDEXED BY c
1a320 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20 20 75  lause */.      u
1a330 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46 75 6e  nsigned isTabFun
1a340 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54 72 75  c :1;     /* Tru
1a350 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c 75 65  e if table-value
1a360 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e 74 61  d-function synta
1a370 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67  x */.      unsig
1a380 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74 65 64  ned isCorrelated
1a390 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66   :1;  /* True if
1a3a0 20 73 75 62 2d 71 75 65 72 79 20 69 73 20 63 6f   sub-query is co
1a3b0 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20 20 20  rrelated */.    
1a3c0 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61 43 6f    unsigned viaCo
1a3d0 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f 2a 20  routine :1;  /* 
1a3e0 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73 20 61  Implemented as a
1a3f0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f 0a 20   co-routine */. 
1a400 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73       unsigned is
1a410 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20 20 20  Recursive :1;   
1a420 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65 63 75  /* True for recu
1a430 72 73 69 76 65 20 72 65 66 65 72 65 6e 63 65 20  rsive reference 
1a440 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20 20 7d  in WITH */.    }
1a450 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c   fg;.#ifndef SQL
1a460 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1a470 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63 74 49  .    u8 iSelectI
1a480 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70 53 65  d;     /* If pSe
1a490 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69 64 20  lect!=0, the id 
1a4a0 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c 65 63  of the sub-selec
1a4b0 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65 6e 64  t in EQP */.#end
1a4c0 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75 72 73  if.    int iCurs
1a4d0 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  or;      /* The 
1a4e0 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75 6d 62  VDBE cursor numb
1a4f0 65 72 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  er used to acces
1a500 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  s this table */.
1a510 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b 20 20      Expr *pOn;  
1a520 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f 4e 20        /* The ON 
1a530 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e  clause of a join
1a540 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74 20 2a   */.    IdList *
1a550 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54 68 65  pUsing;   /* The
1a560 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66   USING clause of
1a570 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 42   a join */.    B
1a580 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64 3b 20  itmask colUsed; 
1a590 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c 4e 29   /* Bit N (1<<N)
1a5a0 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e 20 4e   set if column N
1a5b0 20 6f 66 20 70 54 61 62 20 69 73 20 75 73 65 64   of pTab is used
1a5c0 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a   */.    union {.
1a5d0 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49 6e 64        char *zInd
1a5e0 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20 49 64  exedBy;    /* Id
1a5f0 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20 22 49  entifier from "I
1a600 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e 64 65  NDEXED BY <zInde
1a610 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  x>" clause */.  
1a620 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 46      ExprList *pF
1a630 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72 67 75  uncArg;  /* Argu
1a640 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65 2d 76  ments to table-v
1a650 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 2a  alued-function *
1a660 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20 20 20  /.    } u1;.    
1a670 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65 78 3b  Index *pIBIndex;
1a680 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72 75 63    /* Index struc
1a690 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  ture correspondi
1a6a0 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65 78 65  ng to u1.zIndexe
1a6b0 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b  dBy */.  } a[1];
1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a6d0 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61  One entry for ea
1a6e0 63 68 20 69 64 65 6e 74 69 66 69 65 72 20 6f 6e  ch identifier on
1a6f0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
1a700 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74 65 64  ./*.** Permitted
1a710 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65 20 53   values of the S
1a720 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74 79 70  rcList.a.jointyp
1a730 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65 66 69  e field.*/.#defi
1a740 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20 20 20  ne JT_INNER     
1a750 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41 6e 79  0x0001    /* Any
1a760 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72 20 6f   kind of inner o
1a770 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a 2f 0a  r cross join */.
1a780 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f 53 53  #define JT_CROSS
1a790 20 20 20 20 20 30 78 30 30 30 32 20 20 20 20 2f       0x0002    /
1a7a0 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65 20 6f  * Explicit use o
1a7b0 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65 79 77  f the CROSS keyw
1a7c0 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ord */.#define J
1a7d0 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78 30 30  T_NATURAL   0x00
1a7e0 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20 66 6f  04    /* True fo
1a7f0 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20 6a 6f  r a "natural" jo
1a800 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1a810 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30 30 30  _LEFT      0x000
1a820 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f 75 74  8    /* Left out
1a830 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  er join */.#defi
1a840 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20 20 20  ne JT_RIGHT     
1a850 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52 69 67  0x0010    /* Rig
1a860 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  ht outer join */
1a870 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55 54 45  .#define JT_OUTE
1a880 52 20 20 20 20 20 30 78 30 30 32 30 20 20 20 20  R     0x0020    
1a890 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22 20 6b  /* The "OUTER" k
1a8a0 65 79 77 6f 72 64 20 69 73 20 70 72 65 73 65 6e  eyword is presen
1a8b0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  t */.#define JT_
1a8c0 45 52 52 4f 52 20 20 20 20 20 30 78 30 30 34 30  ERROR     0x0040
1a8d0 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 6f      /* unknown o
1a8e0 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20 6a 6f  r unsupported jo
1a8f0 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f 2a 0a  in type */.../*.
1a900 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f 70 72  ** Flags appropr
1a910 69 61 74 65 20 66 6f 72 20 74 68 65 20 77 63 74  iate for the wct
1a920 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65 74 65  rlFlags paramete
1a930 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68 65 72  r of sqlite3Wher
1a940 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e 64 20  eBegin().** and 
1a950 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e 77 63  the WhereInfo.wc
1a960 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65 72 2e  trlFlags member.
1a970 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1a980 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
1a990 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
1a9a0 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45 5f 55  :.**     WHERE_U
1a9b0 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53 46 5f  SE_LIMIT  == SF_
1a9c0 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a 23 64  FixedLimit.*/.#d
1a9d0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44 45  efine WHERE_ORDE
1a9e0 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30 78 30  RBY_NORMAL   0x0
1a9f0 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a 2f 0a  000 /* No-op */.
1aa00 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1aa10 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20 20 30  DERBY_MIN      0
1aa20 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52 20 42  x0001 /* ORDER B
1aa30 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72  Y processing for
1aa40 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f 0a 23   min() func */.#
1aa50 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 44  define WHERE_ORD
1aa60 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20 30 78  ERBY_MAX      0x
1aa70 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20 42 59  0002 /* ORDER BY
1aa80 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f 72 20   processing for 
1aa90 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a 23 64  max() func */.#d
1aaa0 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1aab0 41 53 53 5f 44 45 53 49 52 45 44 20 20 30 78 30  ASS_DESIRED  0x0
1aac0 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f 20 64  004 /* Want to d
1aad0 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44 41 54  o one-pass UPDAT
1aae0 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64 65 66  E/DELETE */.#def
1aaf0 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50 41 53  ine WHERE_ONEPAS
1ab00 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30 30 30  S_MULTIROW 0x000
1ab10 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73 20  8 /* ONEPASS is 
1ab20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65  ok with multiple
1ab30 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65   rows */.#define
1ab40 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41 54 45   WHERE_DUPLICATE
1ab50 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30 20 2f  S_OK    0x0010 /
1ab60 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e 20 61  * Ok to return a
1ab70 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e 20 6f   row more than o
1ab80 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  nce */.#define W
1ab90 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41 55 53  HERE_OR_SUBCLAUS
1aba0 45 20 20 20 20 20 30 78 30 30 32 30 20 2f 2a 20  E     0x0020 /* 
1abb0 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73 75 62  Processing a sub
1abc0 2d 57 48 45 52 45 20 61 73 20 70 61 72 74 20 6f  -WHERE as part o
1abd0 66 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  f.              
1abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1abf0 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 20 4f          ** the O
1ac00 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 20  R optimization  
1ac10 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ac20 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20 20 20  _GROUPBY        
1ac30 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f 72 64    0x0040 /* pOrd
1ac40 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79 20 61  erBy is really a
1ac50 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65   GROUP BY */.#de
1ac60 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1ac70 4e 43 54 42 59 20 20 20 20 20 20 20 30 78 30 30  NCTBY       0x00
1ac80 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79 20 69  80 /* pOrderby i
1ac90 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53 54 49  s really a DISTI
1aca0 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  NCT clause */.#d
1acb0 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41 4e 54  efine WHERE_WANT
1acc0 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30 78 30  _DISTINCT    0x0
1acd0 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74 70 75  100 /* All outpu
1ace0 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20 64 69  t needs to be di
1acf0 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66 69 6e  stinct */.#defin
1ad00 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59 47 52  e WHERE_SORTBYGR
1ad10 4f 55 50 20 20 20 20 20 20 30 78 30 32 30 30 20  OUP      0x0200 
1ad20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c 69 74  /* Support sqlit
1ad30 65 33 57 68 65 72 65 49 73 53 6f 72 74 65 64 28  e3WhereIsSorted(
1ad40 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  ) */.#define WHE
1ad50 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20 20 20  RE_SEEK_TABLE   
1ad60 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20 44 6f      0x0400 /* Do
1ad70 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73   not defer seeks
1ad80 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65 20 2a   on main table *
1ad90 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ada0 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20 20 20  ORDERBY_LIMIT   
1adb0 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44 45 52   0x0800 /* ORDER
1adc0 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68 65 20  BY+LIMIT on the 
1add0 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a 23 64  inner loop */.#d
1ade0 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b  efine WHERE_SEEK
1adf0 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30 78 31  _UNIQ_TABLE  0x1
1ae00 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65  000 /* Do not de
1ae10 66 65 72 20 73 65 65 6b 73 20 69 66 20 75 6e 69  fer seeks if uni
1ae20 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  que */.         
1ae30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1ae40 2a 20 20 20 20 20 30 78 32 30 30 30 20 20 20 20  *     0x2000    
1ae50 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1ae60 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  ed */.#define WH
1ae70 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20  ERE_USE_LIMIT   
1ae80 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55       0x4000 /* U
1ae90 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20  se the LIMIT in 
1aea0 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a  cost estimates *
1aeb0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  /.              
1aec0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20            /*    
1aed0 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63   0x8000    not c
1aee0 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f  urrently used */
1aef0 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  ../* Allowed ret
1af00 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
1af10 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44 69  sqlite3WhereIsDi
1af20 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66  stinct().*/.#def
1af30 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1af40 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20  CT_NOOP      0  
1af50 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  /* DISTINCT keyw
1af60 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a  ord not used */.
1af70 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1af80 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20  STINCT_UNIQUE   
1af90 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63   1  /* No duplic
1afa0 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ates */.#define 
1afb0 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f  WHERE_DISTINCT_O
1afc0 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41  RDERED   2  /* A
1afd0 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20 61 72  ll duplicates ar
1afe0 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64  e adjacent */.#d
1aff0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1b000 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33  INCT_UNORDERED 3
1b010 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20    /* Duplicates 
1b020 61 72 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f  are scattered */
1b030 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f  ../*.** A NameCo
1b040 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20 61 20  ntext defines a 
1b050 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68  context in which
1b060 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c   to resolve tabl
1b070 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20  e and column.** 
1b080 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74  names.  The cont
1b090 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20  ext consists of 
1b0a0 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73  a list of tables
1b0b0 20 28 74 68 65 20 70 53 72 63 4c 69 73 74 29 20   (the pSrcList) 
1b0c0 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c  field and.** a l
1b0d0 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70  ist of named exp
1b0e0 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29  ression (pEList)
1b0f0 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70  .  The named exp
1b100 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79  ression list may
1b110 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68  .** be NULL.  Th
1b120 65 20 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e  e pSrc correspon
1b130 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63  ds to the FROM c
1b140 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
1b150 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74  T or.** to the t
1b160 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61  able being opera
1b170 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54  ted on by INSERT
1b180 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c  , UPDATE, or DEL
1b190 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c  ETE.  The.** pEL
1b1a0 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  ist corresponds 
1b1b0 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 73 65  to the result se
1b1c0 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e  t of a SELECT an
1b1d0 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a  d is NULL for.**
1b1e0 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74   other statement
1b1f0 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  s..**.** NameCon
1b200 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73  texts can be nes
1b210 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c  ted.  When resol
1b220 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20  ving names, the 
1b230 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f  inner-most.** co
1b240 6e 74 65 78 74 20 69 73 20 73 65 61 72 63 68 65  ntext is searche
1b250 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20  d first.  If no 
1b260 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20  match is found, 
1b270 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a  the next outer.*
1b280 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65  * context is che
1b290 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72 65 20  cked.  If there 
1b2a0 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63  is still no matc
1b2b0 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74  h, the next cont
1b2c0 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65  ext.** is checke
1b2d0 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65 73 73  d.  This process
1b2e0 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c   continues until
1b2f0 20 65 69 74 68 65 72 20 61 20 6d 61 74 63 68 20   either a match 
1b300 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61  is found.** or a
1b310 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20  ll contexts are 
1b320 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d  check.  When a m
1b330 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74  atch is found, t
1b340 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f  he nRef member o
1b350 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74  f.** the context
1b360 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
1b370 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65  match is increme
1b380 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68  nted..**.** Each
1b390 20 73 75 62 71 75 65 72 79 20 67 65 74 73 20 61   subquery gets a
1b3a0 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74   new NameContext
1b3b0 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66 69 65  .  The pNext fie
1b3c0 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65  ld points to the
1b3d0 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20  .** NameContext 
1b3e0 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 71 75  in the parent qu
1b3f0 65 72 79 2e 20 20 54 68 75 73 20 74 68 65 20 70  ery.  Thus the p
1b400 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69  rocess of scanni
1b410 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f  ng the.** NameCo
1b420 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65  ntext list corre
1b430 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68  sponds to search
1b440 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75 63 63  ing through succ
1b450 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a  essively outer.*
1b460 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f  * subqueries loo
1b470 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68  king for a match
1b480 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65  ..*/.struct Name
1b490 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73  Context {.  Pars
1b4a0 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20  e *pParse;      
1b4b0 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a   /* The parser *
1b4c0 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72  /.  SrcList *pSr
1b4d0 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20  cList;   /* One 
1b4e0 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75  or more tables u
1b4f0 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e  sed to resolve n
1b500 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  ames */.  ExprLi
1b510 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f  st *pEList;    /
1b520 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20  * Optional list 
1b530 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f  of result-set co
1b540 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e  lumns */.  AggIn
1b550 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20  fo *pAggInfo;   
1b560 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1b570 62 6f 75 74 20 61 67 67 72 65 67 61 74 65 73 20  bout aggregates 
1b580 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f  at this level */
1b590 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a  .  NameContext *
1b5a0 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20  pNext;  /* Next 
1b5b0 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65  outer name conte
1b5c0 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75  xt.  NULL for ou
1b5d0 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74  termost */.  int
1b5e0 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20 20 20   nRef;          
1b5f0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e    /* Number of n
1b600 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79  ames resolved by
1b610 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f   this context */
1b620 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1b630 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1b640 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f  r of errors enco
1b650 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20 72 65  untered while re
1b660 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f  solving names */
1b670 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20  .  u16 ncFlags; 
1b680 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20          /* Zero 
1b690 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61  or more NC_* fla
1b6a0 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77  gs defined below
1b6b0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c   */.};../*.** Al
1b6c0 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
1b6d0 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74   the NameContext
1b6e0 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e  , ncFlags field.
1b6f0 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
1b700 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68  straints (all ch
1b710 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72 74  ecked via assert
1b720 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61  ()):.**    NC_Ha
1b730 73 41 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61  sAgg    == SF_Ha
1b740 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69  sAgg.**    NC_Mi
1b750 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69  nMaxAgg == SF_Mi
1b760 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54  nMaxAgg == SQLIT
1b770 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a  E_FUNC_MINMAX.**
1b780 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41  .*/.#define NC_A
1b790 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30 31 20  llowAgg  0x0001 
1b7a0 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20 66 75   /* Aggregate fu
1b7b0 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f  nctions are allo
1b7c0 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66  wed here */.#def
1b7d0 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20  ine NC_PartIdx  
1b7e0 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65   0x0002  /* True
1b7f0 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20   if resolving a 
1b800 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48  partial index WH
1b810 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  ERE */.#define N
1b820 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78 30 30  C_IsCheck   0x00
1b830 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72  04  /* True if r
1b840 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69  esolving names i
1b850 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72  n a CHECK constr
1b860 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  aint */.#define 
1b870 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30  NC_InAggFunc 0x0
1b880 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20  008  /* True if 
1b890 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65  analyzing argume
1b8a0 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75  nts to an agg fu
1b8b0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nc */.#define NC
1b8c0 5f 48 61 73 41 67 67 20 20 20 20 30 78 30 30 31  _HasAgg    0x001
1b8d0 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72  0  /* One or mor
1b8e0 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
1b8f0 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64  tions seen */.#d
1b900 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72  efine NC_IdxExpr
1b910 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72     0x0020  /* Tr
1b920 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1b930 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54  columns of CREAT
1b940 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69  E INDEX */.#defi
1b950 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20  ne NC_VarSelect 
1b960 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72  0x0040  /* A cor
1b970 72 65 6c 61 74 65 64 20 73 75 62 71 75 65 72 79  related subquery
1b980 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a   has been seen *
1b990 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e  /.#define NC_Min
1b9a0 4d 61 78 41 67 67 20 30 78 31 30 30 30 20 20 2f  MaxAgg 0x1000  /
1b9b0 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67  * min/max aggreg
1b9c0 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20  ates seen.  See 
1b9d0 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f  note above */../
1b9e0 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
1b9f0 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
1ba00 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  g structure cont
1ba10 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61  ains all informa
1ba20 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74  tion.** needed t
1ba30 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20  o generate code 
1ba40 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c  for a single SEL
1ba50 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a  ECT statement..*
1ba60 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73  *.** nLimit is s
1ba70 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72  et to -1 if ther
1ba80 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c  e is no LIMIT cl
1ba90 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69  ause.  nOffset i
1baa0 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49  s set to 0..** I
1bab0 66 20 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d  f there is a LIM
1bac0 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70  IT clause, the p
1bad0 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69  arser sets nLimi
1bae0 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f  t to the value o
1baf0 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61  f the.** limit a
1bb00 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68  nd nOffset to th
1bb10 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f  e value of the o
1bb20 66 66 73 65 74 20 28 6f 72 20 30 20 69 66 20 74  ffset (or 0 if t
1bb30 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f  here is not.** o
1bb40 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74  ffset).  But lat
1bb50 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e  er on, nLimit an
1bb60 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65  d nOffset become
1bb70 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61   the memory loca
1bb80 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20  tions.** in the 
1bb90 56 44 42 45 20 74 68 61 74 20 72 65 63 6f 72 64  VDBE that record
1bba0 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f   the limit and o
1bbb0 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a  ffset counters..
1bbc0 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70  **.** addrOpenEp
1bbd0 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e  hm[] entries con
1bbe0 74 61 69 6e 20 74 68 65 20 61 64 64 72 65 73 73  tain the address
1bbf0 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   of OP_OpenEphem
1bc00 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a  eral opcodes..**
1bc10 20 54 68 65 73 65 20 61 64 64 72 65 73 73 65 73   These addresses
1bc20 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65 64 20   must be stored 
1bc30 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e 20 67  so that we can g
1bc40 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20  o back and fill 
1bc50 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59  in.** the P4_KEY
1bc60 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61  INFO and P2 para
1bc70 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e  meters later.  N
1bc80 65 69 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e  either the KeyIn
1bc90 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75  fo nor.** the nu
1bca0 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
1bcb0 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d  in P2 can be com
1bcc0 70 75 74 65 64 20 61 74 20 74 68 65 20 73 61 6d  puted at the sam
1bcd0 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65  e time.** as the
1bce0 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73   OP_OpenEphm ins
1bcf0 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65  truction is code
1bd00 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a  d because not.**
1bd10 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74   enough informat
1bd20 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f  ion about the co
1bd30 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20  mpound query is 
1bd40 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f  known at that po
1bd50 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49  int..** The KeyI
1bd60 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e  nfo for addrOpen
1bd70 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20  Tran[0] and [1] 
1bd80 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69  contains collati
1bd90 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20  ng sequences.** 
1bda0 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73  for the result s
1bdb0 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f  et.  The KeyInfo
1bdc0 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68   for addrOpenEph
1bdd0 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f  m[2] contains co
1bde0 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65  llating.** seque
1bdf0 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44  nces for the ORD
1be00 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f  ER BY clause..*/
1be10 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b  .struct Select {
1be20 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c  .  ExprList *pEL
1be30 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65  ist;      /* The
1be40 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72   fields of the r
1be50 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70  esult */.  u8 op
1be60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1be70 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f    /* One of: TK_
1be80 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f  UNION TK_ALL TK_
1be90 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43  INTERSECT TK_EXC
1bea0 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20  EPT */.  LogEst 
1beb0 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20  nSelectRow;     
1bec0 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d  /* Estimated num
1bed0 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f  ber of result ro
1bee0 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46  ws */.  u32 selF
1bef0 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f  lags;          /
1bf00 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76  * Various SF_* v
1bf10 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69  alues */.  int i
1bf20 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20  Limit, iOffset; 
1bf30 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69    /* Memory regi
1bf40 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49  sters holding LI
1bf50 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75  MIT & OFFSET cou
1bf60 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c  nters */.#if SEL
1bf70 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1bf80 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65  .  char zSelName
1bf90 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d  [12];     /* Sym
1bfa0 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68  bolic name of th
1bfb0 69 73 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f  is SELECT use fo
1bfc0 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23  r debugging */.#
1bfd0 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72  endif.  int addr
1bfe0 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f  OpenEphm[2];   /
1bff0 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f  * OP_OpenEphem o
1c000 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74  pcodes related t
1c010 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f  o this select */
1c020 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63  .  SrcList *pSrc
1c030 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1c040 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
1c050 20 20 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20    Expr *pWhere; 
1c060 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1c070 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a  WHERE clause */.
1c080 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f    ExprList *pGro
1c090 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20  upBy;    /* The 
1c0a0 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20  GROUP BY clause 
1c0b0 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69  */.  Expr *pHavi
1c0c0 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ng;         /* T
1c0d0 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65  he HAVING clause
1c0e0 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a   */.  ExprList *
1c0f0 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20  pOrderBy;    /* 
1c100 54 68 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61  The ORDER BY cla
1c110 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  use */.  Select 
1c120 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20  *pPrior;        
1c130 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20  /* Prior select 
1c140 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65  in a compound se
1c150 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a  lect statement *
1c160 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78  /.  Select *pNex
1c170 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  t;         /* Ne
1c180 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65  xt select to the
1c190 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f   left in a compo
1c1a0 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70  und */.  Expr *p
1c1b0 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20  Limit;          
1c1c0 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73  /* LIMIT express
1c1d0 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20  ion. NULL means 
1c1e0 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45  not used. */.  E
1c1f0 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20  xpr *pOffset;   
1c200 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20        /* OFFSET 
1c210 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c  expression. NULL
1c220 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e   means not used.
1c230 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
1c240 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  h;           /* 
1c250 57 49 54 48 20 63 6c 61 75 73 65 20 61 74 74 61  WITH clause atta
1c260 63 68 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c  ched to this sel
1c270 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f  ect. Or NULL. */
1c280 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  .};../*.** Allow
1c290 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65  ed values for Se
1c2a0 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20  lect.selFlags.  
1c2b0 54 68 65 20 22 53 46 22 20 70 72 65 66 69 78 20  The "SF" prefix 
1c2c0 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53  stands for.** "S
1c2d0 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a  elect Flag"..**.
1c2e0 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
1c2f0 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65  ints (all checke
1c300 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29 0a  d via assert()).
1c310 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41 67 67  **     SF_HasAgg
1c320 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67       == NC_HasAg
1c330 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d  g.**     SF_MinM
1c340 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e  axAgg  == NC_Min
1c350 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51  MaxAgg     == SQ
1c360 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
1c370 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64  .**     SF_Fixed
1c380 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55  Limit == WHERE_U
1c390 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66  SE_LIMIT.*/.#def
1c3a0 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20  ine SF_Distinct 
1c3b0 20 20 20 20 20 20 30 78 30 30 30 30 31 20 20 2f        0x00001  /
1c3c0 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20  * Output should 
1c3d0 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23  be DISTINCT */.#
1c3e0 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20  define SF_All   
1c3f0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 30 32           0x00002
1c400 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68    /* Includes th
1c410 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f  e ALL keyword */
1c420 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f  .#define SF_Reso
1c430 6c 76 65 64 20 20 20 20 20 20 20 30 78 30 30 30  lved       0x000
1c440 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65  04  /* Identifie
1c450 72 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73  rs have been res
1c460 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  olved */.#define
1c470 20 53 46 5f 41 67 67 72 65 67 61 74 65 20 20 20   SF_Aggregate   
1c480 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43     0x00008  /* C
1c490 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63  ontains agg func
1c4a0 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50  tions or a GROUP
1c4b0 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53   BY */.#define S
1c4c0 46 5f 48 61 73 41 67 67 20 20 20 20 20 20 20 20  F_HasAgg        
1c4d0 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e   0x00010  /* Con
1c4e0 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
1c4f0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
1c500 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65  fine SF_UsesEphe
1c510 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30 20 20  meral  0x00020  
1c520 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e  /* Uses the Open
1c530 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1c540 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45   */.#define SF_E
1c550 78 70 61 6e 64 65 64 20 20 20 20 20 20 20 30 78  xpanded       0x
1c560 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65  00040  /* sqlite
1c570 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20  3SelectExpand() 
1c580 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a  called on this *
1c590 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73  /.#define SF_Has
1c5a0 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30  TypeInfo    0x00
1c5b0 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62  080  /* FROM sub
1c5c0 71 75 65 72 69 65 73 20 68 61 76 65 20 54 61 62  queries have Tab
1c5d0 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23  le metadata */.#
1c5e0 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75  define SF_Compou
1c5f0 6e 64 20 20 20 20 20 20 20 30 78 30 30 31 30 30  nd       0x00100
1c600 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63    /* Part of a c
1c610 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f  ompound query */
1c620 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75  .#define SF_Valu
1c630 65 73 20 20 20 20 20 20 20 20 20 30 78 30 30 32  es         0x002
1c640 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a  00  /* Synthesiz
1c650 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63  ed from VALUES c
1c660 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  lause */.#define
1c670 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20   SF_MultiValue  
1c680 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53     0x00400  /* S
1c690 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72  ingle VALUES ter
1c6a0 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20  m with multiple 
1c6b0 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rows */.#define 
1c6c0 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20  SF_NestedFrom   
1c6d0 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61    0x00800  /* Pa
1c6e0 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65  rt of a parenthe
1c6f0 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73  sized FROM claus
1c700 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  e */.#define SF_
1c710 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30  MinMaxAgg      0
1c720 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65  x01000  /* Aggre
1c730 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  gate containing 
1c740 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a  min() or max() *
1c750 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63  /.#define SF_Rec
1c760 75 72 73 69 76 65 20 20 20 20 20 20 30 78 30 32  ursive      0x02
1c770 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75  000  /* The recu
1c780 72 73 69 76 65 20 70 61 72 74 20 6f 66 20 61 20  rsive part of a 
1c790 72 65 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f  recursive CTE */
1c7a0 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65  .#define SF_Fixe
1c7b0 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30 34 30  dLimit     0x040
1c7c0 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f  00  /* nSelectRo
1c7d0 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74  w set by a const
1c7e0 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65  ant LIMIT */.#de
1c7f0 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e  fine SF_MaybeCon
1c800 76 65 72 74 20 20 20 30 78 30 38 30 30 30 20 20  vert   0x08000  
1c810 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43  /* Need convertC
1c820 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1c830 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1c840 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65  fine SF_Converte
1c850 64 20 20 20 20 20 20 30 78 31 30 30 30 30 20 20  d      0x10000  
1c860 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d  /* By convertCom
1c870 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1c880 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1c890 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64  ne SF_IncludeHid
1c8a0 64 65 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a  den  0x20000  /*
1c8b0 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20   Include hidden 
1c8c0 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75  columns in outpu
1c8d0 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  t */.../*.** The
1c8e0 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45   results of a SE
1c8f0 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69 73 74  LECT can be dist
1c900 72 69 62 75 74 65 64 20 69 6e 20 73 65 76 65 72  ributed in sever
1c910 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65 66 69  al ways, as defi
1c920 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66  ned.** by one of
1c930 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   the following m
1c940 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54  acros.  The "SRT
1c950 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22  " prefix means "
1c960 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a  SELECT Result.**
1c970 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Type"..**.**   
1c980 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20    SRT_Union     
1c990 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1c9a0 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65  as a key in a te
1c9b0 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a  mporary index.**
1c9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9d0 20 20 20 20 20 69 64 65 6e 74 69 66 69 65 64 20       identified 
1c9e0 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  by pDest->iSDPar
1c9f0 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1ca00 5f 45 78 63 65 70 74 20 20 20 20 20 20 52 65 6d  _Except      Rem
1ca10 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d  ove results from
1ca20 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69   the temporary i
1ca30 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50  ndex pDest->iSDP
1ca40 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
1ca50 52 54 5f 45 78 69 73 74 73 20 20 20 20 20 20 53  RT_Exists      S
1ca60 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f  tore a 1 in memo
1ca70 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69  ry cell pDest->i
1ca80 53 44 50 61 72 6d 20 69 66 20 74 68 65 20 72 65  SDParm if the re
1ca90 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  sult.**         
1caa0 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set 
1cab0 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a  is not empty..**
1cac0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63  .**     SRT_Disc
1cad0 61 72 64 20 20 20 20 20 54 68 72 6f 77 20 74 68  ard     Throw th
1cae0 65 20 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20  e results away. 
1caf0 20 54 68 69 73 20 69 73 20 75 73 65 64 20 62 79   This is used by
1cb00 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20   SELECT.**      
1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
1cb20 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e  tatements within
1cb30 20 74 72 69 67 67 65 72 73 20 77 68 6f 73 65 20   triggers whose 
1cb40 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a  only purpose is.
1cb50 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cb60 20 20 20 20 20 20 20 74 68 65 20 73 69 64 65 2d         the side-
1cb70 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74  effects of funct
1cb80 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20  ions..**.** All 
1cb90 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
1cba0 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20   free to ignore 
1cbb0 74 68 65 69 72 20 4f 52 44 45 52 20 42 59 20 63  their ORDER BY c
1cbc0 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61  lause. Those tha
1cbd0 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74  t.** follow must
1cbe0 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52   honor the ORDER
1cbf0 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a   BY clause..**.*
1cc00 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74  *     SRT_Output
1cc10 20 20 20 20 20 20 47 65 6e 65 72 61 74 65 20 61        Generate a
1cc20 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28   row of output (
1cc30 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73  using the OP_Res
1cc40 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20  ultRow.**       
1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 70                op
1cc60 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68 20 72  code) for each r
1cc70 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74  ow in the result
1cc80 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20   set..**.**     
1cc90 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20  SRT_Mem         
1cca0 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68  Only valid if th
1ccb0 65 20 72 65 73 75 6c 74 20 69 73 20 61 20 73 69  e result is a si
1ccc0 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20  ngle column..** 
1ccd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cce0 20 20 20 20 53 74 6f 72 65 20 74 68 65 20 66 69      Store the fi
1ccf0 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68  rst column of th
1cd00 65 20 66 69 72 73 74 20 72 65 73 75 6c 74 20 72  e first result r
1cd10 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ow.**           
1cd20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72 65 67            in reg
1cd30 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44  ister pDest->iSD
1cd40 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f  Parm then abando
1cd50 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20  n the rest.**   
1cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd70 20 20 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20    of the query. 
1cd80 20 54 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f   This destinatio
1cd90 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54  n implies "LIMIT
1cda0 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53   1"..**.**     S
1cdb0 52 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 54  RT_Set         T
1cdc0 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62  he result must b
1cdd0 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d  e a single colum
1cde0 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a  n.  Store each.*
1cdf0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1ce00 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73        row of res
1ce10 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79 20 69  ult as the key i
1ce20 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  n table pDest->i
1ce30 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41                 A
1ce50 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74  pply the affinit
1ce60 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74  y pDest->affSdst
1ce70 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a   before storing.
1ce80 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1ce90 20 20 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20         results. 
1cea0 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65   Used to impleme
1ceb0 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e  nt "IN (SELECT .
1cec0 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ..)"..**.**     
1ced0 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20  SRT_EphemTab    
1cee0 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72  Create an tempor
1cef0 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1cf00 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f  >iSDParm and sto
1cf10 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  re.**           
1cf20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 72 65            the re
1cf30 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20  sult there. The 
1cf40 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f  cursor is left o
1cf50 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20  pen after.**    
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf70 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69   returning.  Thi
1cf80 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61  s is like SRT_Ta
1cf90 62 6c 65 20 65 78 63 65 70 74 20 74 68 61 74 0a  ble except that.
1cfa0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cfb0 20 20 20 20 20 20 20 74 68 69 73 20 64 65 73 74         this dest
1cfc0 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f  ination uses OP_
1cfd0 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f  OpenEphemeral to
1cfe0 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20   create.**      
1cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d000 68 65 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a  he table first..
1d010 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f  **.**     SRT_Co
1d020 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61  routine   Genera
1d030 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20  te a co-routine 
1d040 74 68 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e  that returns a n
1d050 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20  ew row of.**    
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d070 20 72 65 73 75 6c 74 73 20 65 61 63 68 20 74 69   results each ti
1d080 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64  me it is invoked
1d090 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69  .  The entry poi
1d0a0 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  nt.**           
1d0b0 20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65            of the
1d0c0 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73   co-routine is s
1d0d0 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73 74 65  tored in registe
1d0e0 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  r pDest->iSDParm
1d0f0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d100 20 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20          and the 
1d110 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74  result row is st
1d120 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e  ored in pDest->n
1d130 44 65 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a  Dest registers.*
1d140 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d150 20 20 20 20 20 20 73 74 61 72 74 69 6e 67 20 77        starting w
1d160 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74  ith pDest->iSdst
1d170 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d180 54 61 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72  Table       Stor
1d190 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d  e results in tem
1d1a0 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1d1b0 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d1c0 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20      SRT_Fifo    
1d1d0 20 20 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65      This is like
1d1e0 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78   SRT_EphemTab ex
1d1f0 63 65 70 74 20 74 68 61 74 20 74 68 65 20 74 61  cept that the ta
1d200 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ble.**          
1d210 20 20 20 20 20 20 20 20 20 20 20 69 73 20 61 73             is as
1d220 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79  sumed to already
1d230 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46   be open.  SRT_F
1d240 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20  ifo has.**      
1d250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d260 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72  he additional pr
1d270 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20  operty of being 
1d280 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a  able to ignore.*
1d290 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d2a0 20 20 20 20 20 20 74 68 65 20 4f 52 44 45 52 20        the ORDER 
1d2b0 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a  BY clause..**.**
1d2c0 20 20 20 20 20 53 52 54 5f 44 69 73 74 46 69 66       SRT_DistFif
1d2d0 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c  o    Store resul
1d2e0 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72  ts in a temporar
1d2f0 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1d300 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20  SDParm..**      
1d310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 42                 B
1d320 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70  ut also use temp
1d330 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1d340 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a  t->iSDParm+1 as.
1d350 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d360 20 20 20 20 20 20 20 61 20 72 65 63 6f 72 64 20         a record 
1d370 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73  of all prior res
1d380 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20  ults and ignore 
1d390 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a  any duplicate.**
1d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d3b0 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65       rows.  Name
1d3c0 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e   means:  "Distin
1d3d0 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20  ct Fifo"..**.** 
1d3e0 20 20 20 20 53 52 54 5f 51 75 65 75 65 20 20 20      SRT_Queue   
1d3f0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1d400 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75  s in priority qu
1d410 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61  eue pDest->iSDPa
1d420 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20  rm (really.**   
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d440 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70    an index).  Ap
1d450 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20  pend a sequence 
1d460 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61  number so that a
1d470 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20  ll entries.**   
1d480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d490 20 20 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a    are distinct..
1d4a0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1d4b0 73 74 51 75 65 75 65 20 20 20 53 74 6f 72 65 20  stQueue   Store 
1d4c0 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72  results in prior
1d4d0 69 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d  ity queue pDest-
1d4e0 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66  >iSDParm only if
1d4f0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d500 20 20 20 20 20 20 20 20 74 68 65 20 73 61 6d 65          the same
1d510 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65   record has neve
1d520 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65  r been stored be
1d530 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20  fore.  The.**   
1d540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d550 20 20 69 6e 64 65 78 20 61 74 20 70 44 65 73 74    index at pDest
1d560 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64  ->iSDParm+1 hold
1d570 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65   all prior store
1d580 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  s..*/.#define SR
1d590 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31  T_Union        1
1d5a0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1d5b0 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20  t as keys in an 
1d5c0 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
1d5d0 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20 20   SRT_Except     
1d5e0 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72    2  /* Remove r
1d5f0 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49  esult from a UNI
1d600 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ON index */.#def
1d610 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73 20 20  ine SRT_Exists  
1d620 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65       3  /* Store
1d630 20 31 20 69 66 20 74 68 65 20 72 65 73 75 6c 74   1 if the result
1d640 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f   is not empty */
1d650 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1d660 63 61 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20  card      4  /* 
1d670 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20  Do not save the 
1d680 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65  results anywhere
1d690 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f   */.#define SRT_
1d6a0 46 69 66 6f 20 20 20 20 20 20 20 20 20 35 20 20  Fifo         5  
1d6b0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1d6c0 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e 20  as data with an 
1d6d0 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20  automatic rowid 
1d6e0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1d6f0 69 73 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f  istFifo     6  /
1d700 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c  * Like SRT_Fifo,
1d710 20 62 75 74 20 75 6e 69 71 75 65 20 72 65 73 75   but unique resu
1d720 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66  lts only */.#def
1d730 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20 20 20  ine SRT_Queue   
1d740 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65       7  /* Store
1d750 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75   result in an qu
1d760 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  eue */.#define S
1d770 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 20  RT_DistQueue    
1d780 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51  8  /* Like SRT_Q
1d790 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65  ueue, but unique
1d7a0 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1d7b0 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42  ../* The ORDER B
1d7c0 59 20 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f  Y clause is igno
1d7d0 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74  red for all of t
1d7e0 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66  he above */.#def
1d7f0 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64  ine IgnorableOrd
1d800 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65  erby(X) ((X->eDe
1d810 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65  st)<=SRT_DistQue
1d820 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54  ue)..#define SRT
1d830 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20 39 20  _Output       9 
1d840 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20   /* Output each 
1d850 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f  row of result */
1d860 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d  .#define SRT_Mem
1d870 20 20 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20           10  /* 
1d880 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1d890 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f  a memory cell */
1d8a0 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74  .#define SRT_Set
1d8b0 20 20 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20           11  /* 
1d8c0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1d8d0 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65   keys in an inde
1d8e0 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  x */.#define SRT
1d8f0 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31 32 20  _EphemTab    12 
1d900 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73   /* Create trans
1d910 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f  ient tab and sto
1d920 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  re like SRT_Tabl
1d930 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1d940 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20  _Coroutine   13 
1d950 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73   /* Generate a s
1d960 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73  ingle row of res
1d970 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ult */.#define S
1d980 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31  RT_Table       1
1d990 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75  4  /* Store resu
1d9a0 6c 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20  lt as data with 
1d9b0 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77  an automatic row
1d9c0 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  id */../*.** An 
1d9d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
1d9e0 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69 62 65   object describe
1d9f0 73 20 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f  s where to put o
1da00 66 20 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66  f the results of
1da10 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61  .** a SELECT sta
1da20 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63  tement..*/.struc
1da30 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20  t SelectDest {. 
1da40 20 75 38 20 65 44 65 73 74 3b 20 20 20 20 20 20   u8 eDest;      
1da50 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20        /* How to 
1da60 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72  dispose of the r
1da70 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53  esults.  On of S
1da80 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20  RT_* above. */. 
1da90 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b   char *zAffSdst;
1daa0 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
1dab0 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
1dac0 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
1dad0 69 6e 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20  int iSDParm;    
1dae0 20 20 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65       /* A parame
1daf0 74 65 72 20 75 73 65 64 20 62 79 20 74 68 65 20  ter used by the 
1db00 65 44 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d  eDest disposal m
1db10 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ethod */.  int i
1db20 53 64 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  Sdst;           
1db30 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65 72  /* Base register
1db40 20 77 68 65 72 65 20 72 65 73 75 6c 74 73 20 61   where results a
1db50 72 65 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20  re written */.  
1db60 69 6e 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20  int nSdst;      
1db70 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1db80 66 20 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f  f registers allo
1db90 63 61 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c  cated */.  ExprL
1dba0 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1dbb0 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66  /* Key columns f
1dbc0 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64  or SRT_Queue and
1dbd0 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a   SRT_DistQueue *
1dbe0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69  /.};../*.** Duri
1dbf0 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69  ng code generati
1dc00 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73  on of statements
1dc10 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73   that do inserts
1dc20 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d   into AUTOINCREM
1dc30 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74  ENT.** tables, t
1dc40 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66  he following inf
1dc50 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61  ormation is atta
1dc60 63 68 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c  ched to the Tabl
1dc70 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a  e.u.autoInc.p.**
1dc80 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68   pointer of each
1dc90 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74   autoincrement t
1dca0 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73  able to record s
1dcb0 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61  ome side informa
1dcc0 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65  tion that.** the
1dcd0 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20   code generator 
1dce0 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76 65 20  needs.  We have 
1dcf0 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c  to keep per-tabl
1dd00 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a  e autoincrement.
1dd10 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  ** information i
1dd20 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73 20 61  n case inserts a
1dd30 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74  re done within t
1dd40 72 69 67 67 65 72 73 2e 20 20 54 72 69 67 67 65  riggers.  Trigge
1dd50 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72  rs do not.** nor
1dd60 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65  mally coordinate
1dd70 20 74 68 65 69 72 20 61 63 74 69 76 69 74 69 65   their activitie
1dd80 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65  s, but we do nee
1dd90 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20  d to coordinate 
1dda0 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61  the.** loading a
1ddb0 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74  nd saving of aut
1ddc0 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72  oincrement infor
1ddd0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  mation..*/.struc
1dde0 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a  t AutoincInfo {.
1ddf0 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70    AutoincInfo *p
1de00 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20  Next;   /* Next 
1de10 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20  info block in a 
1de20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c  list of them all
1de30 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61   */.  Table *pTa
1de40 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  b;          /* T
1de50 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62  able this info b
1de60 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a  lock refers to *
1de70 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
1de80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
1de90 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44  ex in sqlite3.aD
1dea0 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20  b[] of database 
1deb0 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a  holding pTab */.
1dec0 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20    int regCtr;   
1ded0 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72          /* Memor
1dee0 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69  y register holdi
1def0 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75  ng the rowid cou
1df00 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  nter */.};../*.*
1df10 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f  * Size of the co
1df20 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69  lumn cache.*/.#i
1df30 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43  fndef SQLITE_N_C
1df40 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65  OLCACHE.# define
1df50 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43   SQLITE_N_COLCAC
1df60 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  HE 10.#endif../*
1df70 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65  .** At least one
1df80 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1df90 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1dfa0 74 75 72 65 20 69 73 20 63 72 65 61 74 65 64 20  ture is created 
1dfb0 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67  for each.** trig
1dfc0 67 65 72 20 74 68 61 74 20 6d 61 79 20 62 65 20  ger that may be 
1dfd0 66 69 72 65 64 20 77 68 69 6c 65 20 70 61 72 73  fired while pars
1dfe0 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55  ing an INSERT, U
1dff0 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a  PDATE or DELETE.
1e000 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c  ** statement. Al
1e010 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61  l such objects a
1e020 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  re stored in the
1e030 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61   linked list hea
1e040 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e  ded at.** Parse.
1e050 70 54 72 69 67 67 65 72 50 72 67 20 61 6e 64 20  pTriggerPrg and 
1e060 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61  deleted once sta
1e070 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69  tement compilati
1e080 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63  on has been.** c
1e090 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20  ompleted..**.** 
1e0a0 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72  A Vdbe sub-progr
1e0b0 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  am that implemen
1e0c0 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20  ts the body and 
1e0d0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
1e0e0 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65  rigger.** Trigge
1e0f0 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61  rPrg.pTrigger, a
1e100 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c  ssuming a defaul
1e110 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c  t ON CONFLICT cl
1e120 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67  ause of.** Trigg
1e130 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73  erPrg.orconf, is
1e140 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54   stored in the T
1e150 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72  riggerPrg.pProgr
1e160 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20  am variable..** 
1e170 54 68 65 20 50 61 72 73 65 2e 70 54 72 69 67 67  The Parse.pTrigg
1e180 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72  erPrg list never
1e190 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e   contains two en
1e1a0 74 72 69 65 73 20 77 69 74 68 20 74 68 65 20 73  tries with the s
1e1b0 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f  ame.** values fo
1e1c0 72 20 62 6f 74 68 20 70 54 72 69 67 67 65 72 20  r both pTrigger 
1e1d0 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a  and orconf..**.*
1e1e0 2a 20 54 68 65 20 54 72 69 67 67 65 72 50 72 67  * The TriggerPrg
1e1f0 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72  .aColmask[0] var
1e200 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20  iable is set to 
1e210 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20  a mask of old.* 
1e220 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73  columns.** acces
1e230 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30  sed (or set to 0
1e240 20 66 6f 72 20 74 72 69 67 67 65 72 73 20 66 69   for triggers fi
1e250 72 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  red as a result 
1e260 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61  of INSERT.** sta
1e270 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61  tements). Simila
1e280 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67 65 72  rly, the Trigger
1e290 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20  Prg.aColmask[1] 
1e2a0 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
1e2b0 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20  to.** a mask of 
1e2c0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73  new.* columns us
1e2d0 65 64 20 62 79 20 74 68 65 20 70 72 6f 67 72 61  ed by the progra
1e2e0 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69  m..*/.struct Tri
1e2f0 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67  ggerPrg {.  Trig
1e300 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20  ger *pTrigger;  
1e310 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74      /* Trigger t
1e320 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20  his program was 
1e330 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20  coded from */.  
1e340 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78  TriggerPrg *pNex
1e350 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
1e360 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70  entry in Parse.p
1e370 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1e380 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20  */.  SubProgram 
1e390 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20  *pProgram;   /* 
1e3a0 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e  Program implemen
1e3b0 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72  ting pTrigger/or
1e3c0 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72  conf */.  int or
1e3d0 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20  conf;           
1e3e0 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1e3f0 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1e400 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73  */.  u32 aColmas
1e410 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  k[2];        /* 
1e420 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20  Masks of old.*, 
1e430 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63  new.* columns ac
1e440 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  cessed */.};../*
1e450 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20  .** The yDbMask 
1e460 64 61 74 61 74 79 70 65 20 66 6f 72 20 74 68 65  datatype for the
1e470 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20   bitmask of all 
1e480 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
1e490 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54  es..*/.#if SQLIT
1e4a0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
1e4b0 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73 69  0.  typedef unsi
1e4c0 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d 61 73  gned char yDbMas
1e4d0 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  k[(SQLITE_MAX_AT
1e4e0 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20  TACHED+9)/8];.# 
1e4f0 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73  define DbMaskTes
1e500 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b  t(M,I)    (((M)[
1e510 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26  (I)/8]&(1<<((I)&
1e520 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e  7)))!=0).# defin
1e530 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20  e DbMaskZero(M) 
1e540 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c       memset((M),
1e550 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64  0,sizeof(M)).# d
1e560 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28  efine DbMaskSet(
1e570 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29  M,I)     (M)[(I)
1e580 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29  /8]|=(1<<((I)&7)
1e590 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1e5a0 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71  kAllZero(M)   sq
1e5b0 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65  lite3DbMaskAllZe
1e5c0 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44  ro(M).# define D
1e5d0 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20  bMaskNonZero(M) 
1e5e0 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b    (sqlite3DbMask
1e5f0 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23  AllZero(M)==0).#
1e600 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
1e610 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d  nsigned int yDbM
1e620 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62  ask;.# define Db
1e630 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20  MaskTest(M,I)   
1e640 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73   (((M)&(((yDbMas
1e650 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a  k)1)<<(I)))!=0).
1e660 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a  # define DbMaskZ
1e670 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d  ero(M)      (M)=
1e680 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  0.# define DbMas
1e690 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1e6a0 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29  )|=(((yDbMask)1)
1e6b0 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20  <<(I)).# define 
1e6c0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1e6d0 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69     (M)==0.# defi
1e6e0 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f  ne DbMaskNonZero
1e6f0 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e  (M)   (M)!=0.#en
1e700 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51  dif../*.** An SQ
1e710 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74  L parser context
1e720 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69  .  A copy of thi
1e730 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70  s structure is p
1e740 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a  assed through.**
1e750 20 74 68 65 20 70 61 72 73 65 72 20 61 6e 64 20   the parser and 
1e760 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68  down into all th
1e770 65 20 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20  e parser action 
1e780 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72  routine in order
1e790 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f   to.** carry aro
1e7a0 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  und information 
1e7b0 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74  that is global t
1e7c0 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70 61 72  o the entire par
1e7d0 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74  se..**.** The st
1e7e0 72 75 63 74 75 72 65 20 69 73 20 64 69 76 69 64  ructure is divid
1e7f0 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74  ed into two part
1e800 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70 61 72  s.  When the par
1e810 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20  ser and code.** 
1e820 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68  generate call th
1e830 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72 73 69  emselves recursi
1e840 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20  vely, the first 
1e850 70 61 72 74 20 6f 66 20 74 68 65 20 73 74 72 75  part of the stru
1e860 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73  cture.** is cons
1e870 74 61 6e 74 20 62 75 74 20 74 68 65 20 73 65 63  tant but the sec
1e880 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65 73 65  ond part is rese
1e890 74 20 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69  t at the beginni
1e8a0 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a  ng and end of.**
1e8b0 20 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e   each recursion.
1e8c0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c  .**.** The nTabl
1e8d0 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65  eLock and aTable
1e8e0 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61  Lock variables a
1e8f0 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20  re only used if 
1e900 74 68 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  the shared-cache
1e910 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73 20 65  .** feature is e
1e920 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74  nabled (if sqlit
1e930 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72  e3Tsd()->useShar
1e940 65 64 44 61 74 61 20 69 73 20 74 72 75 65 29 2e  edData is true).
1e950 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65   They are.** use
1e960 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73  d to store the s
1e970 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b  et of table-lock
1e980 73 20 72 65 71 75 69 72 65 64 20 62 79 20 74 68  s required by th
1e990 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
1e9a0 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46  g.** compiled. F
1e9b0 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54  unction sqlite3T
1e9c0 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73  ableLock() is us
1e9d0 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65  ed to add entrie
1e9e0 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74  s to the.** list
1e9f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73  ..*/.struct Pars
1ea00 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
1ea10 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  b;         /* Th
1ea20 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
1ea30 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63  structure */.  c
1ea40 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20  har *zErrMsg;   
1ea50 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20      /* An error 
1ea60 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62  message */.  Vdb
1ea70 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
1ea80 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66    /* An engine f
1ea90 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64 61 74  or executing dat
1eaa0 61 62 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a  abase bytecode *
1eab0 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20  /.  int rc;     
1eac0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75           /* Retu
1ead0 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65  rn code from exe
1eae0 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63  cution */.  u8 c
1eaf0 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20  olNamesSet;     
1eb00 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f   /* TRUE after O
1eb10 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73  P_ColumnName has
1eb20 20 62 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20   been issued to 
1eb30 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68  pVdbe */.  u8 ch
1eb40 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20  eckSchema;      
1eb50 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65 6d 61  /* Causes schema
1eb60 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66   cookie check af
1eb70 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a  ter an error */.
1eb80 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20    u8 nested;    
1eb90 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1eba0 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73   of nested calls
1ebb0 20 74 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63   to the parser/c
1ebc0 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f  ode generator */
1ebd0 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20  .  u8 nTempReg; 
1ebe0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ebf0 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72  r of temporary r
1ec00 65 67 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d  egisters in aTem
1ec10 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69  pReg[] */.  u8 i
1ec20 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20  sMultiWrite;    
1ec30 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74   /* True if stat
1ec40 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79  ement may modify
1ec50 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65  /insert multiple
1ec60 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61   rows */.  u8 ma
1ec70 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20  yAbort;         
1ec80 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65  /* True if state
1ec90 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61  ment may throw a
1eca0 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f  n ABORT exceptio
1ecb0 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d  n */.  u8 hasCom
1ecc0 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e  pound;      /* N
1ecd0 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f  eed to invoke co
1ece0 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c  nvertCompoundSel
1ecf0 65 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20  ectToSubquery() 
1ed00 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46  */.  u8 okConstF
1ed10 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20  actor;    /* OK 
1ed20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f  to factor out co
1ed30 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20  nstants */.  u8 
1ed40 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65  disableLookaside
1ed50 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74  ; /* Number of t
1ed60 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68  imes lookaside h
1ed70 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64  as been disabled
1ed80 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63   */.  u8 nColCac
1ed90 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  he;        /* Nu
1eda0 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20  mber of entries 
1edb0 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a  in aColCache[] *
1edc0 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
1edd0 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
1ede0 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
1edf0 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1ee00 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
1ee10 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
1ee20 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
1ee30 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1ee40 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1ee50 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1ee60 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1ee70 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
1ee80 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
1ee90 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1eea0 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
1eeb0 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
1eec0 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
1eed0 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
1eee0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
1eef0 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
1ef00 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f   far */.  int nO
1ef10 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  pAlloc;        /
1ef20 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c 6f 74  * Number of slot
1ef30 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20  s allocated for 
1ef40 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20  Vdbe.aOp[] */.  
1ef50 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b 20 20  int szOpAlloc;  
1ef60 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20 6f 66       /* Bytes of
1ef70 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 61 6c   memory space al
1ef80 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65  located for Vdbe
1ef90 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  .aOp[] */.  int 
1efa0 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20 20 20  ckBase;         
1efb0 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73 74 65   /* Base registe
1efc0 72 20 6f 66 20 64 61 74 61 20 64 75 72 69 6e 67  r of data during
1efd0 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
1efe0 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53 65 6c  ts */.  int iSel
1eff0 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  fTab;        /* 
1f000 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e 64 65  Table of an inde
1f010 78 20 77 68 6f 73 65 20 65 78 70 72 73 20 61 72  x whose exprs ar
1f020 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 2a 2f  e being coded */
1f030 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76  .  int iCacheLev
1f040 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61  el;     /* ColCa
1f050 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61  che valid when a
1f060 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65  ColCache[].iLeve
1f070 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a  l<=iCacheLevel *
1f080 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e  /.  int iCacheCn
1f090 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e  t;       /* Coun
1f0a0 74 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65  ter used to gene
1f0b0 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d  rate aColCache[]
1f0c0 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20  .lru values */. 
1f0d0 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20   int nLabel;    
1f0e0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f0f0 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a  of labels used *
1f100 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b  /.  int *aLabel;
1f110 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63           /* Spac
1f120 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61  e to hold the la
1f130 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69  bels */.  ExprLi
1f140 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f  st *pConstExpr;/
1f150 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
1f160 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65  ssions */.  Toke
1f170 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65  n constraintName
1f180 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  ;/* Name of the 
1f190 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65  constraint curre
1f1a0 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65  ntly being parse
1f1b0 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77  d */.  yDbMask w
1f1c0 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53  riteMask;   /* S
1f1d0 74 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61  tart a write tra
1f1e0 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73  nsaction on thes
1f1f0 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20  e databases */. 
1f200 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d   yDbMask cookieM
1f210 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b  ask;  /* Bitmask
1f220 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66   of schema verif
1f230 69 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ied databases */
1f240 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b  .  int regRowid;
1f250 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
1f260 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69  ter holding rowi
1f270 64 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c  d of CREATE TABL
1f280 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74  E entry */.  int
1f290 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20   regRoot;       
1f2a0 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f    /* Register ho
1f2b0 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20  lding root page 
1f2c0 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f  number for new o
1f2d0 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20  bjects */.  int 
1f2e0 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20  nMaxArg;        
1f2f0 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73   /* Max args pas
1f300 73 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63  sed to user func
1f310 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67  tion by sub-prog
1f320 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ram */.#if SELEC
1f330 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1f340 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20   int nSelect;   
1f350 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1f360 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  of SELECT statem
1f370 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69  ents seen */.  i
1f380 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74  nt nSelectIndent
1f390 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74  ;   /* How far t
1f3a0 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54  o indent SELECTT
1f3b0 52 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f  RACE() output */
1f3c0 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
1f3d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
1f3e0 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e  ED_CACHE.  int n
1f3f0 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20  TableLock;      
1f400 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c    /* Number of l
1f410 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f  ocks in aTableLo
1f420 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63  ck */.  TableLoc
1f430 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f  k *aTableLock; /
1f440 2a 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65  * Required table
1f450 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65   locks for share
1f460 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a  d-cache mode */.
1f470 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63  #endif.  Autoinc
1f480 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a  Info *pAinc;  /*
1f490 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1f4a0 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  ut AUTOINCREMENT
1f4b0 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50   counters */.  P
1f4c0 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b  arse *pToplevel;
1f4d0 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72      /* Parse str
1f4e0 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20  ucture for main 
1f4f0 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c  program (or NULL
1f500 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54  ) */.  Table *pT
1f510 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54  riggerTab;  /* T
1f520 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72  able triggers ar
1f530 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f  e being coded fo
1f540 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43  r */.  int addrC
1f550 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41  rTab;       /* A
1f560 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65  ddress of OP_Cre
1f570 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64 65 20  ateTable opcode 
1f580 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20  on CREATE TABLE 
1f590 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c  */.  u32 nQueryL
1f5a0 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74  oop;      /* Est
1f5b0 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61   number of itera
1f5c0 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79  tions of a query
1f5d0 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f   (10*log2(N)) */
1f5e0 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20  .  u32 oldmask; 
1f5f0 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
1f600 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73  of old.* columns
1f610 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
1f620 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20   u32 newmask;   
1f630 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66        /* Mask of
1f640 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72   new.* columns r
1f650 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75  eferenced */.  u
1f660 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20  8 eTriggerOp;   
1f670 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45      /* TK_UPDATE
1f680 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54  , TK_INSERT or T
1f690 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38  K_DELETE */.  u8
1f6a0 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20   eOrconf;       
1f6b0 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e     /* Default ON
1f6c0 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79   CONFLICT policy
1f6d0 20 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65   for trigger ste
1f6e0 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62  ps */.  u8 disab
1f6f0 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20  leTriggers;  /* 
1f700 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20  True to disable 
1f710 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f  triggers */..  /
1f720 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f730 2a 2a 2a 2a 2a 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 0a 20 20 2a 2a 20  **********.  ** 
1f770 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73  Fields above mus
1f780 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64  t be initialized
1f790 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66   to zero.  The f
1f7a0 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f  ields that follo
1f7b0 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20  w,.  ** down to 
1f7c0 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66  the beginning of
1f7d0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73   the recursive s
1f7e0 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e  ection, do not n
1f7f0 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69  eed to be.  ** i
1f800 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68  nitialized as th
1f810 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62  ey will be set b
1f820 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64  efore being used
1f830 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20  .  The boundary 
1f840 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e  is.  ** determin
1f850 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50  ed by offsetof(P
1f860 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e  arse,aColCache).
1f870 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
1f880 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 2f 0a 0a  *************/..
1f8c0 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63    struct yColCac
1f8d0 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61  he {.    int iTa
1f8e0 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
1f8f0 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e  * Table cursor n
1f900 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36  umber */.    i16
1f910 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20   iColumn;       
1f920 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75     /* Table colu
1f930 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20  mn number */.   
1f940 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20   u8 tempReg;    
1f950 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69         /* iReg i
1f960 73 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65  s a temp registe
1f970 72 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20  r that needs to 
1f980 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20  be freed */.    
1f990 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20  int iLevel;     
1f9a0 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67        /* Nesting
1f9b0 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e   level */.    in
1f9c0 74 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20  t iReg;         
1f9d0 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20      /* Reg with 
1f9e0 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f  value of this co
1f9f0 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f  lumn. 0 means no
1fa00 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c  ne. */.    int l
1fa10 72 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ru;             
1fa20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74   /* Least recent
1fa30 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61  ly used entry ha
1fa40 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76  s the smallest v
1fa50 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c  alue */.  } aCol
1fa60 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43  Cache[SQLITE_N_C
1fa70 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e  OLCACHE];  /* On
1fa80 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d  e for each colum
1fa90 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f  n cache entry */
1faa0 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b  .  int aTempReg[
1fab0 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f  8];        /* Ho
1fac0 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74  lding area for t
1fad0 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65  emporary registe
1fae0 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e  rs */.  Token sN
1faf0 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20  ameToken;       
1fb00 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
1fb10 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
1fb20 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
1fb30 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  /************
1fb40 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 0a 20 20 2a  ************.  *
1fb80 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74  * Above is const
1fb90 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75  ant between recu
1fba0 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69  rsions.  Below i
1fbb0 73 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61  s reset before a
1fbc0 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61  nd after.  ** ea
1fbd0 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54  ch recursion.  T
1fbe0 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77  he boundary betw
1fbf0 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65  een these two re
1fc00 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69  gions is determi
1fc10 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f  ned.  ** using o
1fc20 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c  ffsetof(Parse,sL
1fc30 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65  astToken) so the
1fc40 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c   sLastToken fiel
1fc50 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20  d must be the.  
1fc60 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69  ** first field i
1fc70 6e 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  n the recursive 
1fc80 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a  region..  ******
1fc90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
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 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61  **/..  Token sLa
1fce0 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  stToken;       /
1fcf0 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e  * The last token
1fd00 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56   parsed */.  ynV
1fd10 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20  ar nVar;        
1fd20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1fd30 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65   of '?' variable
1fd40 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51  s seen in the SQ
1fd50 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38  L so far */.  u8
1fd60 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20   iPkSortOrder;  
1fd70 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f          /* ASC o
1fd80 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47  r DESC for INTEG
1fd90 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  ER PRIMARY KEY *
1fda0 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20  /.  u8 explain; 
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1fdc0 20 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50   True if the EXP
1fdd0 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75  LAIN flag is fou
1fde0 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20  nd on the query 
1fdf0 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1fe00 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41  E_OMIT_VIRTUALTA
1fe10 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65  BLE.  u8 declare
1fe20 56 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  Vtab;           
1fe30 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64  /* True if insid
1fe40 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72  e sqlite3_declar
1fe50 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e  e_vtab() */.  in
1fe60 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20  t nVtabLock;    
1fe70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1fe80 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62  r of virtual tab
1fe90 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23  les to lock */.#
1fea0 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69  endif.  int nHei
1feb0 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ght;            
1fec0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
1fed0 74 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63  tree height of c
1fee0 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63  urrent sub-selec
1fef0 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  t */.#ifndef SQL
1ff00 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
1ff10 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64  .  int iSelectId
1ff20 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1ff30 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65  ID of current se
1ff40 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e  lect for EXPLAIN
1ff50 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74   output */.  int
1ff60 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20   iNextSelectId; 
1ff70 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61         /* Next a
1ff80 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20  vailable select 
1ff90 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f  ID for EXPLAIN o
1ffa0 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a  utput */.#endif.
1ffb0 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b    VList *pVList;
1ffc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
1ffd0 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76  apping between v
1ffe0 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e  ariable names an
1fff0 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56  d numbers */.  V
20000 64 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b  dbe *pReprepare;
20010 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62           /* VM b
20020 65 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20  eing reprepared 
20030 28 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72  (sqlite3Reprepar
20040 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  e()) */.  const 
20050 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20  char *zTail;    
20060 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74      /* All SQL t
20070 65 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73  ext past the las
20080 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73  t semicolon pars
20090 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ed */.  Table *p
200a0 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20  NewTable;       
200b0 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69    /* A table bei
200c0 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62  ng constructed b
200d0 79 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  y CREATE TABLE *
200e0 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65  /.  Trigger *pNe
200f0 77 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a  wTrigger;     /*
20100 20 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63   Trigger under c
20110 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52  onstruct by a CR
20120 45 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a  EATE TRIGGER */.
20130 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
20140 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54  uthContext; /* T
20150 68 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72  he 6th parameter
20160 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61   to db->xAuth ca
20170 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64  llbacks */.#ifnd
20180 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
20190 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f  IRTUALTABLE.  To
201a0 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20  ken sArg;       
201b0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c          /* Compl
201c0 65 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f  ete text of a mo
201d0 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f  dule argument */
201e0 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61  .  Table **apVta
201f0 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20  bLock;       /* 
20200 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75  Pointer to virtu
20210 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e  al tables needin
20220 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e  g locking */.#en
20230 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f  dif.  Table *pZo
20240 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20  mbieTab;        
20250 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65  /* List of Table
20260 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65   objects to dele
20270 74 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65  te after code ge
20280 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72  n */.  TriggerPr
20290 67 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20  g *pTriggerPrg; 
202a0 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
202b0 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72  of coded trigger
202c0 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69  s */.  With *pWi
202d0 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  th;             
202e0 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48   /* Current WITH
202f0 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c   clause, or NULL
20300 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
20310 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20  hToFree;        
20320 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54  /* Free this WIT
20330 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20  H object at the 
20340 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65  end of the parse
20350 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69   */.};../*.** Si
20360 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73  zes and pointers
20370 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74   of various part
20380 73 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f  s of the Parse o
20390 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bject..*/.#defin
203a0 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f  e PARSE_HDR_SZ o
203b0 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43  ffsetof(Parse,aC
203c0 6f 6c 43 61 63 68 65 29 20 2f 2a 20 52 65 63 75  olCache) /* Recu
203d0 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61  rsive part w/o a
203e0 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69  ColCache*/.#defi
203f0 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45  ne PARSE_RECURSE
20400 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
20410 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20  se,sLastToken)  
20420 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70    /* Recursive p
20430 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
20440 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69  ARSE_TAIL_SZ (si
20450 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53  zeof(Parse)-PARS
20460 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a  E_RECURSE_SZ) /*
20470 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70   Non-recursive p
20480 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50  art */.#define P
20490 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28  ARSE_TAIL(X) (((
204a0 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45  char*)(X))+PARSE
204b0 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a  _RECURSE_SZ)  /*
204c0 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c   Pointer to tail
204d0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72   */../*.** Retur
204e0 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
204f0 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
20500 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
20510 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
20520 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
20530 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
20540 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
20550 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
20560 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
20570 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
20580 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a  e->declareVtab).
20590 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
205a0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
205b0 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
205c0 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
205d0 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
205e0 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
205f0 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
20600 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
20610 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
20620 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
20630 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
20640 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
20650 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
20660 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
20670 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
20680 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
20690 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
206a0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
206b0 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
206c0 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
206d0 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
206e0 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69  s for P5 value i
206f0 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65  n various opcode
20700 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  s..**.** Value c
20710 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
20720 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
20730 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  )):.**    OPFLAG
20740 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d  _LENGTHARG    ==
20750 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
20760 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  GTH.**    OPFLAG
20770 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d  _TYPEOFARG    ==
20780 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
20790 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  EOF.**    OPFLAG
207a0 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d  _BULKCSR      ==
207b0 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a   BTREE_BULKLOAD.
207c0 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45  **    OPFLAG_SEE
207d0 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52  KEQ       == BTR
207e0 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20  EE_SEEK_EQ.**   
207f0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
20800 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f  E    == BTREE_FO
20810 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50  RDELETE.**    OP
20820 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
20830 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50  N == BTREE_SAVEP
20840 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50  OSITION.**    OP
20850 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
20860 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45    == BTREE_AUXDE
20870 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE.*/.#define 
20880 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20  OPFLAG_NCHANGE  
20890 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
208a0 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74  OP_Insert: Set t
208b0 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
208c0 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ange */.        
208d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
208f0 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20  Also used in P2 
20900 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44  (not P5) of OP_D
20910 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  elete */.#define
20920 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
20930 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
20940 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
20950 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
20960 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
20970 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
20980 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65     0x20    /* Se
20990 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
209a0 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
209b0 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
209c0 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
209d0 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
209e0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
209f0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
20a00 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
20a10 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
20a20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
20a30 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
20a40 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20a50 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
20a60 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
20a70 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
20a80 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
20a90 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20aa0 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30  _ISNOOP        0
20ab0 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c  x40    /* OP_Del
20ac0 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64  ete does pre-upd
20ad0 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f  ate-hook only */
20ae0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
20af0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78  LENGTHARG     0x
20b00 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75  40    /* OP_Colu
20b10 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72  mn only used for
20b20 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65   length() */.#de
20b30 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45  fine OPFLAG_TYPE
20b40 4f 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20  OFARG     0x80  
20b50 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f    /* OP_Column o
20b60 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70  nly used for typ
20b70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  eof() */.#define
20b80 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20   OPFLAG_BULKCSR 
20b90 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
20ba0 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20   OP_Open** used 
20bb0 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72  to open bulk cur
20bc0 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  sor */.#define O
20bd0 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20  PFLAG_SEEKEQ    
20be0 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f      0x02    /* O
20bf0 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20  P_Open** cursor 
20c00 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c  uses EQ seek onl
20c10 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  y */.#define OPF
20c20 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20  LAG_FORDELETE   
20c30 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f    0x08    /* OP_
20c40 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20  Open should use 
20c50 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20  BTREE_FORDELETE 
20c60 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20c70 47 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20  G_P2ISREG       
20c80 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f  0x10    /* P2 to
20c90 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20   OP_Open** is a 
20ca0 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20  register number 
20cb0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20cc0 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20  G_PERMUTE       
20cd0 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x01    /* OP_Co
20ce0 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70  mpare: use the p
20cf0 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64  ermutation */.#d
20d00 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56  efine OPFLAG_SAV
20d10 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20  EPOSITION  0x02 
20d20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f     /* OP_Delete/
20d30 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72  Insert: save cur
20d40 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69  sor pos */.#defi
20d50 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c  ne OPFLAG_AUXDEL
20d60 45 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20  ETE     0x04    
20d70 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e  /* OP_Delete: in
20d80 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20  dex in a DELETE 
20d90 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63  op */../*. * Eac
20da0 68 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e  h trigger presen
20db0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
20dc0 65 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72  e schema is stor
20dd0 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63  ed as an instanc
20de0 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54  e of. * struct T
20df0 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f  rigger.. *. * Po
20e00 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e  inters to instan
20e10 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72  ces of struct Tr
20e20 69 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64  igger are stored
20e30 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a   in two ways.. *
20e40 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67   1. In the "trig
20e50 48 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65  Hash" hash table
20e60 20 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71   (part of the sq
20e70 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72  lite3* that repr
20e80 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20  esents the. *   
20e90 20 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73   database). This
20ea0 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20   allows Trigger 
20eb0 73 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65  structures to be
20ec0 20 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61   retrieved by na
20ed0 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72  me.. * 2. All tr
20ee0 69 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65  iggers associate
20ef0 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20  d with a single 
20f00 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e  table form a lin
20f10 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20  ked list, using 
20f20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20  the. *    pNext 
20f30 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74  member of struct
20f40 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e   Trigger. A poin
20f50 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74  ter to the first
20f60 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a   element of the.
20f70 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73   *    linked lis
20f80 74 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74  t is stored as t
20f90 68 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65  he "pTrigger" me
20fa0 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f  mber of the asso
20fb0 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72  ciated. *    str
20fc0 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a  uct Table.. *. *
20fd0 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   The "step_list"
20fe0 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74   member points t
20ff0 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d  o the first elem
21000 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20  ent of a linked 
21010 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69  list. * containi
21020 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  ng the SQL state
21030 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20  ments specified 
21040 61 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70  as the trigger p
21050 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75  rogram.. */.stru
21060 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63  ct Trigger {.  c
21070 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
21080 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61         /* The na
21090 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65  me of the trigge
210a0 72 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r               
210b0 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68           */.  ch
210c0 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20  ar *table;      
210d0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62        /* The tab
210e0 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68  le or view to wh
210f0 69 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20  ich the trigger 
21100 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20  applies */.  u8 
21110 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
21120 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
21130 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
21140 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20  ATE, TK_INSERT  
21150 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74         */.  u8 t
21160 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20  r_tm;           
21170 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52      /* One of TR
21180 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52  IGGER_BEFORE, TR
21190 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20  IGGER_AFTER */. 
211a0 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20   Expr *pWhen;   
211b0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
211c0 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74  WHEN clause of t
211d0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d  he expression (m
211e0 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20  ay be NULL) */. 
211f0 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e   IdList *pColumn
21200 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  s;       /* If t
21210 68 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45  his is an UPDATE
21220 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74   OF <column-list
21230 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20  > trigger,.     
21240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21250 20 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c          the <col
21260 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f  umn-list> is sto
21270 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  red here */.  Sc
21280 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
21290 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
212a0 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
212b0 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65  rigger */.  Sche
212c0 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20  ma *pTabSchema; 
212d0 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
212e0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62  ntaining the tab
212f0 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  le */.  TriggerS
21300 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20  tep *step_list; 
21310 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20  /* Link list of 
21320 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20  trigger program 
21330 73 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20  steps           
21340 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a    */.  Trigger *
21350 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f  pNext;         /
21360 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61  * Next trigger a
21370 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
21380 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a  he table */.};..
21390 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20  /*.** A trigger 
213a0 69 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f  is either a BEFO
213b0 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74  RE or an AFTER t
213c0 72 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c  rigger.  The fol
213d0 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73  lowing constants
213e0 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68  .** determine wh
213f0 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68  ich..**.** If th
21400 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65  ere are multiple
21410 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d   triggers, you m
21420 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46  ight of some BEF
21430 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54  ORE and some AFT
21440 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63  ER..** In that c
21450 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61  ases, the consta
21460 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65  nts below can be
21470 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a   ORed together..
21480 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47  */.#define TRIGG
21490 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65  ER_BEFORE  1.#de
214a0 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54  fine TRIGGER_AFT
214b0 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e  ER   2../*. * An
214c0 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72   instance of str
214d0 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20  uct TriggerStep 
214e0 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  is used to store
214f0 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74   a single SQL st
21500 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20  atement. * that 
21510 69 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74  is a part of a t
21520 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a  rigger-program..
21530 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20   *. * Instances 
21540 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
21550 72 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64  rStep are stored
21560 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e   in a singly lin
21570 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64  ked list (linked
21580 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70  . * using the "p
21590 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65  Next" member) re
215a0 66 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20  ferenced by the 
215b0 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62  "step_list" memb
215c0 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73  er of the. * ass
215d0 6f 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54  ociated struct T
215e0 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e  rigger instance.
215f0 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
21600 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64  nt of the linked
21610 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20   list is. * the 
21620 66 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68  first step of th
21630 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61  e trigger-progra
21640 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70  m.. *. * The "op
21650 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74  " member indicat
21660 65 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20  es whether this 
21670 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22  is a "DELETE", "
21680 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45  INSERT", "UPDATE
21690 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22  " or. * "SELECT"
216a0 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20   statement. The 
216b0 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20  meanings of the 
216c0 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73  other members is
216d0 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74   determined by t
216e0 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22  he. * value of "
216f0 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a  op" as follows:.
21700 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f   *. * (op == TK_
21710 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e  INSERT). * orcon
21720 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74  f    -> stores t
21730 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61  he ON CONFLICT a
21740 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c  lgorithm. * pSel
21750 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73  ect   -> If this
21760 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e   is an INSERT IN
21770 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e  TO ... SELECT ..
21780 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65  . statement, the
21790 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  n. *            
217a0 20 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20    this stores a 
217b0 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53  pointer to the S
217c0 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
217d0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
217e0 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
217f0 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
21800 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69  f the table to i
21810 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70  nsert into.. * p
21820 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74  ExprList -> If t
21830 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54  his is an INSERT
21840 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53   INTO ... VALUES
21850 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20   ... statement, 
21860 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20  then. *         
21870 20 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73       this stores
21880 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e   values to be in
21890 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73  serted. Otherwis
218a0 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69  e NULL.. * pIdLi
218b0 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  st   -> If this 
218c0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
218d0 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e  O ... (<column-n
218e0 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e  ames>) VALUES ..
218f0 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20  .. *            
21900 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65    statement, the
21910 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68  n this stores th
21920 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74  e column-names t
21930 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20  o be. *         
21940 20 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e       inserted in
21950 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  to.. *. * (op ==
21960 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a   TK_DELETE). * z
21970 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
21980 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
21990 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65   table to delete
219a0 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65   from.. * pWhere
219b0 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45      -> The WHERE
219c0 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44   clause of the D
219d0 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20  ELETE statement 
219e0 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66  if one is specif
219f0 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20  ied.. *         
21a00 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e       Otherwise N
21a10 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ULL.. *. * (op =
21a20 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20  = TK_UPDATE). * 
21a30 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71  zTarget   -> Deq
21a40 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68  uoted name of th
21a50 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74  e table to updat
21a60 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20  e.. * pWhere    
21a70 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  -> The WHERE cla
21a80 75 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54  use of the UPDAT
21a90 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f  E statement if o
21aa0 6e 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e  ne is specified.
21ab0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
21ac0 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
21ad0 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
21ae0 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63   A list of the c
21af0 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65  olumns to update
21b00 20 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73   and the express
21b10 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20  ions to update. 
21b20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  *              t
21b30 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69  hem to. See sqli
21b40 74 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75  te3Update() docu
21b50 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43  mentation of "pC
21b60 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20  hanges". *      
21b70 20 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74          argument
21b80 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20  .. *. */.struct 
21b90 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20  TriggerStep {.  
21ba0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
21bb0 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54       /* One of T
21bc0 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44  K_DELETE, TK_UPD
21bd0 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20  ATE, TK_INSERT, 
21be0 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75  TK_SELECT */.  u
21bf0 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20  8 orconf;       
21c00 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61      /* OE_Rollba
21c10 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69  ck etc. */.  Tri
21c20 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20  gger *pTrig;    
21c30 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72    /* The trigger
21c40 20 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20   that this step 
21c50 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a  is a part of */.
21c60 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
21c70 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54  t;     /* SELECT
21c80 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48   statement or RH
21c90 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f  S of INSERT INTO
21ca0 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20   SELECT ... */. 
21cb0 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20   char *zTarget; 
21cc0 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20        /* Target 
21cd0 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45  table for DELETE
21ce0 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54  , UPDATE, INSERT
21cf0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
21d00 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  re;        /* Th
21d10 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66  e WHERE clause f
21d20 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44  or DELETE or UPD
21d30 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45  ATE steps */.  E
21d40 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69  xprList *pExprLi
21d50 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73  st; /* SET claus
21d60 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f  e for UPDATE. */
21d70 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69  .  IdList *pIdLi
21d80 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  st;     /* Colum
21d90 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45  n names for INSE
21da0 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53  RT */.  TriggerS
21db0 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  tep *pNext;  /* 
21dc0 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b  Next in the link
21dd0 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67  -list */.  Trigg
21de0 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20  erStep *pLast;  
21df0 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20  /* Last element 
21e00 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61  in link-list. Va
21e10 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d  lid for 1st elem
21e20 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   only */.};../*.
21e30 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
21e40 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
21e50 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
21e60 75 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69  used by the sqli
21e70 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74  teFix....** rout
21e80 69 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c  ines as they wal
21e90 6b 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65  k the parse tree
21ea0 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73   to make databas
21eb0 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20  e references.** 
21ec0 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70  explicit..*/.typ
21ed0 65 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69  edef struct DbFi
21ee0 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72  xer DbFixer;.str
21ef0 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20  uct DbFixer {.  
21f00 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20  Parse *pParse;  
21f10 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69      /* The parsi
21f20 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72  ng context.  Err
21f30 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74  or messages writ
21f40 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63  ten here */.  Sc
21f50 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20  hema *pSchema;  
21f60 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74    /* Fix items t
21f70 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f  o this schema */
21f80 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b  .  int bVarOnly;
21f90 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20         /* Check 
21fa0 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66  for variable ref
21fb0 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a  erences only */.
21fc0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44    const char *zD
21fd0 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75  b;    /* Make su
21fe0 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61  re all objects a
21ff0 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  re contained in 
22000 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
22010 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
22020 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f  Type;  /* Type o
22030 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20  f the container 
22040 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72  - used for error
22050 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63   messages */.  c
22060 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d  onst Token *pNam
22070 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  e; /* Name of th
22080 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73  e container - us
22090 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73  ed for error mes
220a0 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  sages */.};../*.
220b0 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75  ** An objected u
220c0 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74  sed to accumulat
220d0 65 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20  e the text of a 
220e0 73 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a  string where we.
220f0 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73  ** do not necess
22100 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62  arily know how b
22110 69 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69  ig the string wi
22120 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64  ll be in the end
22130 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41  ..*/.struct StrA
22140 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33  ccum {.  sqlite3
22150 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a   *db;         /*
22160 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61   Optional databa
22170 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65  se for lookaside
22180 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a  .  Can be NULL *
22190 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73 65 3b  /.  char *zBase;
221a0 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 62 61           /* A ba
221b0 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20  se allocation.  
221c0 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 2e  Not from malloc.
221d0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 65 78   */.  char *zTex
221e0 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  t;         /* Th
221f0 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74  e string collect
22200 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75  ed so far */.  u
22210 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20 20 20  32  nChar;      
22220 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66      /* Length of
22230 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f 20 66   the string so f
22240 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 41 6c  ar */.  u32  nAl
22250 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  loc;         /* 
22260 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63 65 20  Amount of space 
22270 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a 54 65  allocated in zTe
22280 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d 78 41  xt */.  u32  mxA
22290 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f 2a 20  lloc;        /* 
222a0 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65 64 20  Maximum allowed 
222b0 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30 20 66  allocation.  0 f
222c0 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75 73 61  or no malloc usa
222d0 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61 63 63  ge */.  u8   acc
222e0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20  Error;       /* 
222f0 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f  STRACCUM_NOMEM o
22300 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  r STRACCUM_TOOBI
22310 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72 69 6e  G */.  u8   prin
22320 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53  tfFlags;    /* S
22330 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66 6c 61  QLITE_PRINTF fla
22340 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23  gs below */.};.#
22350 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
22360 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66 69 6e  NOMEM   1.#defin
22370 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49  e STRACCUM_TOOBI
22380 47 20 20 32 0a 23 64 65 66 69 6e 65 20 53 51 4c  G  2.#define SQL
22390 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52  ITE_PRINTF_INTER
223a0 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49 6e 74  NAL 0x01  /* Int
223b0 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63  ernal-use-only c
223c0 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f 77 65  onverters allowe
223d0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  d */.#define SQL
223e0 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55  ITE_PRINTF_SQLFU
223f0 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53 51 4c  NC  0x02  /* SQL
22400 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65   function argume
22410 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74 66 20  nts to VXPrintf 
22420 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
22430 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45  E_PRINTF_MALLOCE
22440 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75 65 20  D 0x04  /* True 
22450 69 66 20 78 54 65 78 74 20 69 73 20 61 6c 6c 6f  if xText is allo
22460 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a  cated space */..
22470 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63  #define isMalloc
22480 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e 70 72  ed(X)  (((X)->pr
22490 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51 4c 49  intfFlags & SQLI
224a0 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43  TE_PRINTF_MALLOC
224b0 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20  ED)!=0).../*.** 
224c0 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69  A pointer to thi
224d0 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  s structure is u
224e0 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61  sed to communica
224f0 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a  te information.*
22500 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e  * from sqlite3In
22510 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73 65 53  it and OP_ParseS
22520 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65 20 73  chema into the s
22530 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
22540 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  ck..*/.typedef s
22550 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65  truct {.  sqlite
22560 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a  3 *db;        /*
22570 20 54 68 65 20 64 61 74 61 62 61 73 65 20 62 65   The database be
22580 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
22590 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a 45 72  */.  char **pzEr
225a0 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f  rMsg;    /* Erro
225b0 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72 65 64  r message stored
225c0 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69   here */.  int i
225d0 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Db;            /
225e0 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64 61 74  * 0 for main dat
225f0 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20 54 45  abase.  1 for TE
22600 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54 54 41  MP, 2.. for ATTA
22610 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63  CHed */.  int rc
22620 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
22630 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73 74 6f   Result code sto
22640 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e  red here */.} In
22650 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53  itData;../*.** S
22660 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
22670 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69  ing global confi
22680 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20 66 6f  guration data fo
22690 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c 69 62  r the SQLite lib
226a0 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73  rary..**.** This
226b0 20 73 74 72 75 63 74 75 72 65 20 61 6c 73 6f 20   structure also 
226c0 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20 73 74  contains some st
226d0 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  ate information.
226e0 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c 69 74  .*/.struct Sqlit
226f0 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74  e3Config {.  int
22700 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20 20 20   bMemstat;      
22710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22720 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
22730 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73 20 2a   memory status *
22740 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d 75 74  /.  int bCoreMut
22750 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
22760 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
22770 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d 75 74   enable core mut
22780 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
22790 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20 20 20  FullMutex;      
227a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
227b0 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 66  True to enable f
227c0 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a  ull mutexing */.
227d0 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20    int bOpenUri; 
227e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227f0 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 69      /* True to i
22800 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e 61 6d  nterpret filenam
22810 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a 20 20  es as URIs */.  
22820 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20 20 20  int bUseCis;    
22830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22840 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72 69 6e    /* Use coverin
22850 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20 66 75  g indices for fu
22860 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e  ll-scans */.  in
22870 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20  t mxStrlen;     
22880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22890 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e  /* Maximum strin
228a0 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e  g length */.  in
228b0 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20  t neverCorrupt; 
228c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228d0 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 61  /* Database is a
228e0 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65  lways well-forme
228f0 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f  d */.  int szLoo
22900 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
22910 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61           /* Defa
22920 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75  ult lookaside bu
22930 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69  ffer size */.  i
22940 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20  nt nLookaside;  
22950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22960 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b   /* Default look
22970 61 73 69 64 65 20 62 75 66 66 65 72 20 63 6f 75  aside buffer cou
22980 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d  nt */.  int nStm
22990 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20  tSpill;         
229a0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d            /* Stm
229b0 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d  t-journal spill-
229c0 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c  to-disk threshol
229d0 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  d */.  sqlite3_m
229e0 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20  em_methods m;   
229f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d           /* Low-
22a00 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c  level memory all
22a10 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63  ocation interfac
22a20 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d  e */.  sqlite3_m
22a30 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74  utex_methods mut
22a40 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d  ex;      /* Low-
22a50 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65  level mutex inte
22a60 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74  rface */.  sqlit
22a70 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64  e3_pcache_method
22a80 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20  s2 pcache2;  /* 
22a90 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63  Low-level page-c
22aa0 61 63 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a  ache interface *
22ab0 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b  /.  void *pHeap;
22ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ad0 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74        /* Heap st
22ae0 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20  orage space */. 
22af0 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20   int nHeap;     
22b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b10 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48     /* Size of pH
22b20 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d  eap[] */.  int m
22b30 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20  nReq, mxReq;    
22b40 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22b50 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70  Min and max heap
22b60 20 72 65 71 75 65 73 74 73 20 73 69 7a 65 73 20   requests sizes 
22b70 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  */.  sqlite3_int
22b80 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20  64 szMmap;      
22b90 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29         /* mmap()
22ba0 20 73 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20   space per open 
22bb0 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65  file */.  sqlite
22bc0 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20  3_int64 mxMmap; 
22bd0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
22be0 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72  aximum value for
22bf0 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69   szMmap */.  voi
22c00 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20 20 20  d *pScratch;    
22c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22c20 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f 72 79  * Scratch memory
22c30 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63 72 61   */.  int szScra
22c40 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20 20  tch;            
22c50 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
22c60 6f 66 20 65 61 63 68 20 73 63 72 61 74 63 68 20  of each scratch 
22c70 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e 74 20  buffer */.  int 
22c80 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  nScratch;       
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22ca0 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72 61 74   Number of scrat
22cb0 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a 20 20  ch buffers */.  
22cc0 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20 20 20  void *pPage;    
22cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ce0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
22cf0 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20  memory */.  int 
22d00 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  szPage;         
22d10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22d20 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20 70 61   Size of each pa
22d30 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  ge in pPage[] */
22d40 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20 20 20  .  int nPage;   
22d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
22d70 66 20 70 61 67 65 73 20 69 6e 20 70 50 61 67 65  f pages in pPage
22d80 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 50 61  [] */.  int mxPa
22d90 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20 20 20  rserStack;      
22da0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 61 78            /* max
22db0 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20 74 68  imum depth of th
22dc0 65 20 70 61 72 73 65 72 20 73 74 61 63 6b 20 2a  e parser stack *
22dd0 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64 43 61  /.  int sharedCa
22de0 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20 20 20  cheEnabled;     
22df0 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20 69 66        /* true if
22e00 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f   shared-cache mo
22e10 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a 20 20  de enabled */.  
22e20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20 20 20  u32 szPma;      
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53 6f 72    /* Maximum Sor
22e50 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a 2f 0a  ter PMA size */.
22e60 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65 20 6d    /* The above m
22e70 69 67 68 74 20 62 65 20 69 6e 69 74 69 61 6c 69  ight be initiali
22e80 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e  zed to non-zero.
22e90 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
22ea0 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73 0a 20  need to always. 
22eb0 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20 62 65   ** initially be
22ec0 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72 2e 20   zero, however. 
22ed0 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69 74 3b  */.  int isInit;
22ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ef0 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
22f00 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a 61 74  fter initializat
22f10 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68 65 64  ion has finished
22f20 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72 6f 67   */.  int inProg
22f30 72 65 73 73 3b 20 20 20 20 20 20 20 20 20 20 20  ress;           
22f40 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
22f50 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69 7a 61  while initializa
22f60 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65 73 73  tion in progress
22f70 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75 74 65   */.  int isMute
22f80 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  xInit;          
22f90 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
22fa0 61 66 74 65 72 20 6d 75 74 65 78 65 73 20 61 72  after mutexes ar
22fb0 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  e initialized */
22fc0 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f 63 49  .  int isMallocI
22fd0 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
22fe0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
22ff0 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
23000 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
23010 74 20 69 73 50 43 61 63 68 65 49 6e 69 74 3b 20  t isPCacheInit; 
23020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23030 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
23040 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
23050 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 65  zed */.  int nRe
23060 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  fInitMutex;     
23070 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
23080 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20 6f 66  mber of users of
23090 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f 0a 20   pInitMutex */. 
230a0 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a   sqlite3_mutex *
230b0 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20 20 20  pInitMutex;     
230c0 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73 65 64     /* Mutex used
230d0 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e 69 74   by sqlite3_init
230e0 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20 76 6f  ialize() */.  vo
230f0 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69 64 2a  id (*xLog)(void*
23100 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
23110 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e 20 66  ); /* Function f
23120 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a 20 20  or logging */.  
23130 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b 20 20  void *pLogArg;  
23140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23150 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72       /* First ar
23160 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67 28 29  gument to xLog()
23170 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
23180 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f 47 0a  E_ENABLE_SQLLOG.
23190 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f 67 29    void(*xSqllog)
231a0 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c  (void*,sqlite3*,
231b0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
231c0 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71 6c 6c  );.  void *pSqll
231d0 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a 23 69  ogArg;.#endif.#i
231e0 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44 42 45  fdef SQLITE_VDBE
231f0 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a 20 54  _COVERAGE.  /* T
23200 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 61 6c  he following cal
23210 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20 4e 55  lback (if not NU
23220 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64 20 6f  LL) is invoked o
23230 6e 20 65 76 65 72 79 20 56 44 42 45 20 62 72 61  n every VDBE bra
23240 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61 74 69  nch.  ** operati
23250 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63 61 6c  on.  Set the cal
23260 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51 4c 49  lback using SQLI
23270 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44 42 45  TE_TESTCTRL_VDBE
23280 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a 2f 0a  _COVERAGE..  */.
23290 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65 42 72    void (*xVdbeBr
232a0 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e 74 20  anch)(void*,int 
232b0 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54 68 69  iSrcLine,u8 eThi
232c0 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a 20 43  s,u8 eMx);  /* C
232d0 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69  allback */.  voi
232e0 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68 41 72  d *pVdbeBranchAr
232f0 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23310 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
23320 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64 69 66  gument */.#endif
23330 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
23340 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69 6e 74  UNTESTABLE.  int
23350 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b   (*xTestCallback
23360 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f  )(int);        /
23370 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c  * Invoked by sql
23380 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a  ite3FaultSim() *
23390 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62  /.#endif.  int b
233a0 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20  LocaltimeFault; 
233b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
233c0 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63  True to fail loc
233d0 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a  altime() calls *
233e0 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52 65 73  /.  int iOnceRes
233f0 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20 20 20  etThreshold;    
23400 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 74 6f        /* When to
23410 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65 20 63   reset OP_Once c
23420 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f  ounters */.};../
23430 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72 6f 20  *.** This macro 
23440 69 73 20 75 73 65 64 20 69 6e 73 69 64 65 20 6f  is used inside o
23450 66 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  f assert() state
23460 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63 61 74  ments to indicat
23470 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 61 73  e that.** the as
23480 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76 61 6c  sert is only val
23490 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66 6f 72  id on a well-for
234a0 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20 20 49  med database.  I
234b0 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a  nstead of:.**.**
234c0 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 29       assert( X )
234d0 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72 69 74  ;.**.** One writ
234e0 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73  es:.**.**     as
234f0 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52 52 55  sert( X || CORRU
23500 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a 20 43  PT_DB );.**.** C
23510 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74 72 75  ORRUPT_DB is tru
23520 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61 6c 20  e during normal 
23530 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f 52 52  operation.  CORR
23540 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f 74 20  UPT_DB does not 
23550 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68 61 74  indicate.** that
23560 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
23570 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f 72 72   definitely corr
23580 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74 20 69  upt, only that i
23590 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72 72 75  t might be corru
235a0 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73 74 20  pt..** For most 
235b0 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f 52 52  test cases, CORR
235c0 55 50 54 5f 44 42 20 69 73 20 73 65 74 20 74 6f  UPT_DB is set to
235d0 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61 20 73   false using a s
235e0 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69 74 65  pecial.** sqlite
235f0 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 29  3_test_control()
23600 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65 73 20  .  This enables 
23610 61 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65  assert() stateme
23620 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a 2a 20  nts to prove.** 
23630 74 68 69 6e 67 73 20 74 68 61 74 20 61 72 65 20  things that are 
23640 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f 72 20  always true for 
23650 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61  well-formed data
23660 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  bases..*/.#defin
23670 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20 28 73  e CORRUPT_DB  (s
23680 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e 65 76  qlite3Config.nev
23690 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a 0a 2f  erCorrupt==0)../
236a0 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70 6f 69  *.** Context poi
236b0 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f 77 6e  nter passed down
236c0 20 74 68 72 6f 75 67 68 20 74 68 65 20 74 72 65   through the tre
236d0 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72 75 63  e-walk..*/.struc
236e0 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50 61 72  t Walker {.  Par
236f0 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20 20  se *pParse;     
23700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23710 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73 65 72         /* Parser
23720 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a 20 20   context.  */.  
23730 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c 6c 62  int (*xExprCallb
23740 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20 45 78  ack)(Walker*, Ex
23750 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43 61 6c  pr*);     /* Cal
23760 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72 65 73  lback for expres
23770 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 28  sions */.  int (
23780 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b  *xSelectCallback
23790 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
237a0 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  *);  /* Callback
237b0 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
237c0 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65 63 74    void (*xSelect
237d0 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c 6b 65  Callback2)(Walke
237e0 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a 20 53  r*,Select*);/* S
237f0 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b 20 66  econd callback f
23800 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20  or SELECTs */.  
23810 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74 68 3b  int walkerDepth;
23820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23830 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
23840 62 65 72 20 6f 66 20 73 75 62 71 75 65 72 69 65  ber of subquerie
23850 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64 65 3b  s */.  u8 eCode;
23860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23880 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72 6f 63   /* A small proc
23890 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f 0a 20  essing code */. 
238a0 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20 20 20   union {        
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238c0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78             /* Ex
238d0 74 72 61 20 64 61 74 61 20 66 6f 72 20 63 61 6c  tra data for cal
238e0 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e 61 6d  lback */.    Nam
238f0 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b 20 20  eContext *pNC;  
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23910 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69 6e 67         /* Naming
23920 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20 20 20   context */.    
23930 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
23940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23950 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
23960 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 69 6e  ounter */.    in
23970 74 20 69 43 75 72 3b 20 20 20 20 20 20 20 20 20  t iCur;         
23980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23990 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63 75 72          /* A cur
239a0 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
239b0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
239c0 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ist;            
239d0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46              /* F
239e0 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
239f0 20 20 73 74 72 75 63 74 20 53 72 63 43 6f 75 6e    struct SrcCoun
23a00 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20 20 20  t *pSrcCount;   
23a10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
23a20 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e 20 72  ounting column r
23a30 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20 20 20  eferences */.   
23a40 20 73 74 72 75 63 74 20 43 43 75 72 48 69 6e 74   struct CCurHint
23a50 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20 20 20   *pCCurHint;    
23a60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
23a70 65 64 20 62 79 20 63 6f 64 65 43 75 72 73 6f 72  ed by codeCursor
23a80 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e  Hint() */.    in
23a90 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20 20 20  t *aiCol;       
23aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ab0 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79          /* array
23ac0 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78   of column index
23ad0 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74  es */.    struct
23ae0 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43   IdxCover *pIdxC
23af0 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  over;           
23b00 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72      /* Check for
23b10 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20   index coverage 
23b20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64  */.    struct Id
23b30 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49 64 78  xExprTrans *pIdx
23b40 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
23b50 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 6e 64 65   /* Convert inde
23b60 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f 6c 75  xed expr to colu
23b70 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69  mn */.    ExprLi
23b80 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
23b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ba0 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42 59 20      /* GROUP BY 
23bb0 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74  clause */.    st
23bc0 72 75 63 74 20 48 61 76 69 6e 67 54 6f 57 68 65  ruct HavingToWhe
23bd0 72 65 43 74 78 20 2a 70 48 61 76 69 6e 67 43 74  reCtx *pHavingCt
23be0 78 3b 20 20 20 20 20 20 2f 2a 20 48 41 56 49 4e  x;      /* HAVIN
23bf0 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61 75 73  G to WHERE claus
23c00 65 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75 3b 0a  e ctx */.  } u;.
23c10 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64 20 64  };../* Forward d
23c20 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f 0a 69  eclarations */.i
23c30 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
23c40 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  pr(Walker*, Expr
23c50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
23c60 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61 6c 6b  alkExprList(Walk
23c70 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  er*, ExprList*);
23c80 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
23c90 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a 2c 20  Select(Walker*, 
23ca0 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71  Select*);.int sq
23cb0 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 45  lite3WalkSelectE
23cc0 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c  xpr(Walker*, Sel
23cd0 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ect*);.int sqlit
23ce0 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72 6f 6d  e3WalkSelectFrom
23cf0 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74  (Walker*, Select
23d00 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
23d10 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b  xprWalkNoop(Walk
23d20 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
23d30 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 57 61   sqlite3SelectWa
23d40 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
23d50 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64 65 66  Select*);.#ifdef
23d60 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 76 6f   SQLITE_DEBUG.vo
23d70 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
23d80 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61 6c 6b  WalkAssert2(Walk
23d90 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23  er*, Select*);.#
23da0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  endif../*.** Ret
23db0 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
23dc0 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
23dd0 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
23de0 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
23df0 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
23e00 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
23e10 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
23e20 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
23e30 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
23e40 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
23e50 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
23e60 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
23e70 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
23e80 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
23e90 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
23ea0 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
23eb0 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
23ec0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
23ed0 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
23ee0 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
23ef0 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
23f00 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
23f10 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23f20 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
23f30 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
23f40 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
23f50 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
23f60 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
23f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
23f80 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
23f90 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
23fa0 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
23fb0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
23fc0 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
23fd0 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
23fe0 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
23ff0 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
24000 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24010 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
24020 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
24030 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
24040 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
24050 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
24060 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
24070 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
24080 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
24090 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
240a0 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
240b0 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
240c0 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
240d0 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
240e0 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
240f0 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
24100 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
24110 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
24120 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
24130 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
24140 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
24150 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
24160 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
24170 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
24180 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
24190 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
241a0 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
241b0 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
241c0 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
241d0 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
241e0 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
241f0 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
24200 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
24210 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
24220 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
24230 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
24240 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
24250 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
24260 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
24270 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
24280 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
24290 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
242a0 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
242b0 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
242c0 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
242d0 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
242e0 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
242f0 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
24300 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
24310 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
24320 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
24330 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
24340 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
24350 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
24360 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
24370 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
24380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24390 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
243a0 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
243b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
243c0 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
243d0 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
243e0 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
243f0 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
24400 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
24410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24420 20 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 5c 0a 7d 0a 0a             \.}..
24440 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
24450 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
24460 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
24470 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
24480 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
24490 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
244a0 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
244b0 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
244c0 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
244d0 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
244e0 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
244f0 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
24500 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
24510 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
24520 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
24530 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
24540 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
24550 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
24560 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
24570 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
24580 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
24590 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
245a0 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
245b0 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
245c0 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
245d0 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
245e0 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
245f0 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
24600 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
24610 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
24620 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
24630 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
24640 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
24650 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
24660 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
24670 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
24680 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54  __).#ifdef SQLIT
24690 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71  E_DEBUG.  int sq
246a0 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
246b0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
246c0 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
246d0 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  or(int);.# defin
246e0 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
246f0 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  KPT sqlite3Nomem
24700 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
24710 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
24720 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
24730 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
24740 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
24750 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
24760 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
24770 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a  PT SQLITE_NOMEM.
24780 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
24790 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
247a0 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
247b0 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  MEM.#endif../*.*
247c0 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20  * FTS3 and FTS4 
247d0 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72  both require vir
247e0 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f  tual table suppo
247f0 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rt.*/.#if define
24800 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
24810 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e  RTUALTABLE).# un
24820 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
24830 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53  E_FTS3.# undef S
24840 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
24850 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
24860 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
24870 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
24880 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
24890 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
248a0 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
248b0 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
248c0 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
248d0 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
248e0 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
248f0 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
24900 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
24910 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
24920 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
24930 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
24940 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
24950 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
24960 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
24970 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
24980 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23  _ENABLE_FTS3 1.#
24990 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
249a0 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
249b0 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
249c0 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
249d0 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
249e0 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
249f0 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
24a00 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
24a10 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
24a20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
24a30 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
24a40 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
24a50 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
24a60 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
24a70 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
24a80 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
24a90 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
24aa0 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
24ab0 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
24ac0 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
24ad0 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
24ae0 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
24af0 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
24b00 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
24b10 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
24b20 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
24b30 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
24b40 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
24b50 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
24b60 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
24b70 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
24b80 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
24b90 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
24ba0 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
24bb0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
24bc0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24bd0 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
24be0 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
24bf0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
24c00 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
24c10 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
24c20 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24c30 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
24c40 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
24c50 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24c60 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
24c70 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
24c80 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
24c90 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
24ca0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
24cb0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24cc0 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
24cd0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
24ce0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24cf0 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
24d00 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
24d10 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
24d20 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
24d30 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
24d40 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24d50 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
24d60 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
24d70 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
24d80 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65  r)(x)]).# define
24d90 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
24da0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
24db0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
24dc0 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a  char)(x)]&0x80).
24dd0 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
24de0 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
24df0 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
24e00 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
24e10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24e20 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
24e30 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
24e40 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
24e50 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
24e60 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
24e70 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
24e80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24e90 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
24ea0 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
24eb0 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
24ec0 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
24ed0 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
24ee0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24ef0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
24f00 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
24f10 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
24f20 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
24f30 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
24f40 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
24f50 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
24f60 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
24f70 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
24f80 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78     ((x)=='"'||(x
24f90 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b  )=='\''||(x)=='[
24fa0 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e  '||(x)=='`').#en
24fb0 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
24fc0 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
24fd0 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20  PTION_DIAGS.int 
24fe0 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28  sqlite3IsIdChar(
24ff0 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  u8);.#endif../*.
25000 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
25010 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
25020 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  */.int sqlite3St
25030 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72  rICmp(const char
25040 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
25050 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
25060 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
25070 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43  ;.char *sqlite3C
25080 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e  olumnType(Column
25090 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  *,char*);.#defin
250a0 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
250b0 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
250c0 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
250d0 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
250e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
250f0 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
25100 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
25110 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
25120 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
25130 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
25140 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
25150 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
25160 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
25170 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
25180 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
25190 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
251a0 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  wNN(sqlite3*, u6
251b0 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  4);.char *sqlite
251c0 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
251d0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
251e0 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
251f0 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
25200 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36  ,const char*, u6
25210 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
25220 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
25230 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
25240 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
25250 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
25260 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
25270 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
25280 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
25290 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
252a0 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
252b0 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
252c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46  .void sqlite3DbF
252d0 72 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20  reeNN(sqlite3*, 
252e0 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
252f0 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f  te3MallocSize(vo
25300 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  id*);.int sqlite
25310 33 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71  3DbMallocSize(sq
25320 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
25330 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72  void *sqlite3Scr
25340 61 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b  atchMalloc(int);
25350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72  .void sqlite3Scr
25360 61 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b  atchFree(void*);
25370 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61  .void *sqlite3Pa
25380 67 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76  geMalloc(int);.v
25390 6f 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46  oid sqlite3PageF
253a0 72 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64  ree(void*);.void
253b0 20 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65   sqlite3MemSetDe
253c0 66 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66  fault(void);.#if
253d0 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
253e0 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
253f0 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
25400 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
25410 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
25420 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  id));.#endif.int
25430 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
25440 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
25450 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
25460 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
25470 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
25480 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
25490 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
254a0 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
254b0 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
254c0 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
254d0 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
254e0 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
254f0 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
25500 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
25510 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
25520 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
25530 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
25540 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
25550 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
25560 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
25570 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
25580 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
25590 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
255a0 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
255b0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
255c0 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
255d0 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
255e0 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
255f0 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
25600 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
25610 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
25620 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
25630 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64  e(D,P).#else.# d
25640 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
25650 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
25660 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
25670 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
25680 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
25690 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
256a0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
256b0 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
256c0 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
256d0 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
256e0 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
256f0 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f  #endif../* Do no
25700 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d  t allow both MEM
25710 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33  SYS5 and MEMSYS3
25720 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74   to be defined t
25730 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65  ogether.  If the
25740 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c  y.** are, disabl
25750 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66  e MEMSYS3.*/.#if
25760 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
25770 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
25780 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
25790 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
257a0 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
257b0 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  .#undef SQLITE_E
257c0 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65  NABLE_MEMSYS3.#e
257d0 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
257e0 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
257f0 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
25800 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
25810 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
25820 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
25830 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
25840 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
25850 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
25860 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
25870 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
25880 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
25890 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
258a0 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
258b0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
258c0 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
258d0 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
258e0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
258f0 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
25900 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
25910 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
25920 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
25930 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
25940 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69  X_OMIT) && !defi
25950 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
25960 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71  _NOOP).  void sq
25970 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
25980 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  er(void);.#else.
25990 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
259a0 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a  MemoryBarrier().
259b0 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f  #endif..sqlite3_
259c0 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61  int64 sqlite3Sta
259d0 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
259e0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
259f0 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  sUp(int, int);.v
25a00 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
25a10 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b  sDown(int, int);
25a20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
25a30 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74  tusHighwater(int
25a40 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65  , int);../* Acce
25a50 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73  ss to mutexes us
25a60 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74  ed by sqlite3_st
25a70 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65  atus() */.sqlite
25a80 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
25a90 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69  Pcache1Mutex(voi
25aa0 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65  d);.sqlite3_mute
25ab0 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  x *sqlite3Malloc
25ac0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69  Mutex(void);..#i
25ad0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
25ae0 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
25af0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
25b00 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
25b10 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
25b20 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
25b30 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
25b40 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
25b50 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
25b60 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
25b70 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a  ation about SQL.
25b80 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67  ** functions arg
25b90 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20  uments that are 
25ba0 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  the parameters t
25bb0 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66  o the printf() f
25bc0 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  unction..*/.stru
25bd0 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
25be0 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ts {.  int nArg;
25bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25c00 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
25c10 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
25c20 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
25c30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
25c40 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
25c50 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
25c60 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
25c70 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54   **apArg;   /* T
25c80 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75  he argument valu
25c90 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73  es */.};..void s
25ca0 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53  qlite3VXPrintf(S
25cb0 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
25cc0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
25cd0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
25ce0 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
25cf0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
25d00 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25d10 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
25d20 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
25d30 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
25d40 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
25d50 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
25d60 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65  va_list);.#if de
25d70 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
25d80 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
25d90 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
25da0 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACE).  void sqli
25db0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
25dc0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
25dd0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
25de0 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
25df0 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
25e00 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
25e10 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
25e20 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
25e30 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
25e40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
25e50 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69  eViewExpr(TreeVi
25e60 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a  ew*, const Expr*
25e70 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
25e80 6c 69 74 65 33 54 72 65 65 56 69 65 77 42 61 72  lite3TreeViewBar
25e90 65 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  eExprList(TreeVi
25ea0 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
25eb0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
25ec0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
25ed0 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
25ee0 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
25ef0 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75  nst ExprList*, u
25f00 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  8, const char*);
25f10 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
25f20 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
25f30 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
25f40 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76  elect*, u8);.  v
25f50 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
25f60 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77  iewWith(TreeView
25f70 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20  *, const With*, 
25f80 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
25f90 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
25fa0 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
25fb0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
25fc0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25fd0 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
25fe0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
25ff0 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
26000 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
26010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b  .void sqlite3Tok
26020 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68  enInit(Token*,ch
26030 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
26040 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
26050 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
26060 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
26070 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
26080 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
26090 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
260a0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
260b0 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
260c0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
260d0 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
260e0 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
260f0 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
26100 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
26110 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
26120 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
26130 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
26140 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
26150 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
26160 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
26170 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
26180 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
26190 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e  BUG.int sqlite3N
261a0 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61  oTempsInRange(Pa
261b0 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23  rse*,int,int);.#
261c0 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69  endif.Expr *sqli
261d0 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
261e0 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
261f0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
26200 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
26210 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
26220 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
26230 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
26240 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
26250 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
26260 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
26270 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
26280 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
26290 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
262a0 33 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28  3PExprAddSelect(
262b0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53  Parse*, Expr*, S
262c0 65 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73  elect*);.Expr *s
262d0 71 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71  qlite3ExprAnd(sq
262e0 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78  lite3*,Expr*, Ex
262f0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
26300 74 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28  te3ExprFunction(
26310 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26320 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
26330 73 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67  sqlite3ExprAssig
26340 6e 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65  nVarNumber(Parse
26350 2a 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a  *, Expr*, u32);.
26360 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26370 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
26380 20 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73   Expr*);.ExprLis
26390 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
263a0 73 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c  stAppend(Parse*,
263b0 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29  ExprList*,Expr*)
263c0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
263d0 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
263e0 64 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45  dVector(Parse*,E
263f0 78 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a  xprList*,IdList*
26400 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71  ,Expr*);.void sq
26410 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
26420 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69  SortOrder(ExprLi
26430 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  st*,int);.void s
26440 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65  qlite3ExprListSe
26450 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70  tName(Parse*,Exp
26460 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  rList*,Token*,in
26470 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26480 45 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28  ExprListSetSpan(
26490 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
264a0 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
264b0 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
264c0 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a  tDelete(sqlite3*
264d0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33  , ExprList*);.u3
264e0 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  2 sqlite3ExprLis
264f0 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70  tFlags(const Exp
26500 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
26510 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33  ite3Init(sqlite3
26520 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20  *, char**);.int 
26530 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62  sqlite3InitCallb
26540 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  ack(void*, int, 
26550 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b  char**, char**);
26560 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
26570 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  gma(Parse*,Token
26580 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
26590 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
265a0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
265b0 4c 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73  LTABLE.Module *s
265c0 71 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61 62  qlite3PragmaVtab
265d0 52 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33  Register(sqlite3
265e0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e  *,const char *zN
265f0 61 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ame);.#endif.voi
26600 64 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c  d sqlite3ResetAl
26610 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63  lSchemasOfConnec
26620 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a  tion(sqlite3*);.
26630 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65  void sqlite3Rese
26640 74 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74  tOneSchema(sqlit
26650 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
26660 71 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61  qlite3CollapseDa
26670 74 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69  tabaseArray(sqli
26680 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
26690 74 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61  te3CommitInterna
266a0 6c 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33  lChanges(sqlite3
266b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
266c0 44 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65  DeleteColumnName
266d0 73 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65  s(sqlite3*,Table
266e0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
266f0 6f 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69  olumnsFromExprLi
26700 73 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69  st(Parse*,ExprLi
26710 73 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a  st*,i16*,Column*
26720 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26730 53 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54  SelectAddColumnT
26740 79 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28  ypeAndCollation(
26750 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65  Parse*,Table*,Se
26760 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
26770 71 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f  qlite3ResultSetO
26780 66 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53  fSelect(Parse*,S
26790 65 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71  elect*);.void sq
267a0 6c 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54  lite3OpenMasterT
267b0 61 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e  able(Parse *, in
267c0 74 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  t);.Index *sqlit
267d0 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65  e3PrimaryKeyInde
267e0 78 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73  x(Table*);.i16 s
267f0 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e  qlite3ColumnOfIn
26800 64 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29  dex(Index*, i16)
26810 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
26820 61 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  artTable(Parse*,
26830 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e  Token*,Token*,in
26840 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a  t,int,int,int);.
26850 23 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  #if SQLITE_ENABL
26860 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
26870 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
26880 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46  olumnPropertiesF
26890 72 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20  romName(Table*, 
268a0 43 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a  Column*);.#else.
268b0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
268c0 43 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73  ColumnProperties
268d0 46 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a  FromName(T,C) /*
268e0 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66   no-op */.#endif
268f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64  .void sqlite3Add
26900 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f  Column(Parse*,To
26910 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  ken*,Token*);.vo
26920 69 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74  id sqlite3AddNot
26930 4e 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74  Null(Parse*, int
26940 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
26950 64 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72  ddPrimaryKey(Par
26960 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
26970 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
26980 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
26990 68 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50  heckConstraint(P
269a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76  arse*, Expr*);.v
269b0 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65  oid sqlite3AddDe
269c0 66 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65  faultValue(Parse
269d0 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f  *,ExprSpan*);.vo
269e0 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c  id sqlite3AddCol
269f0 6c 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c  lateType(Parse*,
26a00 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
26a10 71 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50  qlite3EndTable(P
26a20 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b  arse*,Token*,Tok
26a30 65 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b  en*,u8,Select*);
26a40 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73  .int sqlite3Pars
26a50 65 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  eUri(const char*
26a60 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73  ,const char*,uns
26a70 69 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20  igned int*,.    
26a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26a90 73 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68  sqlite3_vfs**,ch
26aa0 61 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42  ar**,char **);.B
26ab0 74 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e  tree *sqlite3DbN
26ac0 61 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74  ameToBtree(sqlit
26ad0 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  e3*,const char*)
26ae0 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ;..#ifdef SQLITE
26af0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65  _UNTESTABLE.# de
26b00 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
26b10 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
26b20 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
26b30 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
26b40 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
26b50 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
26b60 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
26b70 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
26b80 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
26b90 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
26ba0 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
26bb0 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
26bc0 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
26bd0 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
26be0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
26bf0 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
26c00 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
26c10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
26c20 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
26c30 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
26c40 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
26c50 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
26c60 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69  ITE_UNTESTABLE.i
26c70 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
26c80 42 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c  BuiltinTest(int,
26c90 69 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52  int*);.#endif..R
26ca0 6f 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f  owSet *sqlite3Ro
26cb0 77 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33  wSetInit(sqlite3
26cc0 2a 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e  *, void*, unsign
26cd0 65 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  ed int);.void sq
26ce0 6c 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72  lite3RowSetClear
26cf0 28 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20  (RowSet*);.void 
26d00 73 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73  sqlite3RowSetIns
26d10 65 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34  ert(RowSet*, i64
26d20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
26d30 77 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a  wSetTest(RowSet*
26d40 2c 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36  , int iBatch, i6
26d50 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  4);.int sqlite3R
26d60 6f 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74  owSetNext(RowSet
26d70 2a 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20  *, i64*);..void 
26d80 73 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65  sqlite3CreateVie
26d90 77 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  w(Parse*,Token*,
26da0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  Token*,Token*,Ex
26db0 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c  prList*,Select*,
26dc0 69 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21  int,int);..#if !
26dd0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
26de0 4d 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65  MIT_VIEW) || !de
26df0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
26e00 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a  T_VIRTUALTABLE).
26e10 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65    int sqlite3Vie
26e20 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
26e30 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a  Parse*,Table*);.
26e40 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
26e50 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
26e60 75 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a  umnNames(A,B) 0.
26e70 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
26e80 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e  TE_MAX_ATTACHED>
26e90 33 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  30.  int sqlite3
26ea0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44  DbMaskAllZero(yD
26eb0 62 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76  bMask);.#endif.v
26ec0 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54  oid sqlite3DropT
26ed0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
26ee0 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  List*, int, int)
26ef0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
26f00 64 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  deDropTable(Pars
26f10 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
26f20 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26f30 74 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73  te3DeleteTable(s
26f40 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29  qlite3*, Table*)
26f50 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ;.#ifndef SQLITE
26f60 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d  _OMIT_AUTOINCREM
26f70 45 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ENT.  void sqlit
26f80 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42  e3AutoincrementB
26f90 65 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72  egin(Parse *pPar
26fa0 73 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  se);.  void sqli
26fb0 74 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74  te3Autoincrement
26fc0 45 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73  End(Parse *pPars
26fd0 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
26fe0 6e 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  ne sqlite3Autoin
26ff0 63 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a  crementBegin(X).
27000 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
27010 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64  AutoincrementEnd
27020 28 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  (X).#endif.void 
27030 73 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61  sqlite3Insert(Pa
27040 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
27050 53 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a  Select*, IdList*
27060 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71  , int);.void *sq
27070 6c 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61  lite3ArrayAlloca
27080 74 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64  te(sqlite3*,void
27090 2a 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29  *,int,int*,int*)
270a0 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65  ;.IdList *sqlite
270b0 33 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71  3IdListAppend(sq
270c0 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c  lite3*, IdList*,
270d0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
270e0 6c 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78  lite3IdListIndex
270f0 28 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  (IdList*,const c
27100 68 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  har*);.SrcList *
27110 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e  sqlite3SrcListEn
27120 6c 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20  large(sqlite3*, 
27130 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  SrcList*, int, i
27140 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
27150 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65  lite3SrcListAppe
27160 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63  nd(sqlite3*, Src
27170 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
27180 6f 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20  oken*);.SrcList 
27190 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41  *sqlite3SrcListA
271a0 70 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61  ppendFromTerm(Pa
271b0 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
271c0 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a  Token*, Token*,.
271d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271f0 20 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65        Token*, Se
27200 6c 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64  lect*, Expr*, Id
27210 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
27220 69 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78  ite3SrcListIndex
27230 65 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72  edBy(Parse *, Sr
27240 63 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a  cList *, Token *
27250 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
27260 72 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50  rcListFuncArgs(P
27270 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  arse*, SrcList*,
27280 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74   ExprList*);.int
27290 20 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42   sqlite3IndexedB
272a0 79 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c  yLookup(Parse *,
272b0 20 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f   struct SrcList_
272c0 69 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71  item *);.void sq
272d0 6c 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66  lite3SrcListShif
272e0 74 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73  tJoinType(SrcLis
272f0 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27300 33 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75  3SrcListAssignCu
27310 72 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72  rsors(Parse*, Sr
27320 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  cList*);.void sq
27330 6c 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74  lite3IdListDelet
27340 65 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69  e(sqlite3*, IdLi
27350 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  st*);.void sqlit
27360 65 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28  e3SrcListDelete(
27370 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73  sqlite3*, SrcLis
27380 74 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69  t*);.Index *sqli
27390 74 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78  te3AllocateIndex
273a0 4f 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c  Object(sqlite3*,
273b0 69 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b  i16,int,char**);
273c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65  .void sqlite3Cre
273d0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
273e0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72  Token*,Token*,Sr
273f0 63 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a  cList*,ExprList*
27400 2c 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20  ,int,Token*,.   
27410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27420 20 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e         Expr*, in
27430 74 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69  t, int, u8);.voi
27440 64 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64  d sqlite3DropInd
27450 65 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  ex(Parse*, SrcLi
27460 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
27470 71 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72  qlite3Select(Par
27480 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65  se*, Select*, Se
27490 6c 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65  lectDest*);.Sele
274a0 63 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63  ct *sqlite3Selec
274b0 74 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72  tNew(Parse*,Expr
274c0 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45  List*,SrcList*,E
274d0 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a  xpr*,ExprList*,.
274e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274f0 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45           Expr*,E
27500 78 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70  xprList*,u32,Exp
27510 72 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  r*,Expr*);.void 
27520 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c  sqlite3SelectDel
27530 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65  ete(sqlite3*, Se
27540 6c 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73  lect*);.Table *s
27550 71 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f  qlite3SrcListLoo
27560 6b 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  kup(Parse*, SrcL
27570 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
27580 65 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72  e3IsReadOnly(Par
27590 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
275a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f  );.void sqlite3O
275b0 70 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  penTable(Parse*,
275c0 20 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69   int iCur, int i
275d0 44 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  Db, Table*, int)
275e0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
275f0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41  LITE_ENABLE_UPDA
27600 54 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29  TE_DELETE_LIMIT)
27610 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
27620 49 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52  ITE_OMIT_SUBQUER
27630 59 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  Y).Expr *sqlite3
27640 4c 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65  LimitWhere(Parse
27650 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a  *,SrcList*,Expr*
27660 2c 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a  ,ExprList*,Expr*
27670 2c 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23  ,Expr*,char*);.#
27680 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
27690 65 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72  e3DeleteFrom(Par
276a0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45  se*, SrcList*, E
276b0 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
276c0 74 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a  te3Update(Parse*
276d0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72  , SrcList*, Expr
276e0 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  List*, Expr*, in
276f0 74 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73  t);.WhereInfo *s
27700 71 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e  qlite3WhereBegin
27710 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a  (Parse*,SrcList*
27720 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
27730 2c 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69  ,ExprList*,u16,i
27740 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27750 33 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49  3WhereEnd(WhereI
27760 6e 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71  nfo*);.LogEst sq
27770 6c 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74  lite3WhereOutput
27780 52 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e  RowCount(WhereIn
27790 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  fo*);.int sqlite
277a0 33 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74  3WhereIsDistinct
277b0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e  (WhereInfo*);.in
277c0 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  t sqlite3WhereIs
277d0 4f 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66  Ordered(WhereInf
277e0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
277f0 57 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65  WhereOrderedInne
27800 72 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a  rLoop(WhereInfo*
27810 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27820 65 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72  ereIsSorted(Wher
27830 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c  eInfo*);.int sql
27840 69 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75  ite3WhereContinu
27850 65 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f  eLabel(WhereInfo
27860 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27870 68 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57  hereBreakLabel(W
27880 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
27890 73 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e  sqlite3WhereOkOn
278a0 65 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a  ePass(WhereInfo*
278b0 2c 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65  , int*);.#define
278c0 20 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20   ONEPASS_OFF    
278d0 20 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73    0        /* Us
278e0 65 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74  e of ONEPASS not
278f0 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66   allowed */.#def
27900 69 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47  ine ONEPASS_SING
27910 4c 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a  LE   1        /*
27920 20 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66   ONEPASS valid f
27930 6f 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  or a single row 
27940 75 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e  update */.#defin
27950 65 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20  e ONEPASS_MULTI 
27960 20 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f     2        /* O
27970 4e 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20  NEPASS is valid 
27980 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77  for multiple row
27990 73 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65  s */.void sqlite
279a0 33 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64  3ExprCodeLoadInd
279b0 65 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c  exColumn(Parse*,
279c0 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e   Index*, int, in
279d0 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  t, int);.int sql
279e0 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43  ite3ExprCodeGetC
279f0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61  olumn(Parse*, Ta
27a00 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
27a10 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  int, u8);.void s
27a20 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
27a30 74 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72  tColumnToReg(Par
27a40 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
27a50 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
27a60 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
27a70 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
27a80 65 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c  e(Vdbe*, Table*,
27a90 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
27aa0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27ab0 72 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a  rCodeMove(Parse*
27ac0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29  , int, int, int)
27ad0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27ae0 70 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72  prCacheStore(Par
27af0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  se*, int, int, i
27b00 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27b10 33 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50  3ExprCachePush(P
27b20 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
27b30 69 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70  ite3ExprCachePop
27b40 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
27b50 71 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52  qlite3ExprCacheR
27b60 65 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e  emove(Parse*, in
27b70 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27b80 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
27b90 65 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  ear(Parse*);.voi
27ba0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63  d sqlite3ExprCac
27bb0 68 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65  heAffinityChange
27bc0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
27bd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27be0 45 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c  ExprCode(Parse*,
27bf0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f   Expr*, int);.vo
27c00 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  id sqlite3ExprCo
27c10 64 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45  deCopy(Parse*, E
27c20 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
27c30 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27c40 46 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65  Factorable(Parse
27c50 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
27c60 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
27c70 6f 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a  odeAtInit(Parse*
27c80 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
27c90 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
27ca0 64 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45  deTemp(Parse*, E
27cb0 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74  xpr*, int*);.int
27cc0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27cd0 54 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45  Target(Parse*, E
27ce0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
27cf0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27d00 41 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c  AndCache(Parse*,
27d10 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
27d20 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
27d30 65 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  eExprList(Parse*
27d40 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
27d50 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66  , int, u8);.#def
27d60 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f  ine SQLITE_ECEL_
27d70 44 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f  DUP      0x01  /
27d80 2a 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c  * Deep, not shal
27d90 6c 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64  low copies */.#d
27da0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
27db0 4c 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20  L_FACTOR   0x02 
27dc0 20 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63   /* Factor out c
27dd0 6f 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f  onstant terms */
27de0 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
27df0 45 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78  ECEL_REF      0x
27e00 30 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c  04  /* Use ExprL
27e10 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79  ist.u.x.iOrderBy
27e20 43 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  Col */.#define S
27e30 51 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52  QLITE_ECEL_OMITR
27e40 45 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69  EF  0x08  /* Omi
27e50 74 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e  t if ExprList.u.
27e60 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f  x.iOrderByCol */
27e70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27e80 72 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20  rIfTrue(Parse*, 
27e90 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  Expr*, int, int)
27ea0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
27eb0 70 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a  prIfFalse(Parse*
27ec0 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
27ed0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27ee0 45 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50  ExprIfFalseDup(P
27ef0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
27f00 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a  t, int);.Table *
27f10 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
27f20 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
27f30 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
27f40 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43  r*);.#define LOC
27f50 41 54 45 5f 56 49 45 57 20 20 20 20 30 78 30 31  ATE_VIEW    0x01
27f60 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f  .#define LOCATE_
27f70 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61 62  NOERR   0x02.Tab
27f80 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74  le *sqlite3Locat
27f90 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33  eTable(Parse*,u3
27fa0 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68  2 flags,const ch
27fb0 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
27fc0 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
27fd0 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d  3LocateTableItem
27fe0 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67  (Parse*,u32 flag
27ff0 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74  s,struct SrcList
28000 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20  _item *);.Index 
28010 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65  *sqlite3FindInde
28020 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  x(sqlite3*,const
28030 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
28040 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
28050 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74  e3UnlinkAndDelet
28060 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c  eTable(sqlite3*,
28070 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  int,const char*)
28080 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e  ;.void sqlite3Un
28090 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64  linkAndDeleteInd
280a0 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  ex(sqlite3*,int,
280b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f  const char*);.vo
280c0 69 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d  id sqlite3Vacuum
280d0 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b  (Parse*,Token*);
280e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56  .int sqlite3RunV
280f0 61 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71  acuum(char**, sq
28100 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68  lite3*, int);.ch
28110 61 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46  ar *sqlite3NameF
28120 72 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33  romToken(sqlite3
28130 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
28140 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61  sqlite3ExprCompa
28150 72 65 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c  re(Expr*, Expr*,
28160 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28170 65 33 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69  e3ExprCompareSki
28180 70 28 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20  p(Expr*, Expr*, 
28190 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
281a0 33 45 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65  3ExprListCompare
281b0 28 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  (ExprList*, Expr
281c0 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  List*, int);.int
281d0 20 73 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c   sqlite3ExprImpl
281e0 69 65 73 45 78 70 72 28 45 78 70 72 2a 2c 20 45  iesExpr(Expr*, E
281f0 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  xpr*, int);.void
28200 20 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c   sqlite3ExprAnal
28210 79 7a 65 41 67 67 72 65 67 61 74 65 73 28 4e 61  yzeAggregates(Na
28220 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72  meContext*, Expr
28230 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
28240 45 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69  ExprAnalyzeAggLi
28250 73 74 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  st(NameContext*,
28260 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
28270 73 71 6c 69 74 65 33 45 78 70 72 43 6f 76 65 72  sqlite3ExprCover
28280 65 64 42 79 49 6e 64 65 78 28 45 78 70 72 2a 2c  edByIndex(Expr*,
28290 20 69 6e 74 20 69 43 75 72 2c 20 49 6e 64 65 78   int iCur, Index
282a0 20 2a 70 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c   *pIdx);.int sql
282b0 69 74 65 33 46 75 6e 63 74 69 6f 6e 55 73 65 73  ite3FunctionUses
282c0 54 68 69 73 53 72 63 28 45 78 70 72 2a 2c 20 53  ThisSrc(Expr*, S
282d0 72 63 4c 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a  rcList*);.Vdbe *
282e0 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 50  sqlite3GetVdbe(P
282f0 61 72 73 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20  arse*);.#ifndef 
28300 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
28310 45 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  E.void sqlite3Pr
28320 6e 67 53 61 76 65 53 74 61 74 65 28 76 6f 69 64  ngSaveState(void
28330 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
28340 72 6e 67 52 65 73 74 6f 72 65 53 74 61 74 65 28  rngRestoreState(
28350 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  void);.#endif.vo
28360 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
28370 63 6b 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69  ckAll(sqlite3*,i
28380 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28390 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
283a0 61 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  a(Parse*, int);.
283b0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
283c0 56 65 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d  VerifyNamedSchem
283d0 61 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20  a(Parse*, const 
283e0 63 68 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64  char *zDb);.void
283f0 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61   sqlite3BeginTra
28400 6e 73 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsaction(Parse*,
28410 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28420 74 65 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63  te3CommitTransac
28430 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
28440 69 64 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61  id sqlite3Rollba
28450 63 6b 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  ckTransaction(Pa
28460 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
28470 74 65 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72  te3Savepoint(Par
28480 73 65 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a  se*, int, Token*
28490 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
284a0 6c 6f 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73  loseSavepoints(s
284b0 71 6c 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20  qlite3 *);.void 
284c0 73 71 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65  sqlite3LeaveMute
284d0 78 41 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28  xAndCloseZombie(
284e0 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
284f0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
28500 74 61 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74  tant(Expr*);.int
28510 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
28520 6e 73 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78  nstantNotJoin(Ex
28530 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
28540 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
28550 72 46 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c  rFunction(Expr*,
28560 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
28570 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f  3ExprIsConstantO
28580 72 47 72 6f 75 70 42 79 28 50 61 72 73 65 2a 2c  rGroupBy(Parse*,
28590 20 45 78 70 72 2a 2c 20 45 78 70 72 4c 69 73 74   Expr*, ExprList
285a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
285b0 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61  xprIsTableConsta
285c0 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23  nt(Expr*,int);.#
285d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
285e0 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53  BLE_CURSOR_HINTS
285f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28600 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79  ContainsSubquery
28610 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  (Expr*);.#endif.
28620 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
28630 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
28640 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
28650 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
28660 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
28670 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
28680 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
28690 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
286a0 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
286b0 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
286c0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
286d0 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
286e0 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65  elete(.    Parse
286f0 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
28700 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
28710 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b  6,u8,u8,u8,int);
28720 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
28730 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
28740 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
28750 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
28760 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
28770 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
28780 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
28790 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
287a0 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
287b0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
287c0 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
287d0 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e  xLabel(Parse*,in
287e0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
287f0 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
28800 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
28810 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
28820 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
28830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28850 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
28860 2c 69 6e 74 2a 29 3b 0a 23 69 66 64 65 66 20 53  ,int*);.#ifdef S
28870 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c  QLITE_ENABLE_NUL
28880 4c 5f 54 52 49 4d 0a 20 20 76 6f 69 64 20 73 71  L_TRIM.  void sq
28890 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f  lite3SetMakeReco
288a0 72 64 50 35 28 56 64 62 65 2a 2c 54 61 62 6c 65  rdP5(Vdbe*,Table
288b0 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
288c0 6e 65 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b  ne sqlite3SetMak
288d0 65 52 65 63 6f 72 64 50 35 28 41 2c 42 29 0a 23  eRecordP5(A,B).#
288e0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
288f0 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74  e3CompleteInsert
28900 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  ion(Parse*,Table
28910 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e  *,int,int,int,in
28920 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b  t*,int,int,int);
28930 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e  .int sqlite3Open
28940 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
28950 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
28960 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38  int, u8, int, u8
28970 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  *, int*, int*);.
28980 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69  void sqlite3Begi
28990 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
289a0 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
289b0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
289c0 75 6c 74 69 57 72 69 74 65 28 50 61 72 73 65 2a  ultiWrite(Parse*
289d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
289e0 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a 29 3b  ayAbort(Parse*);
289f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48 61 6c  .void sqlite3Hal
28a00 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73  tConstraint(Pars
28a10 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68  e*, int, int, ch
28a20 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f  ar*, i8, u8);.vo
28a30 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71 75 65  id sqlite3Unique
28a40 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65  Constraint(Parse
28a50 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b  *, int, Index*);
28a60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77  .void sqlite3Row
28a70 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  idConstraint(Par
28a80 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a  se*, int, Table*
28a90 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
28aa0 45 78 70 72 44 75 70 28 73 71 6c 69 74 65 33 2a  ExprDup(sqlite3*
28ab0 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70  ,Expr*,int);.Exp
28ac0 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 45 78  rList *sqlite3Ex
28ad0 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65  prListDup(sqlite
28ae0 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  3*,ExprList*,int
28af0 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c 69  );.SrcList *sqli
28b00 74 65 33 53 72 63 4c 69 73 74 44 75 70 28 73 71  te3SrcListDup(sq
28b10 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c  lite3*,SrcList*,
28b20 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71  int);.IdList *sq
28b30 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70 28 73  lite3IdListDup(s
28b40 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29  qlite3*,IdList*)
28b50 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74 65  ;.Select *sqlite
28b60 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c 69 74  3SelectDup(sqlit
28b70 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29  e3*,Select*,int)
28b80 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52 41 43  ;.#if SELECTTRAC
28b90 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73  E_ENABLED.void s
28ba0 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e  qlite3SelectSetN
28bb0 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73  ame(Select*,cons
28bc0 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
28bd0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28be0 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 41 2c  SelectSetName(A,
28bf0 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  B).#endif.void s
28c00 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75 69 6c  qlite3InsertBuil
28c10 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44 65 66  tinFuncs(FuncDef
28c20 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20  *,int);.FuncDef 
28c30 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75 6e 63  *sqlite3FindFunc
28c40 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f  tion(sqlite3*,co
28c50 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38  nst char*,int,u8
28c60 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ,u8);.void sqlit
28c70 65 33 52 65 67 69 73 74 65 72 42 75 69 6c 74 69  e3RegisterBuilti
28c80 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29  nFunctions(void)
28c90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
28ca0 67 69 73 74 65 72 44 61 74 65 54 69 6d 65 46 75  gisterDateTimeFu
28cb0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
28cc0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
28cd0 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e  terPerConnection
28ce0 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
28cf0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20  (sqlite3*);.int 
28d00 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68 65  sqlite3SafetyChe
28d10 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a  ckOk(sqlite3*);.
28d20 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65 74  int sqlite3Safet
28d30 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73  yCheckSickOrOk(s
28d40 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73  qlite3*);.void s
28d50 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b  qlite3ChangeCook
28d60 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ie(Parse*, int);
28d70 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
28d80 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
28d90 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
28da0 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
28db0 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61  ).void sqlite3Ma
28dc0 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28 50 61  terializeView(Pa
28dd0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78  rse*, Table*, Ex
28de0 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69  pr*, int);.#endi
28df0 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
28e00 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20  E_OMIT_TRIGGER. 
28e10 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67   void sqlite3Beg
28e20 69 6e 54 72 69 67 67 65 72 28 50 61 72 73 65 2a  inTrigger(Parse*
28e30 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  , Token*,Token*,
28e40 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c  int,int,IdList*,
28e50 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20  SrcList*,.      
28e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e70 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20       Expr*,int, 
28e80 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  int);.  void sql
28e90 69 74 65 33 46 69 6e 69 73 68 54 72 69 67 67 65  ite3FinishTrigge
28ea0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
28eb0 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  rStep*, Token*);
28ec0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44  .  void sqlite3D
28ed0 72 6f 70 54 72 69 67 67 65 72 28 50 61 72 73 65  ropTrigger(Parse
28ee0 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74  *, SrcList*, int
28ef0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28f00 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
28f10 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 2a  Parse*, Trigger*
28f20 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
28f30 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78 69  lite3TriggersExi
28f40 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c  st(Parse *, Tabl
28f50 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73  e*, int, ExprLis
28f60 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b  t*, int *pMask);
28f70 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69  .  Trigger *sqli
28f80 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 50  te3TriggerList(P
28f90 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29  arse *, Table *)
28fa0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
28fb0 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 50  CodeRowTrigger(P
28fc0 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 20 2a  arse*, Trigger *
28fd0 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
28fe0 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a  , int, Table *,.
28ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29000 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 2c              int,
29010 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
29020 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  id sqlite3CodeRo
29030 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 50  wTriggerDirect(P
29040 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65 72 20  arse *, Trigger 
29050 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c  *, Table *, int,
29060 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f   int, int);.  vo
29070 69 64 20 73 71 6c 69 74 65 56 69 65 77 54 72 69  id sqliteViewTri
29080 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20 54 61  ggers(Parse*, Ta
29090 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ble*, Expr*, int
290a0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20  , ExprList*);.  
290b0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
290c0 74 65 54 72 69 67 67 65 72 53 74 65 70 28 73 71  teTriggerStep(sq
290d0 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 53  lite3*, TriggerS
290e0 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  tep*);.  Trigger
290f0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
29100 67 67 65 72 53 65 6c 65 63 74 53 74 65 70 28 73  ggerSelectStep(s
29110 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29  qlite3*,Select*)
29120 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
29130 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 49  *sqlite3TriggerI
29140 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69 74 65  nsertStep(sqlite
29150 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73  3*,Token*, IdLis
29160 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  t*,.            
29170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29180 20 20 20 20 20 20 20 20 20 20 20 20 53 65 6c 65              Sele
29190 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69 67 67  ct*,u8);.  Trigg
291a0 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
291b0 72 69 67 67 65 72 55 70 64 61 74 65 53 74 65 70  riggerUpdateStep
291c0 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a  (sqlite3*,Token*
291d0 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72  ,ExprList*, Expr
291e0 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67 67 65  *, u8);.  Trigge
291f0 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72  rStep *sqlite3Tr
29200 69 67 67 65 72 44 65 6c 65 74 65 53 74 65 70 28  iggerDeleteStep(
29210 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c  sqlite3*,Token*,
29220 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20   Expr*);.  void 
29230 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69  sqlite3DeleteTri
29240 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 20 54  gger(sqlite3*, T
29250 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64  rigger*);.  void
29260 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
29270 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73  dDeleteTrigger(s
29280 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
29290 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33 32 20  t char*);.  u32 
292a0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f  sqlite3TriggerCo
292b0 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54 72 69  lmask(Parse*,Tri
292c0 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  gger*,ExprList*,
292d0 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69  int,int,Table*,i
292e0 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20 73 71  nt);.# define sq
292f0 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76  lite3ParseToplev
29300 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70  el(p) ((p)->pTop
29310 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f  level ? (p)->pTo
29320 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a 23 20  plevel : (p)).# 
29330 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
29340 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29  Toplevel(p) ((p)
29350 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a  ->pToplevel==0).
29360 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
29370 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45 78  qlite3TriggersEx
29380 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30  ist(B,C,D,E,F) 0
29390 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
293a0 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  3DeleteTrigger(A
293b0 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,B).# define sql
293c0 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50  ite3DropTriggerP
293d0 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65  tr(A,B).# define
293e0 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e   sqlite3UnlinkAn
293f0 64 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 41  dDeleteTrigger(A
29400 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65 20 73  ,B,C).# define s
29410 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69  qlite3CodeRowTri
29420 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  gger(A,B,C,D,E,F
29430 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69 6e 65  ,G,H,I).# define
29440 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
29450 72 69 67 67 65 72 44 69 72 65 63 74 28 41 2c 42  riggerDirect(A,B
29460 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65 66 69  ,C,D,E,F).# defi
29470 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
29480 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a 23 20  rList(X, Y) 0.# 
29490 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
294a0 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 70  rseToplevel(p) p
294b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
294c0 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 31  3IsToplevel(p) 1
294d0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
294e0 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28  3TriggerColmask(
294f0 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30  A,B,C,D,E,F,G) 0
29500 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
29510 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50 61 72  ite3JoinType(Par
29520 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
29530 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
29540 69 64 20 73 71 6c 69 74 65 33 43 72 65 61 74 65  id sqlite3Create
29550 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73 65  ForeignKey(Parse
29560 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f  *, ExprList*, To
29570 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  ken*, ExprList*,
29580 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
29590 74 65 33 44 65 66 65 72 46 6f 72 65 69 67 6e 4b  te3DeferForeignK
295a0 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b  ey(Parse*, int);
295b0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
295c0 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
295d0 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ON.  void sqlite
295e0 33 41 75 74 68 52 65 61 64 28 50 61 72 73 65 2a  3AuthRead(Parse*
295f0 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53  ,Expr*,Schema*,S
29600 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20  rcList*);.  int 
29610 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
29620 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e  (Parse*,int, con
29630 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
29640 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
29650 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  r*);.  void sqli
29660 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75  te3AuthContextPu
29670 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74 68 43  sh(Parse*, AuthC
29680 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63  ontext*, const c
29690 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
296a0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
296b0 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78 74 2a  Pop(AuthContext*
296c0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
296d0 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61 72 73  AuthReadCol(Pars
296e0 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  e*, const char *
296f0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
29700 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  int);.#else.# de
29710 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
29720 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20  Read(a,b,c,d).# 
29730 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
29740 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  thCheck(a,b,c,d,
29750 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a  e)    SQLITE_OK.
29760 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
29770 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
29780 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e 65 20  a,b,c).# define 
29790 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
297a0 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f 69 64  xtPop(a)  ((void
297b0 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69  )(a)).#endif.voi
297c0 64 20 73 71 6c 69 74 65 33 41 74 74 61 63 68 28  d sqlite3Attach(
297d0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45  Parse*, Expr*, E
297e0 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  xpr*, Expr*);.vo
297f0 69 64 20 73 71 6c 69 74 65 33 44 65 74 61 63 68  id sqlite3Detach
29800 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b  (Parse*, Expr*);
29810 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 78  .void sqlite3Fix
29820 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c 20 50  Init(DbFixer*, P
29830 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  arse*, int, cons
29840 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54  t char*, const T
29850 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
29860 74 65 33 46 69 78 53 72 63 4c 69 73 74 28 44 62  te3FixSrcList(Db
29870 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a  Fixer*, SrcList*
29880 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
29890 78 53 65 6c 65 63 74 28 44 62 46 69 78 65 72 2a  xSelect(DbFixer*
298a0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
298b0 73 71 6c 69 74 65 33 46 69 78 45 78 70 72 28 44  sqlite3FixExpr(D
298c0 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b  bFixer*, Expr*);
298d0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
298e0 78 70 72 4c 69 73 74 28 44 62 46 69 78 65 72 2a  xprList(DbFixer*
298f0 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  , ExprList*);.in
29900 74 20 73 71 6c 69 74 65 33 46 69 78 54 72 69 67  t sqlite3FixTrig
29910 67 65 72 53 74 65 70 28 44 62 46 69 78 65 72 2a  gerStep(DbFixer*
29920 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b  , TriggerStep*);
29930 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 46  .int sqlite3AtoF
29940 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
29950 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38  double*, int, u8
29960 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
29970 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63 68 61  tInt32(const cha
29980 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  r *, int*);.int 
29990 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f 6e 73  sqlite3Atoi(cons
299a0 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71  t char*);.int sq
299b0 6c 69 74 65 33 55 74 66 31 36 42 79 74 65 4c 65  lite3Utf16ByteLe
299c0 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a 70 44  n(const void *pD
299d0 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72 29 3b  ata, int nChar);
299e0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38  .int sqlite3Utf8
299f0 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68  CharLen(const ch
29a00 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e  ar *pData, int n
29a10 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74  Byte);.u32 sqlit
29a20 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74  e3Utf8Read(const
29a30 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73   u8**);.LogEst s
29a40 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34  qlite3LogEst(u64
29a50 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65  );.LogEst sqlite
29a60 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73  3LogEstAdd(LogEs
29a70 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64  t,LogEst);.#ifnd
29a80 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
29a90 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45  IRTUALTABLE.LogE
29aa0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
29ab0 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c  FromDouble(doubl
29ac0 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64  e);.#endif.#if d
29ad0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
29ae0 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54  ABLE_STMT_SCANST
29af0 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64  ATUS) || \.    d
29b00 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e  efined(SQLITE_EN
29b10 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
29b20 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65  AT4) || \.    de
29b30 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50  fined(SQLITE_EXP
29b40 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52  LAIN_ESTIMATED_R
29b50 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33  OWS).u64 sqlite3
29b60 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45  LogEstToInt(LogE
29b70 73 74 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73  st);.#endif.VLis
29b80 74 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41  t *sqlite3VListA
29b90 64 64 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73  dd(sqlite3*,VLis
29ba0 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  t*,const char*,i
29bb0 6e 74 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63  nt,int);.const c
29bc0 68 61 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73  har *sqlite3VLis
29bd0 74 4e 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74  tNumToName(VList
29be0 2a 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  *,int);.int sqli
29bf0 74 65 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75  te3VListNameToNu
29c00 6d 28 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63  m(VList*,const c
29c10 68 61 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a  har*,int);../*.*
29c20 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65  * Routines to re
29c30 61 64 20 61 6e 64 20 77 72 69 74 65 20 76 61 72  ad and write var
29c40 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74  iable-length int
29c50 65 67 65 72 73 2e 20 20 54 68 65 73 65 20 75 73  egers.  These us
29c60 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69  ed to.** be defi
29c70 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74  ned locally, but
29c80 20 6e 6f 77 20 77 65 20 75 73 65 20 74 68 65 20   now we use the 
29c90 76 61 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20  varint routines 
29ca0 69 6e 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a  in the util.c.**
29cb0 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71   file..*/.int sq
29cc0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 75  lite3PutVarint(u
29cd0 6e 73 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75  nsigned char*, u
29ce0 36 34 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47  64);.u8 sqlite3G
29cf0 65 74 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75  etVarint(const u
29d00 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
29d10 75 36 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74  u64 *);.u8 sqlit
29d20 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f  e3GetVarint32(co
29d30 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
29d40 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74  r *, u32 *);.int
29d50 20 73 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65   sqlite3VarintLe
29d60 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a  n(u64 v);../*.**
29d70 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65   The common case
29d80 20 69 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74   is for a varint
29d90 20 74 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20   to be a single 
29da0 62 79 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c  byte.  They foll
29db0 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20  owing.** macros 
29dc0 68 61 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f  handle the commo
29dd0 6e 20 63 61 73 65 20 77 69 74 68 6f 75 74 20 61  n case without a
29de0 20 70 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c   procedure call,
29df0 20 62 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a   but then call.*
29e00 2a 20 74 68 65 20 70 72 6f 63 65 64 75 72 65 20  * the procedure 
29e10 66 6f 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e  for larger varin
29e20 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67  ts..*/.#define g
29e30 65 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20  etVarint32(A,B) 
29e40 20 5c 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c   \.  (u8)((*(A)<
29e50 28 75 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28  (u8)0x80)?((B)=(
29e60 75 33 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69  u32)*(A)),1:sqli
29e70 74 65 33 47 65 74 56 61 72 69 6e 74 33 32 28 28  te3GetVarint32((
29e80 41 29 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29  A),(u32 *)&(B)))
29e90 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61 72 69  .#define putVari
29ea0 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28  nt32(A,B)  \.  (
29eb0 75 38 29 28 28 28 75 33 32 29 28 42 29 3c 28 75  u8)(((u32)(B)<(u
29ec0 33 32 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28  32)0x80)?(*(A)=(
29ed0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 42  unsigned char)(B
29ee0 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33  )),1:\.  sqlite3
29ef0 50 75 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42  PutVarint((A),(B
29f00 29 29 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56  ))).#define getV
29f10 61 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33  arint    sqlite3
29f20 47 65 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e  GetVarint.#defin
29f30 65 20 70 75 74 56 61 72 69 6e 74 20 20 20 20 73  e putVarint    s
29f40 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a  qlite3PutVarint.
29f50 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ..const char *sq
29f60 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
29f70 74 79 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20  tyStr(sqlite3*, 
29f80 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71  Index*);.void sq
29f90 6c 69 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69  lite3TableAffini
29fa0 74 79 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a  ty(Vdbe*, Table*
29fb0 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c  , int);.char sql
29fc0 69 74 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e  ite3CompareAffin
29fd0 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c  ity(Expr *pExpr,
29fe0 20 63 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74   char aff2);.int
29ff0 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
2a000 69 6e 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45  inityOk(Expr *pE
2a010 78 70 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66  xpr, char idx_af
2a020 66 69 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71  finity);.char sq
2a030 6c 69 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e  lite3TableColumn
2a040 41 66 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c  Affinity(Table*,
2a050 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  int);.char sqlit
2a060 65 33 45 78 70 72 41 66 66 69 6e 69 74 79 28 45  e3ExprAffinity(E
2a070 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2a080 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63   sqlite3Atoi64(c
2a090 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a  onst char*, i64*
2a0a0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
2a0b0 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
2a0c0 6f 49 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oI64(const char*
2a0d0 2c 20 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71  , i64*);.void sq
2a0e0 6c 69 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73  lite3ErrorWithMs
2a0f0 67 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c  g(sqlite3*, int,
2a100 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e   const char*,...
2a110 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2a120 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
2a130 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2a140 53 79 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69  SystemError(sqli
2a150 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  te3*,int);.void 
2a160 2a 73 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f  *sqlite3HexToBlo
2a170 62 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  b(sqlite3*, cons
2a180 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e  t char *z, int n
2a190 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78  );.u8 sqlite3Hex
2a1a0 54 6f 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e  ToInt(int h);.in
2a1b0 74 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74  t sqlite3TwoPart
2a1c0 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f  Name(Parse *, To
2a1d0 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  ken *, Token *, 
2a1e0 54 6f 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20  Token **);..#if 
2a1f0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e  defined(SQLITE_N
2a200 45 45 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f  EED_ERR_NAME).co
2a210 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
2a220 33 45 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23  3ErrName(int);.#
2a230 65 6e 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61  endif..const cha
2a240 72 20 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72  r *sqlite3ErrStr
2a250 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
2a260 65 33 52 65 61 64 53 63 68 65 6d 61 28 50 61 72  e3ReadSchema(Par
2a270 73 65 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c  se *pParse);.Col
2a280 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e  lSeq *sqlite3Fin
2a290 64 43 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33  dCollSeq(sqlite3
2a2a0 2a 2c 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20  *,u8 enc, const 
2a2b0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c  char*,int);.Coll
2a2c0 53 65 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61  Seq *sqlite3Loca
2a2d0 74 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  teCollSeq(Parse 
2a2e0 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
2a2f0 68 61 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c  har*zName);.Coll
2a300 53 65 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72  Seq *sqlite3Expr
2a310 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2a320 50 61 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78  Parse, Expr *pEx
2a330 70 72 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  pr);.Expr *sqlit
2a340 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2a350 54 6f 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61  Token(Parse *pPa
2a360 72 73 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73  rse, Expr*, cons
2a370 74 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  t Token*, int);.
2a380 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2a390 72 41 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e  rAddCollateStrin
2a3a0 67 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63  g(Parse*,Expr*,c
2a3b0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70  onst char*);.Exp
2a3c0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b  r *sqlite3ExprSk
2a3d0 69 70 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29  ipCollate(Expr*)
2a3e0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65  ;.int sqlite3Che
2a3f0 63 6b 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20  ckCollSeq(Parse 
2a400 2a 2c 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69  *, CollSeq *);.i
2a410 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f  nt sqlite3CheckO
2a420 62 6a 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20  bjectName(Parse 
2a430 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  *, const char *)
2a440 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64  ;.void sqlite3Vd
2a450 62 65 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c  beSetChanges(sql
2a460 69 74 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e  ite3 *, int);.in
2a470 74 20 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36  t sqlite3AddInt6
2a480 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74  4(i64*,i64);.int
2a490 20 73 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34   sqlite3SubInt64
2a4a0 28 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20  (i64*,i64);.int 
2a4b0 73 71 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28  sqlite3MulInt64(
2a4c0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2a4d0 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32 28 69  qlite3AbsInt32(i
2a4e0 6e 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  nt);.#ifdef SQLI
2a4f0 54 45 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41  TE_ENABLE_8_3_NA
2a500 4d 45 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  MES.void sqlite3
2a510 46 69 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73  FileSuffix3(cons
2a520 74 20 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b  t char*, char*);
2a530 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2a540 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69  sqlite3FileSuffi
2a550 78 33 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75  x3(X,Y).#endif.u
2a560 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
2a570 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
2a580 7a 2c 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f  z,u8);..const vo
2a590 69 64 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65  id *sqlite3Value
2a5a0 54 65 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c  Text(sqlite3_val
2a5b0 75 65 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  ue*, u8);.int sq
2a5c0 6c 69 74 65 33 56 61 6c 75 65 42 79 74 65 73 28  lite3ValueBytes(
2a5d0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20  sqlite3_value*, 
2a5e0 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  u8);.void sqlite
2a5f0 33 56 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c  3ValueSetStr(sql
2a600 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74  ite3_value*, int
2a610 2c 20 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75  , const void *,u
2a620 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
2a630 20 20 20 20 20 20 20 20 20 20 20 76 6f 69 64 28             void(
2a640 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64  *)(void*));.void
2a650 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74   sqlite3ValueSet
2a660 4e 75 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c  Null(sqlite3_val
2a670 75 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ue*);.void sqlit
2a680 65 33 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69  e3ValueFree(sqli
2a690 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c  te3_value*);.sql
2a6a0 69 74 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69  ite3_value *sqli
2a6b0 74 65 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69  te3ValueNew(sqli
2a6c0 74 65 33 20 2a 29 3b 0a 63 68 61 72 20 2a 73 71  te3 *);.char *sq
2a6d0 6c 69 74 65 33 55 74 66 31 36 74 6f 38 28 73 71  lite3Utf16to8(sq
2a6e0 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 76  lite3 *, const v
2a6f0 6f 69 64 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  oid*, int, u8);.
2a700 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
2a710 46 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33  FromExpr(sqlite3
2a720 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20   *, Expr *, u8, 
2a730 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  u8, sqlite3_valu
2a740 65 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  e **);.void sqli
2a750 74 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66  te3ValueApplyAff
2a760 69 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61  inity(sqlite3_va
2a770 6c 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a  lue *, u8, u8);.
2a780 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41  #ifndef SQLITE_A
2a790 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65  MALGAMATION.exte
2a7a0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
2a7b0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70  d char sqlite3Op
2a7c0 63 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a  codeProperty[];.
2a7d0 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61  extern const cha
2a7e0 72 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41  r sqlite3StrBINA
2a7f0 52 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  RY[];.extern con
2a800 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
2a810 20 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c   sqlite3UpperToL
2a820 6f 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63  ower[];.extern c
2a830 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68  onst unsigned ch
2a840 61 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d  ar sqlite3CtypeM
2a850 61 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ap[];.extern con
2a860 73 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33  st Token sqlite3
2a870 49 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74  IntTokens[];.ext
2a880 65 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73  ern SQLITE_WSD s
2a890 74 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e  truct Sqlite3Con
2a8a0 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
2a8b0 67 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65  g;.extern FuncDe
2a8c0 66 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69  fHash sqlite3Bui
2a8d0 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23  ltinFunctions;.#
2a8e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2a8f0 49 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e  IT_WSD.extern in
2a900 74 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67  t sqlite3Pending
2a910 42 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e  Byte;.#endif.#en
2a920 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2a930 52 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71  RootPageMoved(sq
2a940 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74  lite3*, int, int
2a950 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2a960 69 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73  ite3Reindex(Pars
2a970 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
2a980 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
2a990 33 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28  3AlterFunctions(
2a9a0 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
2a9b0 74 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61  te3AlterRenameTa
2a9c0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
2a9d0 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ist*, Token*);.i
2a9e0 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b  nt sqlite3GetTok
2a9f0 65 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  en(const unsigne
2aa00 64 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29  d char *, int *)
2aa10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65  ;.void sqlite3Ne
2aa20 73 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a  stedParse(Parse*
2aa30 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
2aa40 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
2aa50 33 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53  3ExpirePreparedS
2aa60 74 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65  tatements(sqlite
2aa70 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
2aa80 43 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61  CodeSubselect(Pa
2aa90 72 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e  rse*, Expr *, in
2aaa0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
2aab0 6c 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28  lite3SelectPrep(
2aac0 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c  Parse*, Select*,
2aad0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a   NameContext*);.
2aae0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
2aaf0 63 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45  ctWrongNumTermsE
2ab00 72 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72  rror(Parse *pPar
2ab10 73 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a  se, Select *p);.
2ab20 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68  int sqlite3Match
2ab30 53 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63  SpanName(const c
2ab40 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
2ab50 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
2ab60 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
2ab70 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2ab80 45 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f  ExprNames(NameCo
2ab90 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a  ntext*, Expr*);.
2aba0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  int sqlite3Resol
2abb0 76 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28  veExprListNames(
2abc0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
2abd0 70 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73  prList*);.void s
2abe0 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c  qlite3ResolveSel
2abf0 65 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c  ectNames(Parse*,
2ac00 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2ac10 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
2ac20 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66  lite3ResolveSelf
2ac30 52 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a  Reference(Parse*
2ac40 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72  ,Table*,int,Expr
2ac50 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e  *,ExprList*);.in
2ac60 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65  t sqlite3Resolve
2ac70 4f 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72  OrderGroupBy(Par
2ac80 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  se*, Select*, Ex
2ac90 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
2aca0 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2acb0 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74  te3ColumnDefault
2acc0 28 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a  (Vdbe *, Table *
2acd0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2ace0 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69  d sqlite3AlterFi
2acf0 6e 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61  nishAddColumn(Pa
2ad00 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b  rse *, Token *);
2ad10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74  .void sqlite3Alt
2ad20 65 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e  erBeginAddColumn
2ad30 28 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73  (Parse *, SrcLis
2ad40 74 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  t *);.CollSeq *s
2ad50 71 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71  qlite3GetCollSeq
2ad60 28 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c  (Parse*, u8, Col
2ad70 6c 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68  lSeq *, const ch
2ad80 61 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  ar*);.char sqlit
2ad90 65 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63  e3AffinityType(c
2ada0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29  onst char*, u8*)
2adb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e  ;.void sqlite3An
2adc0 61 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f  alyze(Parse*, To
2add0 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  ken*, Token*);.i
2ade0 6e 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65  nt sqlite3Invoke
2adf0 42 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79  BusyHandler(Busy
2ae00 48 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73  Handler*);.int s
2ae10 71 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c  qlite3FindDb(sql
2ae20 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  ite3*, Token*);.
2ae30 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2ae40 62 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c  bName(sqlite3 *,
2ae50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2ae60 69 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79  int sqlite3Analy
2ae70 73 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a  sisLoad(sqlite3*
2ae80 2c 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20  ,int iDB);.void 
2ae90 73 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64  sqlite3DeleteInd
2aea0 65 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65  exSamples(sqlite
2aeb0 33 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  3*,Index*);.void
2aec0 20 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52   sqlite3DefaultR
2aed0 6f 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76  owEst(Index*);.v
2aee0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
2aef0 74 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73  terLikeFunctions
2af00 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b  (sqlite3*, int);
2af10 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69  .int sqlite3IsLi
2af20 6b 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  keFunction(sqlit
2af30 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63  e3*,Expr*,int*,c
2af40 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  har*);.void sqli
2af50 74 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76  te3SchemaClear(v
2af60 6f 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a  oid *);.Schema *
2af70 73 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74  sqlite3SchemaGet
2af80 28 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65  (sqlite3 *, Btre
2af90 65 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  e *);.int sqlite
2afa0 33 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73  3SchemaToIndex(s
2afb0 71 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65  qlite3 *db, Sche
2afc0 6d 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  ma *);.KeyInfo *
2afd0 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c  sqlite3KeyInfoAl
2afe0 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
2aff0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
2b000 74 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28  te3KeyInfoUnref(
2b010 4b 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e  KeyInfo*);.KeyIn
2b020 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e  fo *sqlite3KeyIn
2b030 66 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  foRef(KeyInfo*);
2b040 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2b050 33 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28  3KeyInfoOfIndex(
2b060 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b  Parse*, Index*);
2b070 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
2b080 45 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33  EBUG.int sqlite3
2b090 4b 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62  KeyInfoIsWriteab
2b0a0 6c 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65  le(KeyInfo*);.#e
2b0b0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
2b0c0 43 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74  CreateFunc(sqlit
2b0d0 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2b0e0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f   *, int, int, vo
2b0f0 69 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29  id *,.  void (*)
2b100 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2b110 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2b120 6c 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20  lue **),.  void 
2b130 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2b140 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2b150 5f 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64  _value **), void
2b160 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e   (*)(sqlite3_con
2b170 74 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65  text*),.  FuncDe
2b180 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72  structor *pDestr
2b190 75 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71  uctor.);.void sq
2b1a0 6c 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71  lite3OomFault(sq
2b1b0 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71  lite3*);.void sq
2b1c0 6c 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71  lite3OomClear(sq
2b1d0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
2b1e0 69 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69  ite3ApiExit(sqli
2b1f0 74 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69  te3 *db, int);.i
2b200 6e 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65  nt sqlite3OpenTe
2b210 6d 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65  mpDatabase(Parse
2b220 20 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74   *);..void sqlit
2b230 65 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53  e3StrAccumInit(S
2b240 74 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65  trAccum*, sqlite
2b250 33 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20  3*, char*, int, 
2b260 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b270 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
2b280 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
2b290 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69   char*,int);.voi
2b2a0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2b2b0 6d 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63  mAppendAll(StrAc
2b2c0 63 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  cum*,const char*
2b2d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
2b2e0 70 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63  ppendChar(StrAcc
2b2f0 75 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63  um*,int,char);.c
2b300 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41  har *sqlite3StrA
2b310 63 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63  ccumFinish(StrAc
2b320 63 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  cum*);.void sqli
2b330 74 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74  te3StrAccumReset
2b340 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2b350 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44  d sqlite3SelectD
2b360 65 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65  estInit(SelectDe
2b370 73 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78  st*,int,int);.Ex
2b380 70 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74  pr *sqlite3Creat
2b390 65 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69  eColumnExpr(sqli
2b3a0 74 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a  te3 *, SrcList *
2b3b0 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f  , int, int);..vo
2b3c0 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70  id sqlite3Backup
2b3d0 52 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f  Restart(sqlite3_
2b3e0 62 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20  backup *);.void 
2b3f0 73 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64  sqlite3BackupUpd
2b400 61 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b  ate(sqlite3_back
2b410 75 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73  up *, Pgno, cons
2b420 74 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65  t u8 *);..#ifnde
2b430 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55  f SQLITE_OMIT_SU
2b440 42 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74  BQUERY.int sqlit
2b450 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61  e3ExprCheckIN(Pa
2b460 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65  rse*, Expr*);.#e
2b470 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
2b480 69 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28  ite3ExprCheckIN(
2b490 78 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23  x,y) SQLITE_OK.#
2b4a0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2b4b0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
2b4c0 33 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20  3_OR_STAT4.void 
2b4d0 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75  sqlite3AnalyzeFu
2b4e0 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69  nctions(void);.i
2b4f0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  nt sqlite3Stat4P
2b500 72 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20  robeSetValue(.  
2b510 20 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c    Parse*,Index*,
2b520 55 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a  UnpackedRecord**
2b530 2c 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  ,Expr*,int,int,i
2b540 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  nt*);.int sqlite
2b550 33 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45  3Stat4ValueFromE
2b560 78 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72  xpr(Parse*, Expr
2b570 2a 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76  *, u8, sqlite3_v
2b580 61 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71  alue**);.void sq
2b590 6c 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46  lite3Stat4ProbeF
2b5a0 72 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f  ree(UnpackedReco
2b5b0 72 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  rd*);.int sqlite
2b5c0 33 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c  3Stat4Column(sql
2b5d0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69  ite3*, const voi
2b5e0 64 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71  d*, int, int, sq
2b5f0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a  lite3_value**);.
2b600 63 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65  char sqlite3Inde
2b610 78 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28  xColumnAffinity(
2b620 73 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a  sqlite3*, Index*
2b630 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
2b640 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66  /*.** The interf
2b650 61 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e  ace to the LEMON
2b660 2d 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65  -generated parse
2b670 72 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  r.*/.#ifndef SQL
2b680 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2b690 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
2b6a0 50 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64  ParserAlloc(void
2b6b0 2a 28 2a 29 28 75 36 34 29 29 3b 0a 20 20 76 6f  *(*)(u64));.  vo
2b6c0 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72  id sqlite3Parser
2b6d0 46 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64  Free(void*, void
2b6e0 28 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e  (*)(void*));.#en
2b6f0 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
2b700 50 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e  Parser(void*, in
2b710 74 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a  t, Token, Parse*
2b720 29 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43  );.#ifdef YYTRAC
2b730 4b 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20  KMAXSTACKDEPTH. 
2b740 20 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73   int sqlite3Pars
2b750 65 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64  erStackPeak(void
2b760 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64  *);.#endif..void
2b770 20 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64   sqlite3AutoLoad
2b780 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74  Extensions(sqlit
2b790 65 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  e3*);.#ifndef SQ
2b7a0 4c 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45  LITE_OMIT_LOAD_E
2b7b0 58 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20  XTENSION.  void 
2b7c0 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2b7d0 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29  nsions(sqlite3*)
2b7e0 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ;.#else.# define
2b7f0 20 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74   sqlite3CloseExt
2b800 65 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69  ensions(X).#endi
2b810 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
2b820 45 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41  E_OMIT_SHARED_CA
2b830 43 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CHE.  void sqlit
2b840 65 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73  e3TableLock(Pars
2b850 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  e *, int, int, u
2b860 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  8, const char *)
2b870 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2b880 65 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f  e sqlite3TableLo
2b890 63 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65  ck(v,w,x,y,z).#e
2b8a0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2b8b0 49 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73  ITE_TEST.  int s
2b8c0 71 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e  qlite3Utf8To8(un
2b8d0 73 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23  signed char*);.#
2b8e0 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
2b8f0 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
2b900 4c 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65  LTABLE.#  define
2b910 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61   sqlite3VtabClea
2b920 72 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73  r(Y).#  define s
2b930 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58  qlite3VtabSync(X
2b940 2c 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20  ,Y) SQLITE_OK.# 
2b950 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2b960 74 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23  tabRollback(X).#
2b970 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2b980 56 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20  VtabCommit(X).# 
2b990 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2b9a0 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a  tabInSync(db) 0.
2b9b0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2b9c0 33 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20  3VtabLock(X).#  
2b9d0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2b9e0 61 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64  abUnlock(X).#  d
2b9f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2ba00 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23  bUnlockList(X).#
2ba10 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2ba20 56 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c  VtabSavepoint(X,
2ba30 20 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b   Y, Z) SQLITE_OK
2ba40 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2ba50 65 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29  e3GetVTable(X,Y)
2ba60 20 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23    ((VTable*)0).#
2ba70 65 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c  else.   void sql
2ba80 69 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71  ite3VtabClear(sq
2ba90 6c 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65  lite3 *db, Table
2baa0 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  *);.   void sqli
2bab0 74 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63  te3VtabDisconnec
2bac0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54  t(sqlite3 *db, T
2bad0 61 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74  able *p);.   int
2bae0 20 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63   sqlite3VtabSync
2baf0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64  (sqlite3 *db, Vd
2bb00 62 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  be*);.   int sql
2bb10 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2bb20 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2bb30 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2bb40 62 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20  bCommit(sqlite3 
2bb50 2a 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71  *db);.   void sq
2bb60 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54  lite3VtabLock(VT
2bb70 61 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64  able *);.   void
2bb80 20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f   sqlite3VtabUnlo
2bb90 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2bba0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2bbb0 62 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69  bUnlockList(sqli
2bbc0 74 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71  te3*);.   int sq
2bbd0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2bbe0 6e 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  nt(sqlite3 *, in
2bbf0 74 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64  t, int);.   void
2bc00 20 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f   sqlite3VtabImpo
2bc10 72 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20  rtErrmsg(Vdbe*, 
2bc20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a  sqlite3_vtab*);.
2bc30 20 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74     VTable *sqlit
2bc40 65 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69  e3GetVTable(sqli
2bc50 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  te3*, Table*);. 
2bc60 20 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65    Module *sqlite
2bc70 33 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c  3VtabCreateModul
2bc80 65 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a  e(.     sqlite3*
2bc90 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  ,.     const cha
2bca0 72 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73  r*,.     const s
2bcb0 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a  qlite3_module*,.
2bcc0 20 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20       void*,.    
2bcd0 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a   void(*)(void*).
2bce0 20 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20     );.#  define 
2bcf0 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e  sqlite3VtabInSyn
2bd00 63 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54  c(db) ((db)->nVT
2bd10 72 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e  rans>0 && (db)->
2bd20 61 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64  aVTrans==0).#end
2bd30 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  if.int sqlite3Vt
2bd40 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65  abEponymousTable
2bd50 49 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75  Init(Parse*,Modu
2bd60 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2bd70 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54  e3VtabEponymousT
2bd80 61 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65  ableClear(sqlite
2bd90 33 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69  3*,Module*);.voi
2bda0 64 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b  d sqlite3VtabMak
2bdb0 65 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a  eWritable(Parse*
2bdc0 2c 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73  ,Table*);.void s
2bdd0 71 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50  qlite3VtabBeginP
2bde0 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  arse(Parse*, Tok
2bdf0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  en*, Token*, Tok
2be00 65 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  en*, int);.void 
2be10 73 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73  sqlite3VtabFinis
2be20 68 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54  hParse(Parse*, T
2be30 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
2be40 69 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28  ite3VtabArgInit(
2be50 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
2be60 6c 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65  lite3VtabArgExte
2be70 6e 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  nd(Parse*, Token
2be80 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2be90 74 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71  tabCallCreate(sq
2bea0 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e  lite3*, int, con
2beb0 73 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20  st char *, char 
2bec0 2a 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  **);.int sqlite3
2bed0 56 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28  VtabCallConnect(
2bee0 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2bef0 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62  .int sqlite3Vtab
2bf00 43 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69  CallDestroy(sqli
2bf10 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  te3*, int, const
2bf20 20 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71   char *);.int sq
2bf30 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73  lite3VtabBegin(s
2bf40 71 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65  qlite3 *, VTable
2bf50 20 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71   *);.FuncDef *sq
2bf60 6c 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61  lite3VtabOverloa
2bf70 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
2bf80 33 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e  3 *,FuncDef*, in
2bf90 74 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a  t nArg, Expr*);.
2bfa0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61  void sqlite3Inva
2bfb0 6c 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69  lidFunction(sqli
2bfc0 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
2bfd0 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
2bfe0 29 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  );.sqlite3_int64
2bff0 20 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72   sqlite3StmtCurr
2c000 65 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f  entTime(sqlite3_
2c010 63 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73  context*);.int s
2c020 71 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65  qlite3VdbeParame
2c030 74 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20  terIndex(Vdbe*, 
2c040 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74  const char*, int
2c050 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72  );.int sqlite3Tr
2c060 61 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73  ansferBindings(s
2c070 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73  qlite3_stmt *, s
2c080 71 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a  qlite3_stmt *);.
2c090 76 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73  void sqlite3Pars
2c0a0 65 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b  erReset(Parse*);
2c0b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72  .int sqlite3Repr
2c0c0 65 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f  epare(Vdbe*);.vo
2c0d0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69  id sqlite3ExprLi
2c0e0 73 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61  stCheckLength(Pa
2c0f0 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c  rse*, ExprList*,
2c100 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43   const char*);.C
2c110 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42  ollSeq *sqlite3B
2c120 69 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c  inaryCompareColl
2c130 53 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70  Seq(Parse *, Exp
2c140 72 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e  r *, Expr *);.in
2c150 74 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d  t sqlite3TempInM
2c160 65 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69  emory(const sqli
2c170 74 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61  te3*);.const cha
2c180 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
2c190 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a  lModename(int);.
2c1a0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2c1b0 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71  MIT_WAL.  int sq
2c1c0 6c 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28  lite3Checkpoint(
2c1d0 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69  sqlite3*, int, i
2c1e0 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  nt, int*, int*);
2c1f0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61  .  int sqlite3Wa
2c200 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69  lDefaultHook(voi
2c210 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  d*,sqlite3*,cons
2c220 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65  t char*,int);.#e
2c230 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2c240 49 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57  ITE_OMIT_CTE.  W
2c250 69 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68  ith *sqlite3With
2c260 41 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a  Add(Parse*,With*
2c270 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74  ,Token*,ExprList
2c280 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f  *,Select*);.  vo
2c290 69 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  id sqlite3WithDe
2c2a0 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69  lete(sqlite3*,Wi
2c2b0 74 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  th*);.  void sql
2c2c0 69 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72  ite3WithPush(Par
2c2d0 73 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b  se*, With*, u8);
2c2e0 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73  .#else.#define s
2c2f0 71 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78  qlite3WithPush(x
2c300 2c 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71  ,y,z).#define sq
2c310 6c 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28  lite3WithDelete(
2c320 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20  x,y).#endif../* 
2c330 44 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72  Declarations for
2c340 20 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b   functions in fk
2c350 65 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65  ey.c. All of the
2c360 73 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20  se are replaced 
2c370 62 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72  by.** no-op macr
2c380 6f 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49  os if OMIT_FOREI
2c390 47 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65  GN_KEY is define
2c3a0 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20  d. In this case 
2c3b0 6e 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  no foreign.** ke
2c3c0 79 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20  y functionality 
2c3d0 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66  is available. If
2c3e0 20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73   OMIT_TRIGGER is
2c3f0 20 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20   defined but.** 
2c400 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
2c410 20 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f   is not, only so
2c420 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69  me of the functi
2c430 6f 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e  ons are no-oped.
2c440 20 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65   In.** this case
2c450 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72   foreign keys ar
2c460 65 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f  e parsed, but no
2c470 20 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61   other functiona
2c480 6c 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69  lity is.** provi
2c490 64 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74  ded (enforcement
2c4a0 20 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e   of FK constrain
2c4b0 74 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20  ts requires the 
2c4c0 74 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73  triggers sub-sys
2c4d0 74 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65  tem)..*/.#if !de
2c4e0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2c4f0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26  T_FOREIGN_KEY) &
2c500 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
2c510 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a  E_OMIT_TRIGGER).
2c520 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b    void sqlite3Fk
2c530 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61  Check(Parse*, Ta
2c540 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  ble*, int, int, 
2c550 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  int*, int);.  vo
2c560 69 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70  id sqlite3FkDrop
2c570 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72  Table(Parse*, Sr
2c580 63 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29  cList *, Table*)
2c590 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2c5a0 46 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a  FkActions(Parse*
2c5b0 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69  , Table*, ExprLi
2c5c0 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20  st*, int, int*, 
2c5d0 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
2c5e0 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61  te3FkRequired(Pa
2c5f0 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2c600 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20  t*, int);.  u32 
2c610 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b  sqlite3FkOldmask
2c620 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29  (Parse*, Table*)
2c630 3b 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65  ;.  FKey *sqlite
2c640 33 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61  3FkReferences(Ta
2c650 62 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  ble *);.#else.  
2c660 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2c670 6b 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64  kActions(a,b,c,d
2c680 2c 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20  ,e,f).  #define 
2c690 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61  sqlite3FkCheck(a
2c6a0 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64  ,b,c,d,e,f).  #d
2c6b0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44  efine sqlite3FkD
2c6c0 72 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a  ropTable(a,b,c).
2c6d0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2c6e0 33 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20  3FkOldmask(a,b) 
2c6f0 20 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66          0.  #def
2c700 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71  ine sqlite3FkReq
2c710 75 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20  uired(a,b,c,d)  
2c720 20 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71    0.  #define sq
2c730 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65  lite3FkReference
2c740 73 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65  s(a)        0.#e
2c750 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
2c760 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
2c770 5f 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69  _KEY.  void sqli
2c780 74 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69  te3FkDelete(sqli
2c790 74 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  te3 *, Table*);.
2c7a0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c    int sqlite3FkL
2c7b0 6f 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65  ocateIndex(Parse
2c7c0 2a 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49  *,Table*,FKey*,I
2c7d0 6e 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23  ndex**,int**);.#
2c7e0 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73  else.  #define s
2c7f0 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61  qlite3FkDelete(a
2c800 2c 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,b).  #define sq
2c810 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
2c820 65 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65  ex(a,b,c,d,e).#e
2c830 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61  ndif.../*.** Ava
2c840 69 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a  ilable fault inj
2c850 65 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20  ectors.  Should 
2c860 62 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69  be numbered begi
2c870 6e 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f  nning with 0..*/
2c880 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
2c890 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41  FAULTINJECTOR_MA
2c8a0 4c 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69  LLOC     0.#defi
2c8b0 6e 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49  ne SQLITE_FAULTI
2c8c0 4e 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20  NJECTOR_COUNT   
2c8d0 20 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20     1../*.** The 
2c8e0 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2c8f0 20 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63   code in fault.c
2c900 20 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69   used for identi
2c910 66 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a  fying "benign".*
2c920 2a 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65  * malloc failure
2c930 73 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20  s. This is only 
2c940 70 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54  present if SQLIT
2c950 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20  E_UNTESTABLE.** 
2c960 69 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a  is not defined..
2c970 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
2c980 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76  E_UNTESTABLE.  v
2c990 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e  oid sqlite3Begin
2c9a0 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69  BenignMalloc(voi
2c9b0 64 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  d);.  void sqlit
2c9c0 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f  e3EndBenignMallo
2c9d0 63 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20  c(void);.#else. 
2c9e0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2c9f0 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2ca00 63 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  c().  #define sq
2ca10 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61  lite3EndBenignMa
2ca20 6c 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f  lloc().#endif../
2ca30 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74  *.** Allowed ret
2ca40 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  urn values from 
2ca50 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64  sqlite3FindInInd
2ca60 65 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ex().*/.#define 
2ca70 49 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20  IN_INDEX_ROWID  
2ca80 20 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61        1   /* Sea
2ca90 72 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66  rch the rowid of
2caa0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64   the table */.#d
2cab0 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45  efine IN_INDEX_E
2cac0 50 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20  PH          2   
2cad0 2f 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68  /* Search an eph
2cae0 65 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f  emeral b-tree */
2caf0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2cb00 58 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33  X_INDEX_ASC    3
2cb10 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2cb20 6e 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a  ndex ASCENDING *
2cb30 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2cb40 45 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20  EX_INDEX_DESC   
2cb50 34 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20  4   /* Existing 
2cb60 69 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47  index DESCENDING
2cb70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49   */.#define IN_I
2cb80 4e 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20  NDEX_NOOP       
2cb90 20 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c    5   /* No tabl
2cba0 65 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65  e available. Use
2cbb0 20 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a   comparisons */.
2cbc0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c  /*.** Allowed fl
2cbd0 61 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20  ags for the 3rd 
2cbe0 70 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c  parameter to sql
2cbf0 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28  ite3FindInIndex(
2cc00 29 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  )..*/.#define IN
2cc10 5f 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20  _INDEX_NOOP_OK  
2cc20 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b     0x0001  /* OK
2cc30 20 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e   to return IN_IN
2cc40 44 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66  DEX_NOOP */.#def
2cc50 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d  ine IN_INDEX_MEM
2cc60 42 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20  BERSHIP  0x0002 
2cc70 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2cc80 75 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73  used for members
2cc90 68 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66  hip test */.#def
2cca0 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f  ine IN_INDEX_LOO
2ccb0 50 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20  P        0x0004 
2ccc0 20 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20   /* IN operator 
2ccd0 75 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a  used as a loop *
2cce0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e  /.int sqlite3Fin
2ccf0 64 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a  dInIndex(Parse *
2cd00 2c 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69  , Expr *, u32, i
2cd10 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74  nt*, int*);..int
2cd20 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f   sqlite3JournalO
2cd30 70 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20  pen(sqlite3_vfs 
2cd40 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c  *, const char *,
2cd50 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c   sqlite3_file *,
2cd60 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20   int, int);.int 
2cd70 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69  sqlite3JournalSi
2cd80 7a 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  ze(sqlite3_vfs *
2cd90 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2cda0 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d 49 43 5f 57  _ENABLE_ATOMIC_W
2cdb0 52 49 54 45 0a 20 20 69 6e 74 20 73 71 6c 69 74  RITE.  int sqlit
2cdc0 65 33 4a 6f 75 72 6e 61 6c 43 72 65 61 74 65 28  e3JournalCreate(
2cdd0 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b  sqlite3_file *);
2cde0 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c  .#endif..int sql
2cdf0 69 74 65 33 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d  ite3JournalIsInM
2ce00 65 6d 6f 72 79 28 73 71 6c 69 74 65 33 5f 66 69  emory(sqlite3_fi
2ce10 6c 65 20 2a 70 29 3b 0a 76 6f 69 64 20 73 71 6c  le *p);.void sql
2ce20 69 74 65 33 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70  ite3MemJournalOp
2ce30 65 6e 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20  en(sqlite3_file 
2ce40 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2ce50 33 45 78 70 72 53 65 74 48 65 69 67 68 74 41 6e  3ExprSetHeightAn
2ce60 64 46 6c 61 67 73 28 50 61 72 73 65 20 2a 70 50  dFlags(Parse *pP
2ce70 61 72 73 65 2c 20 45 78 70 72 20 2a 70 29 3b 0a  arse, Expr *p);.
2ce80 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 45  #if SQLITE_MAX_E
2ce90 58 50 52 5f 44 45 50 54 48 3e 30 0a 20 20 69 6e  XPR_DEPTH>0.  in
2cea0 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45  t sqlite3SelectE
2ceb0 78 70 72 48 65 69 67 68 74 28 53 65 6c 65 63 74  xprHeight(Select
2cec0 20 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74   *);.  int sqlit
2ced0 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67 68  e3ExprCheckHeigh
2cee0 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a  t(Parse*, int);.
2cef0 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2cf00 73 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70  sqlite3SelectExp
2cf10 72 48 65 69 67 68 74 28 78 29 20 30 0a 20 20 23  rHeight(x) 0.  #
2cf20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78  define sqlite3Ex
2cf30 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 78 2c  prCheckHeight(x,
2cf40 79 29 0a 23 65 6e 64 69 66 0a 0a 75 33 32 20 73  y).#endif..u32 s
2cf50 71 6c 69 74 65 33 47 65 74 34 62 79 74 65 28 63  qlite3Get4byte(c
2cf60 6f 6e 73 74 20 75 38 2a 29 3b 0a 76 6f 69 64 20  onst u8*);.void 
2cf70 73 71 6c 69 74 65 33 50 75 74 34 62 79 74 65 28  sqlite3Put4byte(
2cf80 75 38 2a 2c 20 75 33 32 29 3b 0a 0a 23 69 66 64  u8*, u32);..#ifd
2cf90 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2cfa0 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20  _UNLOCK_NOTIFY. 
2cfb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
2cfc0 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28 73  nectionBlocked(s
2cfd0 71 6c 69 74 65 33 20 2a 2c 20 73 71 6c 69 74 65  qlite3 *, sqlite
2cfe0 33 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  3 *);.  void sql
2cff0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e  ite3ConnectionUn
2d000 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20 2a  locked(sqlite3 *
2d010 64 62 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  db);.  void sqli
2d020 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f  te3ConnectionClo
2d030 73 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29  sed(sqlite3 *db)
2d040 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2d050 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  e sqlite3Connect
2d060 69 6f 6e 42 6c 6f 63 6b 65 64 28 78 2c 79 29 0a  ionBlocked(x,y).
2d070 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2d080 33 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63  3ConnectionUnloc
2d090 6b 65 64 28 78 29 0a 20 20 23 64 65 66 69 6e 65  ked(x).  #define
2d0a0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d0b0 6f 6e 43 6c 6f 73 65 64 28 78 29 0a 23 65 6e 64  onClosed(x).#end
2d0c0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
2d0d0 45 5f 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73  E_DEBUG.  void s
2d0e0 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
2d0f0 65 28 46 49 4c 45 2a 2c 20 63 68 61 72 20 2a 29  e(FILE*, char *)
2d100 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
2d110 49 66 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  If the SQLITE_EN
2d120 41 42 4c 45 20 49 4f 54 52 41 43 45 20 65 78 69  ABLE IOTRACE exi
2d130 73 74 73 20 74 68 65 6e 20 74 68 65 20 67 6c 6f  sts then the glo
2d140 62 61 6c 20 76 61 72 69 61 62 6c 65 0a 2a 2a 20  bal variable.** 
2d150 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 69  sqlite3IoTrace i
2d160 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 61  s a pointer to a
2d170 20 70 72 69 6e 74 66 2d 6c 69 6b 65 20 72 6f 75   printf-like rou
2d180 74 69 6e 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20  tine used to.** 
2d190 70 72 69 6e 74 20 49 2f 4f 20 74 72 61 63 69 6e  print I/O tracin
2d1a0 67 20 6d 65 73 73 61 67 65 73 2e 0a 2a 2f 0a 23  g messages..*/.#
2d1b0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2d1c0 42 4c 45 5f 49 4f 54 52 41 43 45 0a 23 20 64 65  BLE_IOTRACE.# de
2d1d0 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41 29 20  fine IOTRACE(A) 
2d1e0 20 69 66 28 20 73 71 6c 69 74 65 33 49 6f 54 72   if( sqlite3IoTr
2d1f0 61 63 65 20 29 7b 20 73 71 6c 69 74 65 33 49 6f  ace ){ sqlite3Io
2d200 54 72 61 63 65 20 41 3b 20 7d 0a 20 20 76 6f 69  Trace A; }.  voi
2d210 64 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  d sqlite3VdbeIOT
2d220 72 61 63 65 53 71 6c 28 56 64 62 65 2a 29 3b 0a  raceSql(Vdbe*);.
2d230 53 51 4c 49 54 45 5f 41 50 49 20 53 51 4c 49 54  SQLITE_API SQLIT
2d240 45 5f 45 58 54 45 52 4e 20 76 6f 69 64 20 28 53  E_EXTERN void (S
2d250 51 4c 49 54 45 5f 43 44 45 43 4c 20 2a 73 71 6c  QLITE_CDECL *sql
2d260 69 74 65 33 49 6f 54 72 61 63 65 29 28 63 6f 6e  ite3IoTrace)(con
2d270 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23  st char*,...);.#
2d280 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 49 4f  else.# define IO
2d290 54 52 41 43 45 28 41 29 0a 23 20 64 65 66 69 6e  TRACE(A).# defin
2d2a0 65 20 73 71 6c 69 74 65 33 56 64 62 65 49 4f 54  e sqlite3VdbeIOT
2d2b0 72 61 63 65 53 71 6c 28 58 29 0a 23 65 6e 64 69  raceSql(X).#endi
2d2c0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 72  f../*.** These r
2d2d0 6f 75 74 69 6e 65 73 20 61 72 65 20 61 76 61 69  outines are avai
2d2e0 6c 61 62 6c 65 20 66 6f 72 20 74 68 65 20 6d 65  lable for the me
2d2f0 6d 32 2e 63 20 64 65 62 75 67 67 69 6e 67 20 6d  m2.c debugging m
2d300 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 0a  emory allocator.
2d310 2a 2a 20 6f 6e 6c 79 2e 20 20 54 68 65 79 20 61  ** only.  They a
2d320 72 65 20 75 73 65 64 20 74 6f 20 76 65 72 69 66  re used to verif
2d330 79 20 74 68 61 74 20 64 69 66 66 65 72 65 6e 74  y that different
2d340 20 22 74 79 70 65 73 22 20 6f 66 20 6d 65 6d 6f   "types" of memo
2d350 72 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e  ry.** allocation
2d360 73 20 61 72 65 20 70 72 6f 70 65 72 6c 79 20 74  s are properly t
2d370 72 61 63 6b 65 64 20 62 79 20 74 68 65 20 73 79  racked by the sy
2d380 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69  stem..**.** sqli
2d390 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79  te3MemdebugSetTy
2d3a0 70 65 28 29 20 73 65 74 73 20 74 68 65 20 22 74  pe() sets the "t
2d3b0 79 70 65 22 20 6f 66 20 61 6e 20 61 6c 6c 6f 63  ype" of an alloc
2d3c0 61 74 69 6f 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a  ation to one of.
2d3d0 2a 2a 20 74 68 65 20 4d 45 4d 54 59 50 45 5f 2a  ** the MEMTYPE_*
2d3e0 20 6d 61 63 72 6f 73 20 64 65 66 69 6e 65 64 20   macros defined 
2d3f0 62 65 6c 6f 77 2e 20 20 54 68 65 20 74 79 70 65  below.  The type
2d400 20 6d 75 73 74 20 62 65 20 61 20 62 69 74 6d 61   must be a bitma
2d410 73 6b 20 77 69 74 68 0a 2a 2a 20 61 20 73 69 6e  sk with.** a sin
2d420 67 6c 65 20 62 69 74 20 73 65 74 2e 0a 2a 2a 0a  gle bit set..**.
2d430 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  ** sqlite3Memdeb
2d440 75 67 48 61 73 54 79 70 65 28 29 20 72 65 74 75  ugHasType() retu
2d450 72 6e 73 20 74 72 75 65 20 69 66 20 61 6e 79 20  rns true if any 
2d460 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e 20 69  of the bits in i
2d470 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67  ts second.** arg
2d480 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20  ument match the 
2d490 74 79 70 65 20 73 65 74 20 62 79 20 74 68 65 20  type set by the 
2d4a0 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33  previous sqlite3
2d4b0 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28  MemdebugSetType(
2d4c0 29 2e 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d  )..** sqlite3Mem
2d4d0 64 65 62 75 67 48 61 73 54 79 70 65 28 29 20 69  debugHasType() i
2d4e0 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72 20 75  s intended for u
2d4f0 73 65 20 69 6e 73 69 64 65 20 61 73 73 65 72 74  se inside assert
2d500 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a  () statements..*
2d510 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2d520 65 62 75 67 4e 6f 54 79 70 65 28 29 20 72 65 74  ebugNoType() ret
2d530 75 72 6e 73 20 74 72 75 65 20 69 66 20 6e 6f 6e  urns true if non
2d540 65 20 6f 66 20 74 68 65 20 62 69 74 73 20 69 6e  e of the bits in
2d550 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a 2a 20 61   its second.** a
2d560 72 67 75 6d 65 6e 74 20 6d 61 74 63 68 20 74 68  rgument match th
2d570 65 20 74 79 70 65 20 73 65 74 20 62 79 20 74 68  e type set by th
2d580 65 20 70 72 65 76 69 6f 75 73 20 73 71 6c 69 74  e previous sqlit
2d590 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2d5a0 65 28 29 2e 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61  e()..**.** Perha
2d5b0 70 73 20 74 68 65 20 6d 6f 73 74 20 69 6d 70 6f  ps the most impo
2d5c0 72 74 61 6e 74 20 70 6f 69 6e 74 20 69 73 20 74  rtant point is t
2d5d0 68 65 20 64 69 66 66 65 72 65 6e 63 65 20 62 65  he difference be
2d5e0 74 77 65 65 6e 20 4d 45 4d 54 59 50 45 5f 48 45  tween MEMTYPE_HE
2d5f0 41 50 0a 2a 2a 20 61 6e 64 20 4d 45 4d 54 59 50  AP.** and MEMTYP
2d600 45 5f 4c 4f 4f 4b 41 53 49 44 45 2e 20 20 49 66  E_LOOKASIDE.  If
2d610 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69   an allocation i
2d620 73 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53  s MEMTYPE_LOOKAS
2d630 49 44 45 2c 20 74 68 61 74 20 6d 65 61 6e 73 0a  IDE, that means.
2d640 2a 2a 20 69 74 20 6d 69 67 68 74 20 68 61 76 65  ** it might have
2d650 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
2d660 62 79 20 6c 6f 6f 6b 61 73 69 64 65 2c 20 65 78  by lookaside, ex
2d670 63 65 70 74 20 74 68 65 20 61 6c 6c 6f 63 61 74  cept the allocat
2d680 69 6f 6e 20 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c  ion was.** too l
2d690 61 72 67 65 20 6f 72 20 6c 6f 6f 6b 61 73 69 64  arge or lookasid
2d6a0 65 20 77 61 73 20 61 6c 72 65 61 64 79 20 66 75  e was already fu
2d6b0 6c 6c 2e 20 20 49 74 20 69 73 20 69 6d 70 6f 72  ll.  It is impor
2d6c0 74 61 6e 74 20 74 6f 20 76 65 72 69 66 79 0a 2a  tant to verify.*
2d6d0 2a 20 74 68 61 74 20 61 6c 6c 6f 63 61 74 69 6f  * that allocatio
2d6e0 6e 73 20 74 68 61 74 20 6d 69 67 68 74 20 68 61  ns that might ha
2d6f0 76 65 20 62 65 65 6e 20 73 61 74 69 73 66 69 65  ve been satisfie
2d700 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64 65 20 61  d by lookaside a
2d710 72 65 20 6e 6f 74 0a 2a 2a 20 70 61 73 73 65 64  re not.** passed
2d720 20 62 61 63 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f   back to non-loo
2d730 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2d740 75 74 69 6e 65 73 2e 20 20 41 73 73 65 72 74 73  utines.  Asserts
2d750 20 73 75 63 68 20 61 73 20 74 68 65 0a 2a 2a 20   such as the.** 
2d760 65 78 61 6d 70 6c 65 20 61 62 6f 76 65 20 61 72  example above ar
2d770 65 20 70 6c 61 63 65 64 20 6f 6e 20 74 68 65 20  e placed on the 
2d780 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72  non-lookaside fr
2d790 65 65 28 29 20 72 6f 75 74 69 6e 65 73 20 74 6f  ee() routines to
2d7a0 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 69 73 20   verify.** this 
2d7b0 63 6f 6e 73 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a  constraint..**.*
2d7c0 2a 20 41 6c 6c 20 6f 66 20 74 68 69 73 20 69 73  * All of this is
2d7d0 20 6e 6f 2d 6f 70 20 66 6f 72 20 61 20 70 72 6f   no-op for a pro
2d7e0 64 75 63 74 69 6f 6e 20 62 75 69 6c 64 2e 20 20  duction build.  
2d7f0 49 74 20 6f 6e 6c 79 20 63 6f 6d 65 73 20 69 6e  It only comes in
2d800 74 6f 0a 2a 2a 20 70 6c 61 79 20 77 68 65 6e 20  to.** play when 
2d810 74 68 65 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  the SQLITE_MEMDE
2d820 42 55 47 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BUG compile-time
2d830 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65 64 2e   option is used.
2d840 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2d850 45 5f 4d 45 4d 44 45 42 55 47 0a 20 20 76 6f 69  E_MEMDEBUG.  voi
2d860 64 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  d sqlite3Memdebu
2d870 67 53 65 74 54 79 70 65 28 76 6f 69 64 2a 2c 75  gSetType(void*,u
2d880 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  8);.  int sqlite
2d890 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65  3MemdebugHasType
2d8a0 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e  (void*,u8);.  in
2d8b0 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  t sqlite3Memdebu
2d8c0 67 4e 6f 54 79 70 65 28 76 6f 69 64 2a 2c 75 38  gNoType(void*,u8
2d8d0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2d8e0 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  e sqlite3Memdebu
2d8f0 67 53 65 74 54 79 70 65 28 58 2c 59 29 20 20 2f  gSetType(X,Y)  /
2d900 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 20 64 65 66  * no-op */.# def
2d910 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ine sqlite3Memde
2d920 62 75 67 48 61 73 54 79 70 65 28 58 2c 59 29 20  bugHasType(X,Y) 
2d930 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
2d940 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70  te3MemdebugNoTyp
2d950 65 28 58 2c 59 29 20 20 20 31 0a 23 65 6e 64 69  e(X,Y)   1.#endi
2d960 66 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  f.#define MEMTYP
2d970 45 5f 48 45 41 50 20 20 20 20 20 20 20 30 78 30  E_HEAP       0x0
2d980 31 20 20 2f 2a 20 47 65 6e 65 72 61 6c 20 68 65  1  /* General he
2d990 61 70 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  ap allocations *
2d9a0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2d9b0 45 5f 4c 4f 4f 4b 41 53 49 44 45 20 20 30 78 30  E_LOOKASIDE  0x0
2d9c0 32 20 20 2f 2a 20 48 65 61 70 20 74 68 61 74 20  2  /* Heap that 
2d9d0 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20  might have been 
2d9e0 6c 6f 6f 6b 61 73 69 64 65 20 2a 2f 0a 23 64 65  lookaside */.#de
2d9f0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 53 43 52  fine MEMTYPE_SCR
2da00 41 54 43 48 20 20 20 20 30 78 30 34 20 20 2f 2a  ATCH    0x04  /*
2da10 20 53 63 72 61 74 63 68 20 61 6c 6c 6f 63 61 74   Scratch allocat
2da20 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ions */.#define 
2da30 4d 45 4d 54 59 50 45 5f 50 43 41 43 48 45 20 20  MEMTYPE_PCACHE  
2da40 20 20 20 30 78 30 38 20 20 2f 2a 20 50 61 67 65     0x08  /* Page
2da50 20 63 61 63 68 65 20 61 6c 6c 6f 63 61 74 69 6f   cache allocatio
2da60 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72  ns */../*.** Thr
2da70 65 61 64 69 6e 67 20 69 6e 74 65 72 66 61 63 65  eading interface
2da80 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d  .*/.#if SQLITE_M
2da90 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
2daa0 53 3e 30 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  S>0.int sqlite3T
2dab0 68 72 65 61 64 43 72 65 61 74 65 28 53 51 4c 69  hreadCreate(SQLi
2dac0 74 65 54 68 72 65 61 64 2a 2a 2c 76 6f 69 64 2a  teThread**,void*
2dad0 28 2a 29 28 76 6f 69 64 2a 29 2c 76 6f 69 64 2a  (*)(void*),void*
2dae0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 68  );.int sqlite3Th
2daf0 72 65 61 64 4a 6f 69 6e 28 53 51 4c 69 74 65 54  readJoin(SQLiteT
2db00 68 72 65 61 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b  hread*, void**);
2db10 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 64 65 66  .#endif..#if def
2db20 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2db30 4c 45 5f 44 42 53 54 41 54 5f 56 54 41 42 29 20  LE_DBSTAT_VTAB) 
2db40 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2db50 45 5f 54 45 53 54 29 0a 69 6e 74 20 73 71 6c 69  E_TEST).int sqli
2db60 74 65 33 44 62 73 74 61 74 52 65 67 69 73 74 65  te3DbstatRegiste
2db70 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6e  r(sqlite3*);.#en
2db80 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
2db90 45 78 70 72 56 65 63 74 6f 72 53 69 7a 65 28 45  ExprVectorSize(E
2dba0 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74  xpr *pExpr);.int
2dbb0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 56 65   sqlite3ExprIsVe
2dbc0 63 74 6f 72 28 45 78 70 72 20 2a 70 45 78 70 72  ctor(Expr *pExpr
2dbd0 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2dbe0 56 65 63 74 6f 72 46 69 65 6c 64 53 75 62 65 78  VectorFieldSubex
2dbf0 70 72 28 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  pr(Expr*, int);.
2dc00 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
2dc10 72 46 6f 72 56 65 63 74 6f 72 46 69 65 6c 64 28  rForVectorField(
2dc20 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 69 6e 74  Parse*,Expr*,int
2dc30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2dc40 65 63 74 6f 72 45 72 72 6f 72 4d 73 67 28 50 61  ectorErrorMsg(Pa
2dc50 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 0a 23  rse*, Expr*);..#
2dc60 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 49  endif /* SQLITEI
2dc70 4e 54 5f 48 20 2a 2f 0a                          NT_H */.