/ Hex Artifact Content
Login

Artifact c5e83040837328293dfec3b89923300591ed1de6ac3d073818d414b55c0e21a0:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
11f0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
1200: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
1210: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
1220: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
1230: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
1240: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
1250: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 23 69  SION 0.#endif.#i
1260: 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56  f defined(_MSC_V
1270: 45 52 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ER) && !defined(
1280: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1290: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
12a0: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
12b0: 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73 65 0a 23  _MSC_VER.#else.#
12c0: 20 64 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52   define MSVC_VER
12d0: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
12e0: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
12f0: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
1300: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
1310: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
1320: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
1330: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1340: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
1350: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
1360: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
1370: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
1380: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
1390: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
13a0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
13b0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
13c0: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
13d0: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
13e0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
13f0: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
1400: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
1410: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
1420: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
1430: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
1440: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
1450: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
1460: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1470: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
1480: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
1490: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
14a0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
14b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c0: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
14d0: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
14e0: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
14f0: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
1500: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
1510: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
1520: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
1530: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
1540: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
1550: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
1560: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
1570: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
1580: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
1590: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
15a0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
15b0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
15c0: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
15d0: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
15e0: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
15f0: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
1600: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
1610: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
1620: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
1630: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
1640: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
1650: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
1660: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
1670: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
1680: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
1690: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
16a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
16b0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
16c0: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
16d0: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
16e0: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
16f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
1700: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
1710: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
1720: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
1730: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
1740: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
1750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
1760: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
1770: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
1780: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
1790: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
17a0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
17b0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
17c0: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
17d0: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
17e0: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
17f0: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
1800: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
1810: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
1820: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
1830: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1840: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
1850: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
1860: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
1870: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
1880: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
1890: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
18a0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
18b0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
18c0: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
18d0: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
18e0: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
18f0: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1900: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1910: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1920: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1930: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1940: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1950: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
1960: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
1970: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
1980: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
1990: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
19a0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
19b0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
19c0: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
19d0: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
19e0: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
19f0: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1a00: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1a10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1a20: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1a30: 64 0a 2a 2f 0a 23 69 66 64 65 66 20 5f 48 41 56  d.*/.#ifdef _HAV
1a40: 45 5f 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  E_SQLITE_CONFIG_
1a50: 48 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f 6e 66  H.#include "conf
1a60: 69 67 2e 68 22 0a 23 65 6e 64 69 66 0a 0a 23 69  ig.h".#endif..#i
1a70: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 4c 69  nclude "sqliteLi
1a80: 6d 69 74 2e 68 22 0a 0a 2f 2a 20 44 69 73 61 62  mit.h"../* Disab
1a90: 6c 65 20 6e 75 69 73 61 6e 63 65 20 77 61 72 6e  le nuisance warn
1aa0: 69 6e 67 73 20 6f 6e 20 42 6f 72 6c 61 6e 64 20  ings on Borland 
1ab0: 63 6f 6d 70 69 6c 65 72 73 20 2a 2f 0a 23 69 66  compilers */.#if
1ac0: 20 64 65 66 69 6e 65 64 28 5f 5f 42 4f 52 4c 41   defined(__BORLA
1ad0: 4e 44 43 5f 5f 29 0a 23 70 72 61 67 6d 61 20 77  NDC__).#pragma w
1ae0: 61 72 6e 20 2d 72 63 68 20 2f 2a 20 75 6e 72 65  arn -rch /* unre
1af0: 61 63 68 61 62 6c 65 20 63 6f 64 65 20 2a 2f 0a  achable code */.
1b00: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 63  #pragma warn -cc
1b10: 63 20 2f 2a 20 43 6f 6e 64 69 74 69 6f 6e 20 69  c /* Condition i
1b20: 73 20 61 6c 77 61 79 73 20 74 72 75 65 20 6f 72  s always true or
1b30: 20 66 61 6c 73 65 20 2a 2f 0a 23 70 72 61 67 6d   false */.#pragm
1b40: 61 20 77 61 72 6e 20 2d 61 75 73 20 2f 2a 20 41  a warn -aus /* A
1b50: 73 73 69 67 6e 65 64 20 76 61 6c 75 65 20 69 73  ssigned value is
1b60: 20 6e 65 76 65 72 20 75 73 65 64 20 2a 2f 0a 23   never used */.#
1b70: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 63 73 75  pragma warn -csu
1b80: 20 2f 2a 20 43 6f 6d 70 61 72 69 6e 67 20 73 69   /* Comparing si
1b90: 67 6e 65 64 20 61 6e 64 20 75 6e 73 69 67 6e 65  gned and unsigne
1ba0: 64 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  d */.#pragma war
1bb0: 6e 20 2d 73 70 61 20 2f 2a 20 53 75 73 70 69 63  n -spa /* Suspic
1bc0: 69 6f 75 73 20 70 6f 69 6e 74 65 72 20 61 72 69  ious pointer ari
1bd0: 74 68 6d 65 74 69 63 20 2a 2f 0a 23 65 6e 64 69  thmetic */.#endi
1be0: 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64 65  f../*.** Include
1bf0: 20 73 74 61 6e 64 61 72 64 20 68 65 61 64 65 72   standard header
1c00: 20 66 69 6c 65 73 20 61 73 20 6e 65 63 65 73 73   files as necess
1c10: 61 72 79 0a 2a 2f 0a 23 69 66 64 65 66 20 48 41  ary.*/.#ifdef HA
1c20: 56 45 5f 53 54 44 49 4e 54 5f 48 0a 23 69 6e 63  VE_STDINT_H.#inc
1c30: 6c 75 64 65 20 3c 73 74 64 69 6e 74 2e 68 3e 0a  lude <stdint.h>.
1c40: 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 48 41  #endif.#ifdef HA
1c50: 56 45 5f 49 4e 54 54 59 50 45 53 5f 48 0a 23 69  VE_INTTYPES_H.#i
1c60: 6e 63 6c 75 64 65 20 3c 69 6e 74 74 79 70 65 73  nclude <inttypes
1c70: 2e 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  .h>.#endif../*.*
1c80: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
1c90: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
1ca0: 74 6f 20 63 61 73 74 20 70 6f 69 6e 74 65 72 73  to cast pointers
1cb0: 20 74 6f 20 69 6e 74 65 67 65 72 73 20 61 6e 64   to integers and
1cc0: 0a 2a 2a 20 69 6e 74 65 67 65 72 73 20 74 6f 20  .** integers to 
1cd0: 70 6f 69 6e 74 65 72 73 2e 20 20 54 68 65 20 77  pointers.  The w
1ce0: 61 79 20 79 6f 75 20 64 6f 20 74 68 69 73 20 76  ay you do this v
1cf0: 61 72 69 65 73 20 66 72 6f 6d 20 6f 6e 65 20 63  aries from one c
1d00: 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f 20 74 68  ompiler.** to th
1d10: 65 20 6e 65 78 74 2c 20 73 6f 20 77 65 20 68 61  e next, so we ha
1d20: 76 65 20 64 65 76 65 6c 6f 70 65 64 20 74 68 65  ve developed the
1d30: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 65 74 20 6f   following set o
1d40: 66 20 23 69 66 20 73 74 61 74 65 6d 65 6e 74 73  f #if statements
1d50: 0a 2a 2a 20 74 6f 20 67 65 6e 65 72 61 74 65 20  .** to generate 
1d60: 61 70 70 72 6f 70 72 69 61 74 65 20 6d 61 63 72  appropriate macr
1d70: 6f 73 20 66 6f 72 20 61 20 77 69 64 65 20 72 61  os for a wide ra
1d80: 6e 67 65 20 6f 66 20 63 6f 6d 70 69 6c 65 72 73  nge of compilers
1d90: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 63 6f 72 72  ..**.** The corr
1da0: 65 63 74 20 22 41 4e 53 49 22 20 77 61 79 20 74  ect "ANSI" way t
1db0: 6f 20 64 6f 20 74 68 69 73 20 69 73 20 74 6f 20  o do this is to 
1dc0: 75 73 65 20 74 68 65 20 69 6e 74 70 74 72 5f 74  use the intptr_t
1dd0: 20 74 79 70 65 2e 0a 2a 2a 20 55 6e 66 6f 72 74   type..** Unfort
1de0: 75 6e 61 74 65 6c 79 2c 20 74 68 61 74 20 74 79  unately, that ty
1df0: 70 65 64 65 66 20 69 73 20 6e 6f 74 20 61 76 61  pedef is not ava
1e00: 69 6c 61 62 6c 65 20 6f 6e 20 61 6c 6c 20 63 6f  ilable on all co
1e10: 6d 70 69 6c 65 72 73 2c 20 6f 72 0a 2a 2a 20 69  mpilers, or.** i
1e20: 66 20 69 74 20 69 73 20 61 76 61 69 6c 61 62 6c  f it is availabl
1e30: 65 2c 20 69 74 20 72 65 71 75 69 72 65 73 20 61  e, it requires a
1e40: 6e 20 23 69 6e 63 6c 75 64 65 20 6f 66 20 73 70  n #include of sp
1e50: 65 63 69 66 69 63 20 68 65 61 64 65 72 73 0a 2a  ecific headers.*
1e60: 2a 20 74 68 61 74 20 76 61 72 79 20 66 72 6f 6d  * that vary from
1e70: 20 6f 6e 65 20 6d 61 63 68 69 6e 65 20 74 6f 20   one machine to 
1e80: 74 68 65 20 6e 65 78 74 2e 0a 2a 2a 0a 2a 2a 20  the next..**.** 
1e90: 54 69 63 6b 65 74 20 23 33 38 36 30 3a 20 20 54  Ticket #3860:  T
1ea0: 68 65 20 6c 6c 76 6d 2d 67 63 63 2d 34 2e 32 20  he llvm-gcc-4.2 
1eb0: 63 6f 6d 70 69 6c 65 72 20 66 72 6f 6d 20 41 70  compiler from Ap
1ec0: 70 6c 65 20 63 68 6f 6b 65 73 20 6f 6e 0a 2a 2a  ple chokes on.**
1ed0: 20 74 68 65 20 28 28 76 6f 69 64 2a 29 26 28 28   the ((void*)&((
1ee0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 20 63 6f 6e  char*)0)[X]) con
1ef0: 73 74 72 75 63 74 2e 20 20 42 75 74 20 4d 53 56  struct.  But MSV
1f00: 43 20 63 68 6f 6b 65 73 20 6f 6e 20 28 28 76 6f  C chokes on ((vo
1f10: 69 64 2a 29 28 58 29 29 2e 0a 2a 2a 20 53 6f 20  id*)(X))..** So 
1f20: 77 65 20 68 61 76 65 20 74 6f 20 64 65 66 69 6e  we have to defin
1f30: 65 20 74 68 65 20 6d 61 63 72 6f 73 20 69 6e 20  e the macros in 
1f40: 64 69 66 66 65 72 65 6e 74 20 77 61 79 73 20 64  different ways d
1f50: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 0a  epending on the.
1f60: 2a 2a 20 63 6f 6d 70 69 6c 65 72 2e 0a 2a 2f 0a  ** compiler..*/.
1f70: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 50 54  #if defined(__PT
1f80: 52 44 49 46 46 5f 54 59 50 45 5f 5f 29 20 20 2f  RDIFF_TYPE__)  /
1f90: 2a 20 54 68 69 73 20 63 61 73 65 20 73 68 6f 75  * This case shou
1fa0: 6c 64 20 77 6f 72 6b 20 66 6f 72 20 47 43 43 20  ld work for GCC 
1fb0: 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  */.# define SQLI
1fc0: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29  TE_INT_TO_PTR(X)
1fd0: 20 20 28 28 76 6f 69 64 2a 29 28 5f 5f 50 54 52    ((void*)(__PTR
1fe0: 44 49 46 46 5f 54 59 50 45 5f 5f 29 28 58 29 29  DIFF_TYPE__)(X))
1ff0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
2000: 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29 20 20  _PTR_TO_INT(X)  
2010: 28 28 69 6e 74 29 28 5f 5f 50 54 52 44 49 46 46  ((int)(__PTRDIFF
2020: 5f 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 65 6c  _TYPE__)(X)).#el
2030: 69 66 20 21 64 65 66 69 6e 65 64 28 5f 5f 47 4e  if !defined(__GN
2040: 55 43 5f 5f 29 20 20 20 20 20 20 20 2f 2a 20 57  UC__)       /* W
2050: 6f 72 6b 73 20 66 6f 72 20 63 6f 6d 70 69 6c 65  orks for compile
2060: 72 73 20 6f 74 68 65 72 20 74 68 61 6e 20 4c 4c  rs other than LL
2070: 56 4d 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53  VM */.# define S
2080: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
2090: 28 58 29 20 20 28 28 76 6f 69 64 2a 29 26 28 28  (X)  ((void*)&((
20a0: 63 68 61 72 2a 29 30 29 5b 58 5d 29 0a 23 20 64  char*)0)[X]).# d
20b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52  efine SQLITE_PTR
20c0: 5f 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e  _TO_INT(X)  ((in
20d0: 74 29 28 28 28 63 68 61 72 2a 29 58 29 2d 28 63  t)(((char*)X)-(c
20e0: 68 61 72 2a 29 30 29 29 0a 23 65 6c 69 66 20 64  har*)0)).#elif d
20f0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
2100: 4e 54 5f 48 29 20 20 20 2f 2a 20 55 73 65 20 74  NT_H)   /* Use t
2110: 68 69 73 20 63 61 73 65 20 69 66 20 77 65 20 68  his case if we h
2120: 61 76 65 20 41 4e 53 49 20 68 65 61 64 65 72 73  ave ANSI headers
2130: 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51 4c   */.# define SQL
2140: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58  ITE_INT_TO_PTR(X
2150: 29 20 20 28 28 76 6f 69 64 2a 29 28 69 6e 74 70  )  ((void*)(intp
2160: 74 72 5f 74 29 28 58 29 29 0a 23 20 64 65 66 69  tr_t)(X)).# defi
2170: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f  ne SQLITE_PTR_TO
2180: 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28  _INT(X)  ((int)(
2190: 69 6e 74 70 74 72 5f 74 29 28 58 29 29 0a 23 65  intptr_t)(X)).#e
21a0: 6c 73 65 20 20 20 20 20 20 20 20 20 20 20 20 20  lse             
21b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21c0: 47 65 6e 65 72 61 74 65 73 20 61 20 77 61 72 6e  Generates a warn
21d0: 69 6e 67 20 2d 20 62 75 74 20 69 74 20 61 6c 77  ing - but it alw
21e0: 61 79 73 20 77 6f 72 6b 73 20 2a 2f 0a 23 20 64  ays works */.# d
21f0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
2200: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
2210: 69 64 2a 29 28 58 29 29 0a 23 20 64 65 66 69 6e  id*)(X)).# defin
2220: 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f  e SQLITE_PTR_TO_
2230: 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 58  INT(X)  ((int)(X
2240: 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  )).#endif../*.**
2250: 20 41 20 6d 61 63 72 6f 20 74 6f 20 68 69 6e 74   A macro to hint
2260: 20 74 6f 20 74 68 65 20 63 6f 6d 70 69 6c 65 72   to the compiler
2270: 20 74 68 61 74 20 61 20 66 75 6e 63 74 69 6f 6e   that a function
2280: 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62 65 0a 2a   should not be.*
2290: 2a 20 69 6e 6c 69 6e 65 64 2e 0a 2a 2f 0a 23 69  * inlined..*/.#i
22a0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
22b0: 5f 5f 29 0a 23 20 20 64 65 66 69 6e 65 20 53 51  __).#  define SQ
22c0: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f  LITE_NOINLINE  _
22d0: 5f 61 74 74 72 69 62 75 74 65 5f 5f 28 28 6e 6f  _attribute__((no
22e0: 69 6e 6c 69 6e 65 29 29 0a 23 65 6c 69 66 20 64  inline)).#elif d
22f0: 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52 29  efined(_MSC_VER)
2300: 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31 33   && _MSC_VER>=13
2310: 31 30 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  10.#  define SQL
2320: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f  ITE_NOINLINE  __
2330: 64 65 63 6c 73 70 65 63 28 6e 6f 69 6e 6c 69 6e  declspec(noinlin
2340: 65 29 0a 23 65 6c 73 65 0a 23 20 20 64 65 66 69  e).#else.#  defi
2350: 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 49 4e 4c 49  ne SQLITE_NOINLI
2360: 4e 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  NE.#endif../*.**
2370: 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that 
2380: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 69 6e 74  the compiler int
2390: 72 69 6e 73 69 63 73 20 77 65 20 64 65 73 69 72  rinsics we desir
23a0: 65 20 61 72 65 20 65 6e 61 62 6c 65 64 20 77 68  e are enabled wh
23b0: 65 6e 0a 2a 2a 20 63 6f 6d 70 69 6c 69 6e 67 20  en.** compiling 
23c0: 77 69 74 68 20 61 6e 20 61 70 70 72 6f 70 72 69  with an appropri
23d0: 61 74 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d  ate version of M
23e0: 53 56 43 20 75 6e 6c 65 73 73 20 70 72 65 76 65  SVC unless preve
23f0: 6e 74 65 64 20 62 79 0a 2a 2a 20 74 68 65 20 53  nted by.** the S
2400: 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49 4e  QLITE_DISABLE_IN
2410: 54 52 49 4e 53 49 43 20 64 65 66 69 6e 65 2e 0a  TRINSIC define..
2420: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
2430: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
2440: 4e 54 52 49 4e 53 49 43 29 0a 23 20 20 69 66 20  NTRINSIC).#  if 
2450: 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56 45 52  defined(_MSC_VER
2460: 29 20 26 26 20 5f 4d 53 43 5f 56 45 52 3e 3d 31  ) && _MSC_VER>=1
2470: 34 30 30 0a 23 20 20 20 20 69 66 20 21 64 65 66  400.#    if !def
2480: 69 6e 65 64 28 5f 57 49 4e 33 32 5f 57 43 45 29  ined(_WIN32_WCE)
2490: 0a 23 20 20 20 20 20 20 69 6e 63 6c 75 64 65 20  .#      include 
24a0: 3c 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20  <intrin.h>.#    
24b0: 20 20 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73    pragma intrins
24c0: 69 63 28 5f 62 79 74 65 73 77 61 70 5f 75 73 68  ic(_byteswap_ush
24d0: 6f 72 74 29 0a 23 20 20 20 20 20 20 70 72 61 67  ort).#      prag
24e0: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
24f0: 74 65 73 77 61 70 5f 75 6c 6f 6e 67 29 0a 23 20  teswap_ulong).# 
2500: 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74 72       pragma intr
2510: 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70 5f  insic(_byteswap_
2520: 75 69 6e 74 36 34 29 0a 23 20 20 20 20 20 20 70  uint64).#      p
2530: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
2540: 5f 52 65 61 64 57 72 69 74 65 42 61 72 72 69 65  _ReadWriteBarrie
2550: 72 29 0a 23 20 20 20 20 65 6c 73 65 0a 23 20 20  r).#    else.#  
2560: 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 63 6d 6e      include <cmn
2570: 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 65  intrin.h>.#    e
2580: 6e 64 69 66 0a 23 20 20 65 6e 64 69 66 0a 23 65  ndif.#  endif.#e
2590: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
25a0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
25b0: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20  E macro must be 
25c0: 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c  defined as 0, 1,
25d0: 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e   or 2..** 0 mean
25e0: 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70 65  s mutexes are pe
25f0: 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c  rmanently disabl
2600: 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72  e and the librar
2610: 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68  y is never.** th
2620: 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61  readsafe.  1 mea
2630: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
2640: 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69  s serialized whi
2650: 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65 73  ch is the highes
2660: 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68  t.** level of th
2670: 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d  readsafety.  2 m
2680: 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79  eans the library
2690: 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65   is multithreade
26a0: 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20  d - multiple.** 
26b0: 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65 20  threads can use 
26c0: 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61  SQLite as long a
26d0: 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73  s no two threads
26e0: 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65 20   try to use the 
26f0: 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65  same.** database
2700: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74   connection at t
2710: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a  he same time..**
2720: 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f  .** Older versio
2730: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65  ns of SQLite use
2740: 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48  d an optional TH
2750: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a  READSAFE macro..
2760: 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74 68  ** We support th
2770: 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a  at for legacy..*
2780: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2790: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
27a0: 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 54  ).# if defined(T
27b0: 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20 64  HREADSAFE).#   d
27c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
27d0: 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53 41  EADSAFE THREADSA
27e0: 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  FE.# else.#   de
27f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45  fine SQLITE_THRE
2800: 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a  ADSAFE 1 /* IMP:
2810: 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a   R-07272-22309 *
2820: 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  /.# endif.#endif
2830: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66  ../*.** Powersaf
2840: 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f  e overwrite is o
2850: 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42  n by default.  B
2860: 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64  ut can be turned
2870: 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68   off using.** th
2880: 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52  e -DSQLITE_POWER
2890: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30  SAFE_OVERWRITE=0
28a0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70   command-line op
28b0: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
28c0: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
28d0: 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65  E_OVERWRITE.# de
28e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45  fine SQLITE_POWE
28f0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20  RSAFE_OVERWRITE 
2900: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2910: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
2920: 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72  5715-37072 Memor
2930: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
2940: 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61 62  tistics are enab
2950: 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c  led by.** defaul
2960: 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20  t unless SQLite 
2970: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
2980: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2990: 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a  MEMSTATUS=0 in.*
29a0: 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d  * which case mem
29b0: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
29c0: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64 69  tatistics are di
29d0: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
29e0: 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  t..*/.#if !defin
29f0: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
2a00: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
2a10: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
2a20: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
2a30: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
2a40: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
2a50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2a60: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
2a70: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
2a80: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
2a90: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2aa0: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
2ab0: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
2ac0: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2ad0: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
2ae0: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
2af0: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
2b00: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2b10: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
2b20: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
2b30: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
2b40: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
2b50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2b60: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
2b70: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
2b80: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
2b90: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
2ba0: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
2bb0: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
2bc0: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
2bd0: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
2be0: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
2bf0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2c00: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
2c10: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
2c20: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
2c30: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
2c40: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
2c50: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
2c60: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
2c70: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
2c80: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
2c90: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
2ca0: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
2cb0: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
2cc0: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
2cd0: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
2ce0: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
2cf0: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
2d00: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
2d10: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
2d20: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
2d30: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
2d40: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2d50: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
2d60: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2d70: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2d80: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2d90: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2da0: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2db0: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2dc0: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2dd0: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2de0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2df0: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2e00: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2e10: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
2e20: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
2e30: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
2e40: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
2e50: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2e60: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
2e70: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2e80: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2e90: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2ea0: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2eb0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ec0: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2ed0: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2ee0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2ef0: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2f00: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2f10: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
2f20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
2f30: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
2f40: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
2f50: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2f60: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
2f70: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2f80: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2f90: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2fa0: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2fb0: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2fc0: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2fd0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2fe0: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2ff0: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
3000: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
3010: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
3020: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
3030: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
3040: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
3050: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3060: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
3070: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
3080: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
3090: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
30a0: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
30b0: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
30c0: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
30d0: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
30e0: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
30f0: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
3100: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
3110: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
3120: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
3130: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
3140: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
3150: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
3160: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
3170: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
3180: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
3190: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
31a0: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
31b0: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
31c0: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
31d0: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
31e0: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
31f0: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
3200: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
3210: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
3220: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
3230: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
3240: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
3250: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
3260: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
3270: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
3280: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
3290: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
32a0: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
32b0: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
32c0: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
32d0: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
32e0: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
32f0: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
3300: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
3310: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
3320: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
3330: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
3340: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
3350: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
3360: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
3370: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3380: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e 44  BUG).# define ND
3390: 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69  EBUG 1.#endif.#i
33a0: 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  f defined(NDEBUG
33b0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
33c0: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64  ITE_DEBUG).# und
33d0: 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66  ef NDEBUG.#endif
33e0: 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53  ../*.** Enable S
33f0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
3400: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66  LAIN_COMMENTS if
3410: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
3420: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
3430: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
3440: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
3450: 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64  N_COMMENTS) && d
3460: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3470: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51  BUG).# define SQ
3480: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
3490: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23  AIN_COMMENTS 1.#
34a0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
34b0: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
34c0: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64  o is used to aid
34d0: 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73   in coverage tes
34e0: 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64  ting.  When.** d
34f0: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
3500: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
3510: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
3520: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
3530: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
3540: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
3550: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
3560: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
3570: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
3580: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
3590: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
35a0: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
35b0: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
35c0: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
35d0: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
35e0: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
35f0: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
3600: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
3610: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
3620: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
3630: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
3640: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
3650: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
3660: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
3670: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
3680: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
3690: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
36a0: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
36b0: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
36c0: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
36d0: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
36e0: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
36f0: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
3700: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
3710: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
3720: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
3730: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
3740: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
3750: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
3760: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
3770: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
3780: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
3790: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
37a0: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
37b0: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
37c0: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
37d0: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
37e0: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
37f0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3800: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
3810: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
3820: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
3830: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
3840: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
3850: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
3860: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
3870: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
3880: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
3890: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
38a0: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
38b0: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
38c0: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
38d0: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
38e0: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
38f0: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
3900: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
3910: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
3920: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
3930: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
3940: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
3950: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
3960: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
3970: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
3980: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
3990: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
39a0: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
39b0: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
39c0: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
39d0: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
39e0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
39f0: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
3a00: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
3a10: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
3a20: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
3a30: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
3a40: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
3a50: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
3a60: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
3a70: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
3a80: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
3a90: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
3aa0: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
3ab0: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
3ac0: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
3ad0: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
3ae0: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
3af0: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
3b00: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
3b10: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
3b20: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
3b30: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
3b40: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
3b50: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a  essions which.**
3b60: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f   are intended to
3b70: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
3b80: 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63  or false, respec
3b90: 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a  tively.  Such.**
3ba0: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75   expressions cou
3bb0: 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72  ld be omitted fr
3bc0: 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70  om the code comp
3bd0: 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65  letely.  But the
3be0: 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65  y.** are include
3bf0: 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73  d in a few cases
3c00: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68   in order to enh
3c10: 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65  ance the resilie
3c20: 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65  nce.** of SQLite
3c30: 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62   to unexpected b
3c40: 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b  ehavior - to mak
3c50: 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66  e the code "self
3c60: 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20  -healing".** or 
3c70: 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72  "ductile" rather
3c80: 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69   than being "bri
3c90: 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69  ttle" and crashi
3ca0: 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a  ng at the first.
3cb0: 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61  ** hint of unpla
3cc0: 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a  nned behavior..*
3cd0: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
3ce0: 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20  rds, ALWAYS and 
3cf0: 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20  NEVER are added 
3d00: 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f  for defensive co
3d10: 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64  de..**.** When d
3d20: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
3d30: 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64  sting ALWAYS and
3d40: 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d   NEVER are hard-
3d50: 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74  coded to.** be t
3d60: 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f  rue and false so
3d70: 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63   that the unreac
3d80: 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20  hable code they 
3d90: 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20  specify will.** 
3da0: 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61  not be counted a
3db0: 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e  s untested code.
3dc0: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3dd0: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3de0: 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64  TEST) || defined
3df0: 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e  (SQLITE_MUTATION
3e00: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3e10: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3e20: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3e30: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3e40: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3e50: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3e60: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
3e70: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
3e80: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
3e90: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
3ea0: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3eb0: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3ec0: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3ed0: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3ee0: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3ef0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
3f00: 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  me malloc failur
3f10: 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73  es are only poss
3f20: 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54  ible if SQLITE_T
3f30: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3f40: 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64  SS is.** defined
3f50: 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  .  We need to de
3f60: 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f  fend against tho
3f70: 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e  se failures when
3f80: 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a   testing with.**
3f90: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
3fa0: 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74  LLOC_STRESS, but
3fb0: 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74   we don't want t
3fc0: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62  he unreachable b
3fd0: 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e  ranches.** durin
3fe0: 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64  g a normal build
3ff0: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
4000: 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73   macro can be us
4010: 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65  ed to disable te
4020: 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  sts.** that are 
4030: 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78 63  always false exc
4040: 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f  ept when SQLITE_
4050: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4060: 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23  ESS is set..*/.#
4070: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4080: 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53  E_TEST_REALLOC_S
4090: 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20  TRESS).# define 
40a0: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
40b0: 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a 23  STRESS(X)  (X).#
40c0: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
40d0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f  EBUG).# define O
40e0: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
40f0: 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f 28  TRESS(X)  ((X)?(
4100: 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a  assert(0),1):0).
4110: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f  #else.# define O
4120: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
4130: 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23 65  TRESS(X)  (0).#e
4140: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c  ndif../*.** Decl
4150: 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f  arations used fo
4160: 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70  r tracing the op
4170: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69  erating system i
4180: 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69  nterfaces..*/.#i
4190: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
41a0: 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29  _FORCE_OS_TRACE)
41b0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
41c0: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
41d0: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
41e0: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
41f0: 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74  TE_OS_WIN).  ext
4200: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f  ern int sqlite3O
4210: 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65  STrace;.# define
4220: 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20 20   OSTRACE(X)     
4230: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
4240: 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74 65  OSTrace ) sqlite
4250: 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23  3DebugPrintf X.#
4260: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48   define SQLITE_H
4270: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c  AVE_OS_TRACE.#el
4280: 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52  se.# define OSTR
4290: 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20  ACE(X).# undef  
42a0: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
42b0: 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RACE.#endif../*.
42c0: 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74 65  ** Is the sqlite
42d0: 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74  3ErrName() funct
42e0: 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68  ion needed in th
42f0: 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e  e build?  Curren
4300: 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65  tly,.** it is ne
4310: 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77  eded by "mutex_w
4320: 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75  32.c" (when debu
4330: 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e  gging), "os_win.
4340: 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52  c" (when.** OSTR
4350: 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c  ACE is enabled),
4360: 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20   and by several 
4370: 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20  "test*.c" files 
4380: 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f  (which are.** co
4390: 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c  mpiled using SQL
43a0: 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69  ITE_TEST)..*/.#i
43b0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
43c0: 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20  _HAVE_OS_TRACE) 
43d0: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
43e0: 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20  E_TEST) || \.   
43f0: 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
4400: 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54  _DEBUG) && SQLIT
4410: 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69  E_OS_WIN).# defi
4420: 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ne SQLITE_NEED_E
4430: 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20  RR_NAME.#else.# 
4440: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45  undef  SQLITE_NE
4450: 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64  ED_ERR_NAME.#end
4460: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  if../*.** SQLITE
4470: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
4480: 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f  COMMENTS is inco
4490: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51  mpatible with SQ
44a0: 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
44b0: 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  N.*/.#ifdef SQLI
44c0: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
44d0: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
44e0: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
44f0: 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f  MMENTS.#endif../
4500: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
4510: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
4520: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
4530: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
4540: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
4550: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
4560: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
4570: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
4580: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
4590: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
45a0: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
45b0: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
45c0: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
45d0: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
45e0: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
45f0: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
4600: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
4610: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
4620: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
4630: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
4640: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
4650: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4660: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
4670: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
4680: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
4690: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
46a0: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
46b0: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
46c0: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
46d0: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
46e0: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
46f0: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
4700: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
4710: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
4720: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
4730: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
4740: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
4750: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
4760: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
4770: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
4780: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
4790: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
47a0: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
47b0: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
47c0: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
47d0: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
47e0: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
47f0: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
4800: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65 20  f.h>../*.** Use 
4810: 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c 61  a macro to repla
4820: 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20 63  ce memcpy() if c
4830: 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51 4c  ompiled with SQL
4840: 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43 50  ITE_INLINE_MEMCP
4850: 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f 77  Y..** This allow
4860: 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72 65  s better measure
4870: 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20 6d  ments of where m
4880: 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64 20  emcpy() is used 
4890: 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a 20  when running.** 
48a0: 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75 74  cachegrind.  But
48b0: 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72 73   this macro vers
48c0: 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29 20  ion of memcpy() 
48d0: 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f 20  is very slow so 
48e0: 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f 74  it.** should not
48f0: 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f 64   be used in prod
4900: 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69 73  uction.  This is
4910: 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 6d   a performance m
4920: 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68 61  easurement.** ha
4930: 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66 64  ck only..*/.#ifd
4940: 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e 45  ef SQLITE_INLINE
4950: 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e 65  _MEMCPY.# define
4960: 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20 7b   memcpy(D,S,N) {
4970: 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a 29  char*xxd=(char*)
4980: 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a 78  (D);const char*x
4990: 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  xs=(const char*)
49a0: 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20 20  (S);\.          
49b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
49c0: 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65 28  t xxn=(N);while(
49d0: 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b 29  xxn-->0)*(xxd++)
49e0: 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e 64  =*(xxs++);}.#end
49f0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f 6d  if../*.** If com
4a00: 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72 6f  piling for a pro
4a10: 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63 6b  cessor that lack
4a20: 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e 74  s floating point
4a30: 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75 62   support,.** sub
4a40: 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72 20  stitute integer 
4a50: 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f 69  for floating-poi
4a60: 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  nt.*/.#ifdef SQL
4a70: 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
4a80: 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e 65  G_POINT.# define
4a90: 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f 69   double sqlite_i
4aa0: 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66 6c  nt64.# define fl
4ab0: 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  oat sqlite_int64
4ac0: 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f  .# define LONGDO
4ad0: 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74 65  UBLE_TYPE sqlite
4ae0: 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66 20  _int64.# ifndef 
4af0: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
4b00: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
4b10: 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c 69  _BIG_DBL (((sqli
4b20: 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35 30  te3_int64)1)<<50
4b30: 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ).# endif.# defi
4b40: 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44  ne SQLITE_OMIT_D
4b50: 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31 0a  ATETIME_FUNCS 1.
4b60: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
4b70: 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20 75  OMIT_TRACE 1.# u
4b80: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58 45  ndef SQLITE_MIXE
4b90: 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f 46  D_ENDIAN_64BIT_F
4ba0: 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51 4c  LOAT.# undef SQL
4bb0: 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a 23  ITE_HAVE_ISNAN.#
4bc0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
4bd0: 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20 64  LITE_BIG_DBL.# d
4be0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
4bf0: 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e 64  _DBL (1e99).#end
4c00: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f 54  if../*.** OMIT_T
4c10: 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f 20  EMPDB is set to 
4c20: 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  1 if SQLITE_OMIT
4c30: 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69 6e  _TEMPDB is defin
4c40: 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74 65  ed, or 0.** afte
4c50: 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74 68  rward. Having th
4c60: 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73 20  is macro allows 
4c70: 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65 20  us to cause the 
4c80: 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74 6f  C compiler.** to
4c90: 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64 20   omit code used 
4ca0: 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20 77  by TEMP tables w
4cb0: 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69 66  ithout messy #if
4cc0: 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73 2e  ndef statements.
4cd0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
4ce0: 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23 64  E_OMIT_TEMPDB.#d
4cf0: 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44  efine OMIT_TEMPD
4d00: 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e  B 1.#else.#defin
4d10: 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30 0a  e OMIT_TEMPDB 0.
4d20: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
4d30: 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22 20  e "file format" 
4d40: 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e 74  number is an int
4d50: 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e 63  eger that is inc
4d60: 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76 65  remented wheneve
4d70: 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c 65  r.** the VDBE-le
4d80: 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74 20  vel file format 
4d90: 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66 6f  changes.  The fo
4da0: 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 64  llowing macros d
4db0: 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68 65  efine the.** the
4dc0: 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66 6f   default file fo
4dd0: 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61 74  rmat for new dat
4de0: 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20 6d  abases and the m
4df0: 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72 6d  aximum file form
4e00: 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20 6c  at.** that the l
4e10: 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64 2e  ibrary can read.
4e20: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
4e30: 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52 4d  TE_MAX_FILE_FORM
4e40: 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51 4c  AT 4.#ifndef SQL
4e50: 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c 45  ITE_DEFAULT_FILE
4e60: 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e 65  _FORMAT.# define
4e70: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
4e80: 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23 65  FILE_FORMAT 4.#e
4e90: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65  ndif../*.** Dete
4ea0: 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 72  rmine whether tr
4eb0: 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75 72  iggers are recur
4ec0: 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74 2e  sive by default.
4ed0: 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a 2a    This can be.**
4ee0: 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e 2d   changed at run-
4ef0: 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72 61  time using a pra
4f00: 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  gma..*/.#ifndef 
4f10: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 52  SQLITE_DEFAULT_R
4f20: 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45 52  ECURSIVE_TRIGGER
4f30: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
4f40: 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52 53  E_DEFAULT_RECURS
4f50: 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a 23  IVE_TRIGGERS 0.#
4f60: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  endif../*.** Pro
4f70: 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20 76  vide a default v
4f80: 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45 5f  alue for SQLITE_
4f90: 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63 61  TEMP_STORE in ca
4fa0: 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70 65  se it is not spe
4fb0: 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68 65  cified.** on the
4fc0: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a 2f   command-line.*/
4fd0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4fe0: 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65 66  TEMP_STORE.# def
4ff0: 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  ine SQLITE_TEMP_
5000: 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69 6e 65  STORE 1.# define
5010: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
5020: 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78 63 6c  RE_xc 1  /* Excl
5030: 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63  ude from ctime.c
5040: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
5050: 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20 68 61  * If no value ha
5060: 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65 64 20  s been provided 
5070: 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  for SQLITE_MAX_W
5080: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 6f  ORKER_THREADS, o
5090: 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45 5f 54  r if.** SQLITE_T
50a0: 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73 65 74  EMP_STORE is set
50b0: 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75 73 65   to 3 (never use
50c0: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
50d0: 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74 6f 20  ), set it.** to 
50e0: 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  zero..*/.#if SQL
50f0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
5100: 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48 52 45  3 || SQLITE_THRE
5110: 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e 64 65  ADSAFE==0.# unde
5120: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
5130: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
5140: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
5150: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 30  WORKER_THREADS 0
5160: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5170: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5180: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
5190: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
51a0: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38 0a 23  RKER_THREADS 8.#
51b0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
51c0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52  LITE_DEFAULT_WOR
51d0: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
51e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
51f0: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5200: 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 20  DS 0.#endif.#if 
5210: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
5220: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 53 51  ORKER_THREADS>SQ
5230: 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f  LITE_MAX_WORKER_
5240: 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65 66 20  THREADS.# undef 
5250: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
5260: 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65 66 69  R_THREADS.# defi
5270: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  ne SQLITE_MAX_WO
5280: 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53 51 4c  RKER_THREADS SQL
5290: 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b  ITE_DEFAULT_WORK
52a0: 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e 64 69  ER_THREADS.#endi
52b0: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
52c0: 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61 6c 6c  ault initial all
52d0: 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ocation for the 
52e0: 70 61 67 65 63 61 63 68 65 20 77 68 65 6e 20 75  pagecache when u
52f0: 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a 2a 2a  sing separate.**
5300: 20 70 61 67 65 63 61 63 68 65 73 20 66 6f 72 20   pagecaches for 
5310: 65 61 63 68 20 64 61 74 61 62 61 73 65 20 63 6f  each database co
5320: 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70 6f 73  nnection.  A pos
5330: 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69 73 20  itive number is 
5340: 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 6f 66  the.** number of
5350: 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67 61 74   pages.  A negat
5360: 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74 72 61  ive number N tra
5370: 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e 73 20  nslations means 
5380: 74 68 61 74 20 61 20 62 75 66 66 65 72 0a 2a 2a  that a buffer.**
5390: 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79 74 65   of -1024*N byte
53a0: 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 61  s is allocated a
53b0: 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73 20 6d  nd used for as m
53c0: 61 6e 79 20 70 61 67 65 73 20 61 73 20 69 74 20  any pages as it 
53d0: 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2a 0a 2a 2a  will hold..**.**
53e0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   The default val
53f0: 75 65 20 6f 66 20 22 32 30 22 20 77 61 73 20 63  ue of "20" was c
5400: 68 6f 6f 73 65 6e 20 74 6f 20 6d 69 6e 69 6d 69  hoosen to minimi
5410: 7a 65 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  ze the run-time 
5420: 6f 66 20 74 68 65 0a 2a 2a 20 73 70 65 65 64 74  of the.** speedt
5430: 65 73 74 31 20 74 65 73 74 20 70 72 6f 67 72 61  est1 test progra
5440: 6d 20 77 69 74 68 20 6f 70 74 69 6f 6e 73 3a 20  m with options: 
5450: 2d 2d 73 68 72 69 6e 6b 2d 6d 65 6d 6f 72 79 20  --shrink-memory 
5460: 2d 2d 72 65 70 72 65 70 61 72 65 0a 2a 2f 0a 23  --reprepare.*/.#
5470: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45  ifndef SQLITE_DE
5480: 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e 49  FAULT_PCACHE_INI
5490: 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  TSZ.# define SQL
54a0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43  ITE_DEFAULT_PCAC
54b0: 48 45 5f 49 4e 49 54 53 5a 20 32 30 0a 23 65 6e  HE_INITSZ 20.#en
54c0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43 20 64  dif../*.** GCC d
54d0: 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65 20 74  oes not define t
54e0: 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20 6d 61  he offsetof() ma
54f0: 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68 61 76  cro so we'll hav
5500: 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20 6f 75  e to do it.** ou
5510: 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69 66 6e  rselves..*/.#ifn
5520: 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23 64 65  def offsetof.#de
5530: 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28 53 54  fine offsetof(ST
5540: 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29 20 28  RUCTURE,FIELD) (
5550: 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26 28 28  (int)((char*)&((
5560: 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d 3e 46  STRUCTURE*)0)->F
5570: 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  IELD)).#endif../
5580: 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 63  *.** Macros to c
5590: 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d 20 61  ompute minimum a
55a0: 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20 74 77  nd maximum of tw
55b0: 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a 23 69  o numbers..*/.#i
55c0: 66 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65 66 69  fndef MIN.# defi
55d0: 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28 41 29  ne MIN(A,B) ((A)
55e0: 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a 23 65  <(B)?(A):(B)).#e
55f0: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d 41 58  ndif.#ifndef MAX
5600: 0a 23 20 64 65 66 69 6e 65 20 4d 41 58 28 41 2c  .# define MAX(A,
5610: 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41 29 3a  B) ((A)>(B)?(A):
5620: 28 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  (B)).#endif../*.
5630: 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62 6a 65  ** Swap two obje
5640: 63 74 73 20 6f 66 20 74 79 70 65 20 54 59 50 45  cts of type TYPE
5650: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 57 41  ..*/.#define SWA
5660: 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54 59 50  P(TYPE,A,B) {TYP
5670: 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d 74 3b  E t=A; A=B; B=t;
5680: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b 20 74  }../*.** Check t
5690: 6f 20 73 65 65 20 69 66 20 74 68 69 73 20 6d 61  o see if this ma
56a0: 63 68 69 6e 65 20 75 73 65 73 20 45 42 43 44 49  chine uses EBCDI
56b0: 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69 65 76  C.  (Yes, believ
56c0: 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74 2c 20  e it or.** not, 
56d0: 74 68 65 72 65 20 61 72 65 20 73 74 69 6c 6c 20  there are still 
56e0: 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74 68 65  machines out the
56f0: 72 65 20 74 68 61 74 20 75 73 65 20 45 42 43 44  re that use EBCD
5700: 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41 27 20  IC.).*/.#if 'A' 
5710: 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65 66 69  == '\301'.# defi
5720: 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44 49 43  ne SQLITE_EBCDIC
5730: 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e   1.#else.# defin
5740: 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49 20 31  e SQLITE_ASCII 1
5750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49  .#endif../*.** I
5760: 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f 77 6e  ntegers of known
5770: 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65 20 74   sizes.  These t
5780: 79 70 65 64 65 66 73 20 6d 69 67 68 74 20 63 68  ypedefs might ch
5790: 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69 74 65  ange for archite
57a0: 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72 65 20  ctures.** where 
57b0: 74 68 65 20 73 69 7a 65 73 20 76 65 72 79 2e 20  the sizes very. 
57c0: 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61   Preprocessor ma
57d0: 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c 61 62  cros are availab
57e0: 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65 0a 2a  le so that the.*
57f0: 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65 20 63  * types can be c
5800: 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65 64 65  onveniently rede
5810: 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69 6c 65  fined at compile
5820: 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74 68 69  -type.  Like thi
5830: 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20  s:.**.**        
5840: 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52 5f 54   cc '-DUINTPTR_T
5850: 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20 69 6e  YPE=long long in
5860: 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  t' ....*/.#ifnde
5870: 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a 23 20  f UINT32_TYPE.# 
5880: 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e 54 33  ifdef HAVE_UINT3
5890: 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 55 49  2_T.#  define UI
58a0: 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74 33 32  NT32_TYPE uint32
58b0: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
58c0: 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20  ine UINT32_TYPE 
58d0: 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23 20 65  unsigned int.# e
58e0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
58f0: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 0a  def UINT16_TYPE.
5900: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
5910: 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T16_T.#  define 
5920: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69 6e 74  UINT16_TYPE uint
5930: 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  16_t.# else.#  d
5940: 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50  efine UINT16_TYP
5950: 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f 72 74  E unsigned short
5960: 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e   int.# endif.#en
5970: 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e 54 31  dif.#ifndef INT1
5980: 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48  6_TYPE.# ifdef H
5990: 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20 20 64  AVE_INT16_T.#  d
59a0: 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59 50 45  efine INT16_TYPE
59b0: 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a   int16_t.# else.
59c0: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
59d0: 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74 0a 23  TYPE short int.#
59e0: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
59f0: 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45  fndef UINT8_TYPE
5a00: 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49  .# ifdef HAVE_UI
5a10: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5a20: 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e 74 38  UINT8_TYPE uint8
5a30: 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66  _t.# else.#  def
5a40: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
5a50: 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23 20 65  nsigned char.# e
5a60: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e  ndif.#endif.#ifn
5a70: 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a 23 20  def INT8_TYPE.# 
5a80: 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54 38 5f  ifdef HAVE_INT8_
5a90: 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 38  T.#  define INT8
5aa0: 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23 20 65  _TYPE int8_t.# e
5ab0: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5ac0: 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64 20 63  T8_TYPE signed c
5ad0: 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  har.# endif.#end
5ae0: 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e 47 44  if.#ifndef LONGD
5af0: 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64 65 66  OUBLE_TYPE.# def
5b00: 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54  ine LONGDOUBLE_T
5b10: 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c 65 0a  YPE long double.
5b20: 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66 20 73  #endif.typedef s
5b30: 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36 34 3b  qlite_int64 i64;
5b40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62            /* 8-b
5b50: 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74 65 67  yte signed integ
5b60: 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 73 71  er */.typedef sq
5b70: 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36 34 3b  lite_uint64 u64;
5b80: 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d 62 79           /* 8-by
5b90: 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 65  te unsigned inte
5ba0: 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20 55  ger */.typedef U
5bb0: 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32 3b 20  INT32_TYPE u32; 
5bc0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34 2d 62            /* 4-b
5bd0: 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  yte unsigned int
5be0: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5bf0: 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31 36 3b  UINT16_TYPE u16;
5c00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32 2d             /* 2-
5c10: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5c20: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5c30: 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31 36 3b   INT16_TYPE i16;
5c40: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 32              /* 2
5c50: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5c60: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5c70: 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b 20 20  UINT8_TYPE u8;  
5c80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 2d             /* 1-
5c90: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
5ca0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
5cb0: 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b 20 20   INT8_TYPE i8;  
5cc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
5cd0: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5ce0: 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 53  eger */../*.** S
5cf0: 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20 69 73  QLITE_MAX_U32 is
5d00: 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e 74 20   a u64 constant 
5d10: 74 68 61 74 20 69 73 20 74 68 65 20 6d 61 78 69  that is the maxi
5d20: 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a 2a 2a  mum u64 value.**
5d30: 20 74 68 61 74 20 63 61 6e 20 62 65 20 73 74 6f   that can be sto
5d40: 72 65 64 20 69 6e 20 61 20 75 33 32 20 77 69 74  red in a u32 wit
5d50: 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64 61 74  hout loss of dat
5d60: 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a 2a 2a  a.  The value.**
5d70: 20 69 73 20 30 78 30 30 30 30 30 30 30 30 66 66   is 0x00000000ff
5d80: 66 66 66 66 66 66 2e 20 20 42 75 74 20 62 65 63  ffffff.  But bec
5d90: 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73 20 6f  ause of quirks o
5da0: 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65 72 73  f some compilers
5db0: 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74 6f 20  , we.** have to 
5dc0: 73 70 65 63 69 66 79 20 74 68 65 20 76 61 6c 75  specify the valu
5dd0: 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20 69 6e  e in the less in
5de0: 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72 20 73  tuitive manner s
5df0: 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65  hown:.*/.#define
5e00: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5e10: 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33 32 29   ((((u64)1)<<32)
5e20: 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  -1)../*.** The d
5e30: 61 74 61 74 79 70 65 20 75 73 65 64 20 74 6f 20  atatype used to 
5e40: 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65 73 20  store estimates 
5e50: 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  of the number of
5e60: 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20 74 61   rows in a.** ta
5e70: 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20 20 54  ble or index.  T
5e80: 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  his is an unsign
5e90: 65 64 20 69 6e 74 65 67 65 72 20 74 79 70 65 2e  ed integer type.
5ea0: 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66 0a 2a    For 99.9% of.*
5eb0: 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61 20 33  * the world, a 3
5ec0: 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20 69 73  2-bit integer is
5ed0: 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20 42 75   sufficient.  Bu
5ee0: 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74 65 67  t a 64-bit integ
5ef0: 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  er.** can be use
5f00: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
5f10: 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a 2a 2f  e if desired..*/
5f20: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 36  .#ifdef SQLITE_6
5f30: 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79 70 65  4BIT_STATS. type
5f40: 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e 74 3b  def u64 tRowcnt;
5f50: 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20 6f 6e      /* 64-bit on
5f60: 6c 79 20 69 66 20 72 65 71 75 65 73 74 65 64 20  ly if requested 
5f70: 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  at compile-time 
5f80: 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65 64 65  */.#else. typede
5f90: 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b 20 20  f u32 tRowcnt;  
5fa0: 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73 20 74    /* 32-bit is t
5fb0: 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 65  he default */.#e
5fc0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73 74 69  ndif../*.** Esti
5fd0: 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69 65 73  mated quantities
5fe0: 20 75 73 65 64 20 66 6f 72 20 71 75 65 72 79 20   used for query 
5ff0: 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73 74 6f  planning are sto
6000: 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a 2a 2a  red as 16-bit.**
6010: 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20 46 6f   logarithms.  Fo
6020: 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20 74 68  r quantity X, th
6030: 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64 20 69  e value stored i
6040: 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20 20 54  s 10*log2(X).  T
6050: 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61 20 70  his.** gives a p
6060: 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20 6f 66  ossible range of
6070: 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70 72 6f   values of appro
6080: 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39 38 36  ximately 1.0e986
6090: 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a 20 42   to 1e-986..** B
60a0: 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64 20 76  ut the allowed v
60b0: 61 6c 75 65 73 20 61 72 65 20 22 67 72 61 69 6e  alues are "grain
60c0: 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79 20 76  y".  Not every v
60d0: 61 6c 75 65 20 69 73 20 72 65 70 72 65 73 65 6e  alue is represen
60e0: 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 65 78  table..** For ex
60f0: 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74 69 65  ample, quantitie
6100: 73 20 31 36 20 61 6e 64 20 31 37 20 61 72 65 20  s 16 and 17 are 
6110: 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74 65 64  both represented
6120: 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a 2a 20   by a LogEst.** 
6130: 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65 72 2c  of 40.  However,
6140: 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20 71 75   since LogEst qu
6150: 61 6e 74 69 74 69 65 73 20 61 72 65 20 73 75 70  antities are sup
6160: 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74 69 6d  pose to be estim
6170: 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65 78 61  ates,.** not exa
6180: 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69 73 20  ct values, this 
6190: 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73 20 6e  imprecision is n
61a0: 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a 2a 2a  ot a problem..**
61b0: 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69 73 20  .** "LogEst" is 
61c0: 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67 61 72  short for "Logar
61d0: 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74 65 22  ithmic Estimate"
61e0: 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c 65 73  ..**.** Examples
61f0: 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e 20 30  :.**      1 -> 0
6200: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 30                20
6210: 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20 20 20   -> 43          
6220: 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a 2a 20  10000 -> 132.** 
6230: 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20 20 20       2 -> 10    
6240: 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e 20 34           25 -> 4
6250: 36 20 20 20 20 20 20 20 20 20 20 32 35 30 30 30  6          25000
6260: 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20 20 20   -> 146.**      
6270: 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20 20 20  3 -> 16         
6280: 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20 20 20     100 -> 66    
6290: 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e 20 31      1000000 -> 1
62a0: 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d 3e 20  99.**      4 -> 
62b0: 32 30 20 20 20 20 20 20 20 20 20 20 20 31 30 30  20           100
62c0: 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20 20 31  0 -> 99        1
62d0: 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a 2a 2a  048576 -> 200.**
62e0: 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20 20 20       10 -> 33   
62f0: 20 20 20 20 20 20 20 20 31 30 32 34 20 2d 3e 20          1024 -> 
6300: 31 30 30 20 20 20 20 34 32 39 34 39 36 37 32 39  100    429496729
6310: 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a 20 54  6 -> 320.**.** T
6320: 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20 62 65  he LogEst can be
6330: 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69 6e 64   negative to ind
6340: 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e 61 6c  icate fractional
6350: 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78 61 6d   values..** Exam
6360: 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 30  ples:.**.**    0
6370: 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20 20 20  .5 -> -10       
6380: 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33 20 20      0.1 -> -33  
6390: 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d 3e 20        0.0625 -> 
63a0: 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66 20 49  -40.*/.typedef I
63b0: 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45 73 74  NT16_TYPE LogEst
63c0: 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65  ;../*.** Set the
63d0: 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20   SQLITE_PTRSIZE 
63e0: 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e 75 6d  macro to the num
63f0: 62 65 72 20 6f 66 20 62 79 74 65 73 20 69 6e 20  ber of bytes in 
6400: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
6410: 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54 52 53  ndef SQLITE_PTRS
6420: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
6430: 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45  (__SIZEOF_POINTE
6440: 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  R__).#   define 
6450: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 5f  SQLITE_PTRSIZE _
6460: 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45 52 5f  _SIZEOF_POINTER_
6470: 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  _.# elif defined
6480: 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20 64 65  (i386)     || de
6490: 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f 29 20  fined(__i386__) 
64a0: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f    || defined(_M_
64b0: 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a 20 20  IX86) ||    \.  
64c0: 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f       defined(_M_
64d0: 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  ARM)   || define
64e0: 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20 7c 7c  d(__arm__)    ||
64f0: 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 0a   defined(__x86).
6500: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
6510: 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20 65 6c  E_PTRSIZE 4.# el
6520: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
6530: 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38 0a 23  LITE_PTRSIZE 8.#
6540: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f   endif.#endif../
6550: 2a 20 54 68 65 20 75 70 74 72 20 74 79 70 65 20  * The uptr type 
6560: 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64 20 69  is an unsigned i
6570: 6e 74 65 67 65 72 20 6c 61 72 67 65 20 65 6e 6f  nteger large eno
6580: 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20 70 6f  ugh to hold a po
6590: 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64 65 66  inter.*/.#if def
65a0: 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49 4e 54  ined(HAVE_STDINT
65b0: 5f 48 29 0a 20 20 74 79 70 65 64 65 66 20 75 69  _H).  typedef ui
65c0: 6e 74 70 74 72 5f 74 20 75 70 74 72 3b 0a 23 65  ntptr_t uptr;.#e
65d0: 6c 69 66 20 53 51 4c 49 54 45 5f 50 54 52 53 49  lif SQLITE_PTRSI
65e0: 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64 65 66 20  ZE==4.  typedef 
65f0: 75 33 32 20 75 70 74 72 3b 0a 23 65 6c 73 65 0a  u32 uptr;.#else.
6600: 20 20 74 79 70 65 64 65 66 20 75 36 34 20 75 70    typedef u64 up
6610: 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  tr;.#endif../*.*
6620: 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 57 49 54  * The SQLITE_WIT
6630: 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63 72 6f  HIN(P,S,E) macro
6640: 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65 20 69   checks to see i
6650: 66 20 70 6f 69 6e 74 65 72 20 50 20 70 6f 69 6e  f pointer P poin
6660: 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74 68 69  ts to.** somethi
6670: 6e 67 20 62 65 74 77 65 65 6e 20 53 20 28 69 6e  ng between S (in
6680: 63 6c 75 73 69 76 65 29 20 61 6e 64 20 45 20 28  clusive) and E (
6690: 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a 0a 2a  exclusive)..**.*
66a0: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
66b0: 2c 20 53 20 69 73 20 61 20 62 75 66 66 65 72 20  , S is a buffer 
66c0: 61 6e 64 20 45 20 69 73 20 61 20 70 6f 69 6e 74  and E is a point
66d0: 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
66e0: 62 79 74 65 20 61 66 74 65 72 0a 2a 2a 20 74 68  byte after.** th
66f0: 65 20 65 6e 64 20 6f 66 20 62 75 66 66 65 72 20  e end of buffer 
6700: 53 2e 20 20 54 68 69 73 20 6d 61 63 72 6f 20 72  S.  This macro r
6710: 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 50  eturns true if P
6720: 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d 65 74   points to somet
6730: 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69 6e 65  hing.** containe
6740: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 75 66  d within the buf
6750: 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66 69 6e  fer S..*/.#defin
6760: 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49 4e 28  e SQLITE_WITHIN(
6770: 50 2c 53 2c 45 29 20 28 28 28 75 70 74 72 29 28  P,S,E) (((uptr)(
6780: 50 29 3e 3d 28 75 70 74 72 29 28 53 29 29 26 26  P)>=(uptr)(S))&&
6790: 28 28 75 70 74 72 29 28 50 29 3c 28 75 70 74 72  ((uptr)(P)<(uptr
67a0: 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a 20 4d  )(E))).../*.** M
67b0: 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69  acros to determi
67c0: 6e 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6d  ne whether the m
67d0: 61 63 68 69 6e 65 20 69 73 20 62 69 67 20 6f 72  achine is big or
67e0: 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e 2c 0a   little endian,.
67f0: 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72 20 6f  ** and whether o
6800: 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74 65 72  r not that deter
6810: 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75 6e 2d  mination is run-
6820: 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c 65 2d  time or compile-
6830: 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f 72 20  time..**.** For 
6840: 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e 63 65  best performance
6850: 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69 73 20  , an attempt is 
6860: 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20 61 74  made to guess at
6870: 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65 72 0a   the byte-order.
6880: 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65 70 72  ** using C-prepr
6890: 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73 2e 20  ocessor macros. 
68a0: 20 49 66 20 74 68 61 74 20 69 73 20 75 6e 73 75   If that is unsu
68b0: 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69 66 0a  ccessful, or if.
68c0: 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 42 59 54 45  ** -DSQLITE_BYTE
68d0: 4f 52 44 45 52 3d 30 20 69 73 20 73 65 74 2c 20  ORDER=0 is set, 
68e0: 74 68 65 6e 20 62 79 74 65 2d 6f 72 64 65 72 20  then byte-order 
68f0: 69 73 20 64 65 74 65 72 6d 69 6e 65 64 0a 2a 2a  is determined.**
6900: 20 61 74 20 72 75 6e 2d 74 69 6d 65 2e 0a 2a 2f   at run-time..*/
6910: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6920: 42 59 54 45 4f 52 44 45 52 0a 23 20 69 66 20 64  BYTEORDER.# if d
6930: 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20  efined(i386)    
6940: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33   || defined(__i3
6950: 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e  86__)   || defin
6960: 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20  ed(_M_IX86) ||  
6970: 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64    \.     defined
6980: 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64 65  (__x86_64) || de
6990: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f 5f  fined(__x86_64__
69a0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d 5f  ) || defined(_M_
69b0: 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20 20  X64)  ||    \.  
69c0: 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41 4d     defined(_M_AM
69d0: 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D64) || defined(
69e0: 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20 64  _M_ARM)     || d
69f0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20 20  efined(__x86)   
6a00: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
6a10: 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 0a 23 20  ined(__arm__).# 
6a20: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6a30: 42 59 54 45 4f 52 44 45 52 20 20 20 20 31 32 33  BYTEORDER    123
6a40: 34 0a 23 20 65 6c 69 66 20 64 65 66 69 6e 65 64  4.# elif defined
6a50: 28 73 70 61 72 63 29 20 20 20 20 7c 7c 20 64 65  (sparc)    || de
6a60: 66 69 6e 65 64 28 5f 5f 70 70 63 5f 5f 29 0a 23  fined(__ppc__).#
6a70: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6a80: 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34 33  _BYTEORDER    43
6a90: 32 31 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  21.# else.#   de
6aa0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45  fine SQLITE_BYTE
6ab0: 4f 52 44 45 52 20 30 0a 23 20 65 6e 64 69 66 0a  ORDER 0.# endif.
6ac0: 23 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54  #endif.#if SQLIT
6ad0: 45 5f 42 59 54 45 4f 52 44 45 52 3d 3d 34 33 32  E_BYTEORDER==432
6ae0: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
6af0: 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20 31  E_BIGENDIAN    1
6b00: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6b10: 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20 30 0a  _LITTLEENDIAN 0.
6b20: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
6b30: 55 54 46 31 36 4e 41 54 49 56 45 20 20 53 51 4c  UTF16NATIVE  SQL
6b40: 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65 6c 69  ITE_UTF16BE.#eli
6b50: 66 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  f SQLITE_BYTEORD
6b60: 45 52 3d 3d 31 32 33 34 0a 23 20 64 65 66 69 6e  ER==1234.# defin
6b70: 65 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49  e SQLITE_BIGENDI
6b80: 41 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65  AN    0.# define
6b90: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6ba0: 44 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20  DIAN 1.# define 
6bb0: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6bc0: 56 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36  VE  SQLITE_UTF16
6bd0: 4c 45 0a 23 65 6c 73 65 0a 23 20 69 66 64 65 66  LE.#else.# ifdef
6be0: 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
6bf0: 54 49 4f 4e 0a 20 20 63 6f 6e 73 74 20 69 6e 74  TION.  const int
6c00: 20 73 71 6c 69 74 65 33 6f 6e 65 20 3d 20 31 3b   sqlite3one = 1;
6c10: 0a 23 20 65 6c 73 65 0a 20 20 65 78 74 65 72 6e  .# else.  extern
6c20: 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69 74   const int sqlit
6c30: 65 33 6f 6e 65 3b 0a 23 20 65 6e 64 69 66 0a 23  e3one;.# endif.#
6c40: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
6c50: 49 47 45 4e 44 49 41 4e 20 20 20 20 28 2a 28 63  IGENDIAN    (*(c
6c60: 68 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f  har *)(&sqlite3o
6c70: 6e 65 29 3d 3d 30 29 0a 23 20 64 65 66 69 6e 65  ne)==0).# define
6c80: 20 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e   SQLITE_LITTLEEN
6c90: 44 49 41 4e 20 28 2a 28 63 68 61 72 20 2a 29 28  DIAN (*(char *)(
6ca0: 26 73 71 6c 69 74 65 33 6f 6e 65 29 3d 3d 31 29  &sqlite3one)==1)
6cb0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
6cc0: 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 28 53  _UTF16NATIVE  (S
6cd0: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 3f  QLITE_BIGENDIAN?
6ce0: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 3a 53  SQLITE_UTF16BE:S
6cf0: 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 29 0a 23  QLITE_UTF16LE).#
6d00: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e  endif../*.** Con
6d10: 73 74 61 6e 74 73 20 66 6f 72 20 74 68 65 20 6c  stants for the l
6d20: 61 72 67 65 73 74 20 61 6e 64 20 73 6d 61 6c 6c  argest and small
6d30: 65 73 74 20 70 6f 73 73 69 62 6c 65 20 36 34 2d  est possible 64-
6d40: 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
6d50: 65 72 73 2e 0a 2a 2a 20 54 68 65 73 65 20 6d 61  ers..** These ma
6d60: 63 72 6f 73 20 61 72 65 20 64 65 73 69 67 6e 65  cros are designe
6d70: 64 20 74 6f 20 77 6f 72 6b 20 63 6f 72 72 65 63  d to work correc
6d80: 74 6c 79 20 6f 6e 20 62 6f 74 68 20 33 32 2d 62  tly on both 32-b
6d90: 69 74 20 61 6e 64 20 36 34 2d 62 69 74 0a 2a 2a  it and 64-bit.**
6da0: 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2f 0a 23   compilers..*/.#
6db0: 64 65 66 69 6e 65 20 4c 41 52 47 45 53 54 5f 49  define LARGEST_I
6dc0: 4e 54 36 34 20 20 28 30 78 66 66 66 66 66 66 66  NT64  (0xfffffff
6dd0: 66 7c 28 28 28 69 36 34 29 30 78 37 66 66 66 66  f|(((i64)0x7ffff
6de0: 66 66 66 29 3c 3c 33 32 29 29 0a 23 64 65 66 69  fff)<<32)).#defi
6df0: 6e 65 20 53 4d 41 4c 4c 45 53 54 5f 49 4e 54 36  ne SMALLEST_INT6
6e00: 34 20 28 28 28 69 36 34 29 2d 31 29 20 2d 20 4c  4 (((i64)-1) - L
6e10: 41 52 47 45 53 54 5f 49 4e 54 36 34 29 0a 0a 2f  ARGEST_INT64)../
6e20: 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75 70 20 61 20  *.** Round up a 
6e30: 6e 75 6d 62 65 72 20 74 6f 20 74 68 65 20 6e 65  number to the ne
6e40: 78 74 20 6c 61 72 67 65 72 20 6d 75 6c 74 69 70  xt larger multip
6e50: 6c 65 20 6f 66 20 38 2e 20 20 54 68 69 73 20 69  le of 8.  This i
6e60: 73 20 75 73 65 64 0a 2a 2a 20 74 6f 20 66 6f 72  s used.** to for
6e70: 63 65 20 38 2d 62 79 74 65 20 61 6c 69 67 6e 6d  ce 8-byte alignm
6e80: 65 6e 74 20 6f 6e 20 36 34 2d 62 69 74 20 61 72  ent on 64-bit ar
6e90: 63 68 69 74 65 63 74 75 72 65 73 2e 0a 2a 2f 0a  chitectures..*/.
6ea0: 23 64 65 66 69 6e 65 20 52 4f 55 4e 44 38 28 78  #define ROUND8(x
6eb0: 29 20 20 20 20 20 28 28 28 78 29 2b 37 29 26 7e  )     (((x)+7)&~
6ec0: 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  7)../*.** Round 
6ed0: 64 6f 77 6e 20 74 6f 20 74 68 65 20 6e 65 61 72  down to the near
6ee0: 65 73 74 20 6d 75 6c 74 69 70 6c 65 20 6f 66 20  est multiple of 
6ef0: 38 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  8.*/.#define ROU
6f00: 4e 44 44 4f 57 4e 38 28 78 29 20 28 28 78 29 26  NDDOWN8(x) ((x)&
6f10: 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41 73 73 65 72  ~7)../*.** Asser
6f20: 74 20 74 68 61 74 20 74 68 65 20 70 6f 69 6e 74  t that the point
6f30: 65 72 20 58 20 69 73 20 61 6c 69 67 6e 65 64 20  er X is aligned 
6f40: 74 6f 20 61 6e 20 38 2d 62 79 74 65 20 62 6f 75  to an 8-byte bou
6f50: 6e 64 61 72 79 2e 20 20 54 68 69 73 0a 2a 2a 20  ndary.  This.** 
6f60: 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 6f 6e  macro is used on
6f70: 6c 79 20 77 69 74 68 69 6e 20 61 73 73 65 72 74  ly within assert
6f80: 28 29 20 74 6f 20 76 65 72 69 66 79 20 74 68 61  () to verify tha
6f90: 74 20 74 68 65 20 63 6f 64 65 20 67 65 74 73 0a  t the code gets.
6fa0: 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e 6d 65 6e 74  ** all alignment
6fb0: 20 72 65 73 74 72 69 63 74 69 6f 6e 73 20 63 6f   restrictions co
6fc0: 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 45 78 63  rrect..**.** Exc
6fd0: 65 70 74 2c 20 69 66 20 53 51 4c 49 54 45 5f 34  ept, if SQLITE_4
6fe0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
6ff0: 4c 4c 4f 43 20 69 73 20 64 65 66 69 6e 65 64 2c  LLOC is defined,
7000: 20 74 68 65 6e 20 74 68 65 0a 2a 2a 20 75 6e 64   then the.** und
7010: 65 72 6c 79 69 6e 67 20 6d 61 6c 6c 6f 63 28 29  erlying malloc()
7020: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
7030: 6d 69 67 68 74 20 72 65 74 75 72 6e 20 75 73 20  might return us 
7040: 34 2d 62 79 74 65 20 61 6c 69 67 6e 65 64 0a 2a  4-byte aligned.*
7050: 2a 20 70 6f 69 6e 74 65 72 73 2e 20 20 49 6e 20  * pointers.  In 
7060: 74 68 61 74 20 63 61 73 65 2c 20 6f 6e 6c 79 20  that case, only 
7070: 76 65 72 69 66 79 20 34 2d 62 79 74 65 20 61 6c  verify 4-byte al
7080: 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a 23 69 66 64  ignment..*/.#ifd
7090: 65 66 20 53 51 4c 49 54 45 5f 34 5f 42 59 54 45  ef SQLITE_4_BYTE
70a0: 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c 4c 4f 43 0a  _ALIGNED_MALLOC.
70b0: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
70c0: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
70d0: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
70e0: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 33 29 3d   - (char*)0)&3)=
70f0: 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  =0).#else.# defi
7100: 6e 65 20 45 49 47 48 54 5f 42 59 54 45 5f 41 4c  ne EIGHT_BYTE_AL
7110: 49 47 4e 4d 45 4e 54 28 58 29 20 20 20 28 28 28  IGNMENT(X)   (((
7120: 28 63 68 61 72 2a 29 28 58 29 20 2d 20 28 63 68  (char*)(X) - (ch
7130: 61 72 2a 29 30 29 26 37 29 3d 3d 30 29 0a 23 65  ar*)0)&7)==0).#e
7140: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 69 73 61  ndif../*.** Disa
7150: 62 6c 65 20 4d 4d 41 50 20 6f 6e 20 70 6c 61 74  ble MMAP on plat
7160: 66 6f 72 6d 73 20 77 68 65 72 65 20 69 74 20 69  forms where it i
7170: 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e 6f 74 20 77  s known to not w
7180: 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ork.*/.#if defin
7190: 65 64 28 5f 5f 4f 70 65 6e 42 53 44 5f 5f 29 20  ed(__OpenBSD__) 
71a0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 51 4e 58  || defined(__QNX
71b0: 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64 65 66 20 53  NTO__).# undef S
71c0: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
71d0: 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  IZE.# define SQL
71e0: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
71f0: 45 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  E 0.#endif../*.*
7200: 2a 20 44 65 66 61 75 6c 74 20 6d 61 78 69 6d 75  * Default maximu
7210: 6d 20 73 69 7a 65 20 6f 66 20 6d 65 6d 6f 72 79  m size of memory
7220: 20 75 73 65 64 20 62 79 20 6d 65 6d 6f 72 79 2d   used by memory-
7230: 6d 61 70 70 65 64 20 49 2f 4f 20 69 6e 20 74 68  mapped I/O in th
7240: 65 20 56 46 53 0a 2a 2f 0a 23 69 66 64 65 66 20  e VFS.*/.#ifdef 
7250: 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20 69 6e 63 6c  __APPLE__.# incl
7260: 75 64 65 20 3c 54 61 72 67 65 74 43 6f 6e 64 69  ude <TargetCondi
7270: 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23 65 6e 64 69  tionals.h>.#endi
7280: 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
7290: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23  _MAX_MMAP_SIZE.#
72a0: 20 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 6c 69   if defined(__li
72b0: 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  nux__) \.  || de
72c0: 66 69 6e 65 64 28 5f 57 49 4e 33 32 29 20 5c 0a  fined(_WIN32) \.
72d0: 20 20 7c 7c 20 28 64 65 66 69 6e 65 64 28 5f 5f    || (defined(__
72e0: 41 50 50 4c 45 5f 5f 29 20 26 26 20 64 65 66 69  APPLE__) && defi
72f0: 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f 29 29 20 5c  ned(__MACH__)) \
7300: 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f  .  || defined(__
7310: 73 75 6e 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  sun) \.  || defi
7320: 6e 65 64 28 5f 5f 46 72 65 65 42 53 44 5f 5f 29  ned(__FreeBSD__)
7330: 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65 64 28   \.  || defined(
7340: 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f 5f 29 0a 23  __DragonFly__).#
7350: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
7360: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 20 30  _MAX_MMAP_SIZE 0
7370: 78 37 66 66 66 30 30 30 30 20 20 2f 2a 20 32 31  x7fff0000  /* 21
7380: 34 37 34 31 38 31 31 32 20 2a 2f 0a 23 20 65 6c  47418112 */.# el
7390: 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  se.#   define SQ
73a0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
73b0: 5a 45 20 30 0a 23 20 65 6e 64 69 66 0a 23 20 64  ZE 0.# endif.# d
73c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
73d0: 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63 20 31 20  _MMAP_SIZE_xc 1 
73e0: 2f 2a 20 65 78 63 6c 75 64 65 20 66 72 6f 6d 20  /* exclude from 
73f0: 63 74 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69  ctime.c */.#endi
7400: 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64 65 66  f../*.** The def
7410: 61 75 6c 74 20 4d 4d 41 50 5f 53 49 5a 45 20 69  ault MMAP_SIZE i
7420: 73 20 7a 65 72 6f 20 6f 6e 20 61 6c 6c 20 70 6c  s zero on all pl
7430: 61 74 66 6f 72 6d 73 2e 20 20 4f 72 2c 20 65 76  atforms.  Or, ev
7440: 65 6e 20 69 66 20 61 20 6c 61 72 67 65 72 0a 2a  en if a larger.*
7450: 2a 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f 53  * default MMAP_S
7460: 49 5a 45 20 69 73 20 73 70 65 63 69 66 69 65 64  IZE is specified
7470: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
7480: 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74  , make sure that
7490: 20 69 74 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20   it does.** not 
74a0: 65 78 63 65 65 64 20 74 68 65 20 6d 61 78 69 6d  exceed the maxim
74b0: 75 6d 20 6d 6d 61 70 20 73 69 7a 65 2e 0a 2a 2f  um mmap size..*/
74c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
74d0: 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a  DEFAULT_MMAP_SIZ
74e0: 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  E.# define SQLIT
74f0: 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53  E_DEFAULT_MMAP_S
7500: 49 5a 45 20 30 0a 23 20 64 65 66 69 6e 65 20 53  IZE 0.# define S
7510: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
7520: 41 50 5f 53 49 5a 45 5f 78 63 20 31 20 20 2f 2a  AP_SIZE_xc 1  /*
7530: 20 45 78 63 6c 75 64 65 20 66 72 6f 6d 20 63 74   Exclude from ct
7540: 69 6d 65 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a  ime.c */.#endif.
7550: 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55  #if SQLITE_DEFAU
7560: 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e 53 51 4c  LT_MMAP_SIZE>SQL
7570: 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a  ITE_MAX_MMAP_SIZ
7580: 45 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  E.# undef SQLITE
7590: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
75a0: 5a 45 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  ZE.# define SQLI
75b0: 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f  TE_DEFAULT_MMAP_
75c0: 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d 41 58 5f  SIZE SQLITE_MAX_
75d0: 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e 64 69 66  MMAP_SIZE.#endif
75e0: 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20 6f 6e 65  ../*.** Only one
75f0: 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c   of SQLITE_ENABL
7600: 45 5f 53 54 41 54 33 20 6f 72 20 53 51 4c 49 54  E_STAT3 or SQLIT
7610: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 20 63  E_ENABLE_STAT4 c
7620: 61 6e 20 62 65 20 64 65 66 69 6e 65 64 2e 0a 2a  an be defined..*
7630: 2a 20 50 72 69 6f 72 69 74 79 20 69 73 20 67 69  * Priority is gi
7640: 76 65 6e 20 74 6f 20 53 51 4c 49 54 45 5f 45 4e  ven to SQLITE_EN
7650: 41 42 4c 45 5f 53 54 41 54 34 2e 20 20 49 66 20  ABLE_STAT4.  If 
7660: 65 69 74 68 65 72 20 61 72 65 20 64 65 66 69 6e  either are defin
7670: 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64 65 66 69  ed, also.** defi
7680: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
7690: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
76a0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
76b0: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 0a 23 20  _ENABLE_STAT4.# 
76c0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  undef SQLITE_ENA
76d0: 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65 66 69  BLE_STAT3.# defi
76e0: 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ne SQLITE_ENABLE
76f0: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 20  _STAT3_OR_STAT4 
7700: 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 45  1.#elif SQLITE_E
7710: 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64 65  NABLE_STAT3.# de
7720: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41 42  fine SQLITE_ENAB
7730: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
7740: 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54 45  4 1.#elif SQLITE
7750: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52  _ENABLE_STAT3_OR
7760: 5f 53 54 41 54 34 0a 23 20 75 6e 64 65 66 20 53  _STAT4.# undef S
7770: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
7780: 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 65 6e 64  T3_OR_STAT4.#end
7790: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c 45 43 54  if../*.** SELECT
77a0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 77 69  TRACE_ENABLED wi
77b0: 6c 6c 20 62 65 20 65 69 74 68 65 72 20 31 20 6f  ll be either 1 o
77c0: 72 20 30 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e  r 0 depending on
77d0: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 0a   whether or not.
77e0: 2a 2a 20 74 68 65 20 53 65 6c 65 63 74 20 71 75  ** the Select qu
77f0: 65 72 79 20 67 65 6e 65 72 61 74 6f 72 20 74 72  ery generator tr
7800: 61 63 69 6e 67 20 6c 6f 67 69 63 20 69 73 20 74  acing logic is t
7810: 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23 69 66  urned on..*/.#if
7820: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
7830: 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65  DEBUG) || define
7840: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
7850: 53 45 4c 45 43 54 54 52 41 43 45 29 0a 23 20 64  SELECTTRACE).# d
7860: 65 66 69 6e 65 20 53 45 4c 45 43 54 54 52 41 43  efine SELECTTRAC
7870: 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23 65 6c 73  E_ENABLED 1.#els
7880: 65 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43  e.# define SELEC
7890: 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 30  TTRACE_ENABLED 0
78a0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41  .#endif../*.** A
78b0: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
78c0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
78d0: 63 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f  cture is used to
78e0: 20 73 74 6f 72 65 20 74 68 65 20 62 75 73 79 2d   store the busy-
78f0: 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62  handler.** callb
7900: 61 63 6b 20 66 6f 72 20 61 20 67 69 76 65 6e 20  ack for a given 
7910: 73 71 6c 69 74 65 20 68 61 6e 64 6c 65 2e 0a 2a  sqlite handle..*
7920: 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69 74 65 2e  *.** The sqlite.
7930: 62 75 73 79 48 61 6e 64 6c 65 72 20 6d 65 6d 62  busyHandler memb
7940: 65 72 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65  er of the sqlite
7950: 20 73 74 72 75 63 74 20 63 6f 6e 74 61 69 6e 73   struct contains
7960: 20 74 68 65 20 62 75 73 79 0a 2a 2a 20 63 61 6c   the busy.** cal
7970: 6c 62 61 63 6b 20 66 6f 72 20 74 68 65 20 64 61  lback for the da
7980: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20 45  tabase handle. E
7990: 61 63 68 20 70 61 67 65 72 20 6f 70 65 6e 65 64  ach pager opened
79a0: 20 76 69 61 20 74 68 65 20 73 71 6c 69 74 65 0a   via the sqlite.
79b0: 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20 70 61 73  ** handle is pas
79c0: 73 65 64 20 61 20 70 6f 69 6e 74 65 72 20 74 6f  sed a pointer to
79d0: 20 73 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64   sqlite.busyHand
79e0: 6c 65 72 2e 20 54 68 65 20 62 75 73 79 2d 68 61  ler. The busy-ha
79f0: 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c 62 61 63  ndler.** callbac
7a00: 6b 20 69 73 20 63 75 72 72 65 6e 74 6c 79 20 69  k is currently i
7a10: 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66 72 6f 6d  nvoked only from
7a20: 20 77 69 74 68 69 6e 20 70 61 67 65 72 2e 63 2e   within pager.c.
7a30: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
7a40: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 42  ct BusyHandler B
7a50: 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73 74 72 75  usyHandler;.stru
7a60: 63 74 20 42 75 73 79 48 61 6e 64 6c 65 72 20 7b  ct BusyHandler {
7a70: 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e 63 29 28  .  int (*xFunc)(
7a80: 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20 20 2f 2a  void *,int);  /*
7a90: 20 54 68 65 20 62 75 73 79 20 63 61 6c 6c 62 61   The busy callba
7aa0: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41  ck */.  void *pA
7ab0: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
7ac0: 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67 20     /* First arg 
7ad0: 74 6f 20 62 75 73 79 20 63 61 6c 6c 62 61 63 6b  to busy callback
7ae0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75 73 79 3b   */.  int nBusy;
7af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b00: 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74 65 64 20   /* Incremented 
7b10: 77 69 74 68 20 65 61 63 68 20 62 75 73 79 20 63  with each busy c
7b20: 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  all */.};../*.**
7b30: 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 6d 61 73   Name of the mas
7b40: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
7b50: 6c 65 2e 20 20 54 68 65 20 6d 61 73 74 65 72 20  le.  The master 
7b60: 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 0a 2a  database table.*
7b70: 2a 20 69 73 20 61 20 73 70 65 63 69 61 6c 20 74  * is a special t
7b80: 61 62 6c 65 20 74 68 61 74 20 68 6f 6c 64 73 20  able that holds 
7b90: 74 68 65 20 6e 61 6d 65 73 20 61 6e 64 20 61 74  the names and at
7ba0: 74 72 69 62 75 74 65 73 20 6f 66 20 61 6c 6c 0a  tributes of all.
7bb0: 2a 2a 20 75 73 65 72 20 74 61 62 6c 65 73 20 61  ** user tables a
7bc0: 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a 2f 0a 23  nd indices..*/.#
7bd0: 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 4e 41  define MASTER_NA
7be0: 4d 45 20 20 20 20 20 20 20 22 73 71 6c 69 74 65  ME       "sqlite
7bf0: 5f 6d 61 73 74 65 72 22 0a 23 64 65 66 69 6e 65  _master".#define
7c00: 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e 41 4d   TEMP_MASTER_NAM
7c10: 45 20 20 22 73 71 6c 69 74 65 5f 74 65 6d 70 5f  E  "sqlite_temp_
7c20: 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a 2a 20 54  master"../*.** T
7c30: 68 65 20 72 6f 6f 74 2d 70 61 67 65 20 6f 66 20  he root-page of 
7c40: 74 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62  the master datab
7c50: 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f 0a 23 64  ase table..*/.#d
7c60: 65 66 69 6e 65 20 4d 41 53 54 45 52 5f 52 4f 4f  efine MASTER_ROO
7c70: 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  T       1../*.**
7c80: 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
7c90: 20 73 63 68 65 6d 61 20 74 61 62 6c 65 2e 0a 2a   schema table..*
7ca0: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
7cb0: 5f 54 41 42 4c 45 28 78 29 20 20 28 28 21 4f 4d  _TABLE(x)  ((!OM
7cc0: 49 54 5f 54 45 4d 50 44 42 29 26 26 28 78 3d 3d  IT_TEMPDB)&&(x==
7cd0: 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45 52 5f 4e  1)?TEMP_MASTER_N
7ce0: 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41 4d 45 29  AME:MASTER_NAME)
7cf0: 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e 76 65 6e  ../*.** A conven
7d00: 69 65 6e 63 65 20 6d 61 63 72 6f 20 74 68 61 74  ience macro that
7d10: 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
7d20: 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20  ber of elements 
7d30: 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61 79 2e 0a  in.** an array..
7d40: 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72 72 61 79  */.#define Array
7d50: 53 69 7a 65 28 58 29 20 20 20 20 28 28 69 6e 74  Size(X)    ((int
7d60: 29 28 73 69 7a 65 6f 66 28 58 29 2f 73 69 7a 65  )(sizeof(X)/size
7d70: 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f 2a 0a 2a  of(X[0])))../*.*
7d80: 2a 20 44 65 74 65 72 6d 69 6e 65 20 69 66 20 74  * Determine if t
7d90: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 61  he argument is a
7da0: 20 70 6f 77 65 72 20 6f 66 20 74 77 6f 0a 2a 2f   power of two.*/
7db0: 0a 23 64 65 66 69 6e 65 20 49 73 50 6f 77 65 72  .#define IsPower
7dc0: 4f 66 54 77 6f 28 58 29 20 28 28 28 58 29 26 28  OfTwo(X) (((X)&(
7dd0: 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a 2f 2a 0a  (X)-1))==0)../*.
7de0: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
7df0: 20 76 61 6c 75 65 20 61 73 20 61 20 64 65 73 74   value as a dest
7e00: 72 75 63 74 6f 72 20 6d 65 61 6e 73 20 74 6f 20  ructor means to 
7e10: 75 73 65 20 73 71 6c 69 74 65 33 44 62 46 72 65  use sqlite3DbFre
7e20: 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73 71 6c 69  e()..** The sqli
7e30: 74 65 33 44 62 46 72 65 65 28 29 20 72 6f 75 74  te3DbFree() rout
7e40: 69 6e 65 20 72 65 71 75 69 72 65 73 20 74 77 6f  ine requires two
7e50: 20 70 61 72 61 6d 65 74 65 72 73 20 69 6e 73 74   parameters inst
7e60: 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a 20 6f 6e  ead of the.** on
7e70: 65 20 70 61 72 61 6d 65 74 65 72 20 74 68 61 74  e parameter that
7e80: 20 64 65 73 74 72 75 63 74 6f 72 73 20 6e 6f 72   destructors nor
7e90: 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20 53 6f 20  mally want.  So 
7ea0: 77 65 20 68 61 76 65 20 74 6f 20 69 6e 74 72 6f  we have to intro
7eb0: 64 75 63 65 0a 2a 2a 20 74 68 69 73 20 6d 61 67  duce.** this mag
7ec0: 69 63 20 76 61 6c 75 65 20 74 68 61 74 20 74 68  ic value that th
7ed0: 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20 74 6f 20  e code knows to 
7ee0: 68 61 6e 64 6c 65 20 64 69 66 66 65 72 65 6e 74  handle different
7ef0: 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70 6f 69 6e  ly.  Any.** poin
7f00: 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b 20 68 65  ter will work he
7f10: 72 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 69 74  re as long as it
7f20: 20 69 73 20 64 69 73 74 69 6e 63 74 20 66 72 6f   is distinct fro
7f30: 6d 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 0a  m SQLITE_STATIC.
7f40: 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45 5f 54 52  ** and SQLITE_TR
7f50: 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23 64 65 66  ANSIENT..*/.#def
7f60: 69 6e 65 20 53 51 4c 49 54 45 5f 44 59 4e 41 4d  ine SQLITE_DYNAM
7f70: 49 43 20 20 20 28 28 73 71 6c 69 74 65 33 5f 64  IC   ((sqlite3_d
7f80: 65 73 74 72 75 63 74 6f 72 5f 74 79 70 65 29 73  estructor_type)s
7f90: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65  qlite3MallocSize
7fa0: 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e 20 53 51  )../*.** When SQ
7fb0: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 69 73  LITE_OMIT_WSD is
7fc0: 20 64 65 66 69 6e 65 64 2c 20 69 74 20 6d 65 61   defined, it mea
7fd0: 6e 73 20 74 68 61 74 20 74 68 65 20 74 61 72 67  ns that the targ
7fe0: 65 74 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 73  et platform does
7ff0: 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  .** not support 
8000: 57 72 69 74 61 62 6c 65 20 53 74 61 74 69 63 20  Writable Static 
8010: 44 61 74 61 20 28 57 53 44 29 20 73 75 63 68 20  Data (WSD) such 
8020: 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64 20 73 74  as global and st
8030: 61 74 69 63 20 76 61 72 69 61 62 6c 65 73 2e 0a  atic variables..
8040: 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62 6c 65 73  ** All variables
8050: 20 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20   must either be 
8060: 6f 6e 20 74 68 65 20 73 74 61 63 6b 20 6f 72 20  on the stack or 
8070: 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61 6c 6c 6f  dynamically allo
8080: 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a 20 74 68  cated from.** th
8090: 65 20 68 65 61 70 2e 20 20 57 68 65 6e 20 57 53  e heap.  When WS
80a0: 44 20 69 73 20 75 6e 73 75 70 70 6f 72 74 65 64  D is unsupported
80b0: 2c 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 64  , the variable d
80c0: 65 63 6c 61 72 61 74 69 6f 6e 73 20 73 63 61 74  eclarations scat
80d0: 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f 75 67 68  tered.** through
80e0: 6f 75 74 20 74 68 65 20 53 51 4c 69 74 65 20 63  out the SQLite c
80f0: 6f 64 65 20 6d 75 73 74 20 62 65 63 6f 6d 65 20  ode must become 
8100: 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73 74 65 61  constants instea
8110: 64 2e 20 20 54 68 65 20 53 51 4c 49 54 45 5f 57  d.  The SQLITE_W
8120: 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  SD.** macro is u
8130: 73 65 64 20 66 6f 72 20 74 68 69 73 20 70 75 72  sed for this pur
8140: 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e 73 74 65  pose.  And inste
8150: 61 64 20 6f 66 20 72 65 66 65 72 65 6e 63 69 6e  ad of referencin
8160: 67 20 74 68 65 20 76 61 72 69 61 62 6c 65 0a 2a  g the variable.*
8170: 2a 20 64 69 72 65 63 74 6c 79 2c 20 77 65 20 75  * directly, we u
8180: 73 65 20 69 74 73 20 63 6f 6e 73 74 61 6e 74 20  se its constant 
8190: 61 73 20 61 20 6b 65 79 20 74 6f 20 6c 6f 6f 6b  as a key to look
81a0: 75 70 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20  up the run-time 
81b0: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 62 75 66  allocated.** buf
81c0: 66 65 72 20 74 68 61 74 20 68 6f 6c 64 73 20 72  fer that holds r
81d0: 65 61 6c 20 76 61 72 69 61 62 6c 65 2e 20 20 54  eal variable.  T
81e0: 68 65 20 63 6f 6e 73 74 61 6e 74 20 69 73 20 61  he constant is a
81f0: 6c 73 6f 20 74 68 65 20 69 6e 69 74 69 61 6c 69  lso the initiali
8200: 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  zer.** for the r
8210: 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65  un-time allocate
8220: 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a 2a 2a 20  d buffer..**.** 
8230: 49 6e 20 74 68 65 20 75 73 75 61 6c 20 63 61 73  In the usual cas
8240: 65 20 77 68 65 72 65 20 57 53 44 20 69 73 20 73  e where WSD is s
8250: 75 70 70 6f 72 74 65 64 2c 20 74 68 65 20 53 51  upported, the SQ
8260: 4c 49 54 45 5f 57 53 44 20 61 6e 64 20 47 4c 4f  LITE_WSD and GLO
8270: 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73 20 62 65  BAL.** macros be
8280: 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61 6e 64 20  come no-ops and 
8290: 68 61 76 65 20 7a 65 72 6f 20 70 65 72 66 6f 72  have zero perfor
82a0: 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e 0a 2a 2f  mance impact..*/
82b0: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f  .#ifdef SQLITE_O
82c0: 4d 49 54 5f 57 53 44 0a 20 20 23 64 65 66 69 6e  MIT_WSD.  #defin
82d0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 63 6f 6e  e SQLITE_WSD con
82e0: 73 74 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f  st.  #define GLO
82f0: 42 41 4c 28 74 2c 76 29 20 28 2a 28 74 2a 29 73  BAL(t,v) (*(t*)s
8300: 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e 64 28  qlite3_wsd_find(
8310: 28 76 6f 69 64 2a 29 26 28 76 29 2c 20 73 69 7a  (void*)&(v), siz
8320: 65 6f 66 28 76 29 29 29 0a 20 20 23 64 65 66 69  eof(v))).  #defi
8330: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8340: 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c 28 73 74  Config GLOBAL(st
8350: 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
8360: 69 67 2c 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  ig, sqlite3Confi
8370: 67 29 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  g).  int sqlite3
8380: 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74 20 4e 2c  _wsd_init(int N,
8390: 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f 69 64 20   int J);.  void 
83a0: 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69 6e  *sqlite3_wsd_fin
83b0: 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e 74 20 4c  d(void *K, int L
83c0: 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69  );.#else.  #defi
83d0: 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 0a 20 20  ne SQLITE_WSD.  
83e0: 23 64 65 66 69 6e 65 20 47 4c 4f 42 41 4c 28 74  #define GLOBAL(t
83f0: 2c 76 29 20 76 0a 20 20 23 64 65 66 69 6e 65 20  ,v) v.  #define 
8400: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
8410: 66 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69  fig sqlite3Confi
8420: 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  g.#endif../*.** 
8430: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
8440: 63 72 6f 73 20 61 72 65 20 75 73 65 64 20 74 6f  cros are used to
8450: 20 73 75 70 70 72 65 73 73 20 63 6f 6d 70 69 6c   suppress compil
8460: 65 72 20 77 61 72 6e 69 6e 67 73 20 61 6e 64 20  er warnings and 
8470: 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74 20 63 6c  to.** make it cl
8480: 65 61 72 20 74 6f 20 68 75 6d 61 6e 20 72 65 61  ear to human rea
8490: 64 65 72 73 20 77 68 65 6e 20 61 20 66 75 6e 63  ders when a func
84a0: 74 69 6f 6e 20 70 61 72 61 6d 65 74 65 72 20 69  tion parameter i
84b0: 73 20 64 65 6c 69 62 65 72 61 74 65 6c 79 0a 2a  s deliberately.*
84c0: 2a 20 6c 65 66 74 20 75 6e 75 73 65 64 20 77 69  * left unused wi
84d0: 74 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66  thin the body of
84e0: 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20 54 68 69   a function. Thi
84f0: 73 20 75 73 75 61 6c 6c 79 20 68 61 70 70 65 6e  s usually happen
8500: 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66 75 6e 63  s when.** a func
8510: 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65 64 20 76  tion is called v
8520: 69 61 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 6f  ia a function po
8530: 69 6e 74 65 72 2e 20 46 6f 72 20 65 78 61 6d 70  inter. For examp
8540: 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70 6c 65 6d  le the.** implem
8550: 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 6e 20 53  entation of an S
8560: 51 4c 20 61 67 67 72 65 67 61 74 65 20 73 74 65  QL aggregate ste
8570: 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61 79 20 6e  p callback may n
8580: 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a 20 70 61  ot use the.** pa
8590: 72 61 6d 65 74 65 72 20 69 6e 64 69 63 61 74 69  rameter indicati
85a0: 6e 67 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ng the number of
85b0: 20 61 72 67 75 6d 65 6e 74 73 20 70 61 73 73 65   arguments passe
85c0: 64 20 74 6f 20 74 68 65 20 61 67 67 72 65 67 61  d to the aggrega
85d0: 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20 6b 6e 6f  te,.** if it kno
85e0: 77 73 20 74 68 61 74 20 74 68 69 73 20 69 73 20  ws that this is 
85f0: 65 6e 66 6f 72 63 65 64 20 65 6c 73 65 77 68 65  enforced elsewhe
8600: 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 61  re..**.** When a
8610: 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65   function parame
8620: 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ter is not used 
8630: 61 74 20 61 6c 6c 20 77 69 74 68 69 6e 20 74 68  at all within th
8640: 65 20 62 6f 64 79 20 6f 66 20 61 20 66 75 6e 63  e body of a func
8650: 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69 73 20 67  tion,.** it is g
8660: 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65 64 20 22  enerally named "
8670: 4e 6f 74 55 73 65 64 22 20 6f 72 20 22 4e 6f 74  NotUsed" or "Not
8680: 55 73 65 64 32 22 20 74 6f 20 6d 61 6b 65 20 74  Used2" to make t
8690: 68 69 6e 67 73 20 65 76 65 6e 20 63 6c 65 61 72  hings even clear
86a0: 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65 72 2c 20  er..** However, 
86b0: 74 68 65 73 65 20 6d 61 63 72 6f 73 20 6d 61 79  these macros may
86c0: 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74 6f   also be used to
86d0: 20 73 75 70 70 72 65 73 73 20 77 61 72 6e 69 6e   suppress warnin
86e0: 67 73 20 72 65 6c 61 74 65 64 20 74 6f 0a 2a 2a  gs related to.**
86f0: 20 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74   parameters that
8700: 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e 6f 74 20   may or may not 
8710: 62 65 20 75 73 65 64 20 64 65 70 65 6e 64 69 6e  be used dependin
8720: 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  g on compilation
8730: 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20 46 6f 72   options..** For
8740: 20 65 78 61 6d 70 6c 65 20 74 68 6f 73 65 20 70   example those p
8750: 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c 79 20 75  arameters only u
8760: 73 65 64 20 69 6e 20 61 73 73 65 72 74 28 29 20  sed in assert() 
8770: 73 74 61 74 65 6d 65 6e 74 73 2e 20 49 6e 20 74  statements. In t
8780: 68 65 73 65 0a 2a 2a 20 63 61 73 65 73 20 74 68  hese.** cases th
8790: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65  e parameters are
87a0: 20 6e 61 6d 65 64 20 61 73 20 70 65 72 20 74 68   named as per th
87b0: 65 20 75 73 75 61 6c 20 63 6f 6e 76 65 6e 74 69  e usual conventi
87c0: 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ons..*/.#define 
87d0: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
87e0: 28 78 29 20 28 76 6f 69 64 29 28 78 29 0a 23 64  (x) (void)(x).#d
87f0: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
8800: 41 4d 45 54 45 52 32 28 78 2c 79 29 20 55 4e 55  AMETER2(x,y) UNU
8810: 53 45 44 5f 50 41 52 41 4d 45 54 45 52 28 78 29  SED_PARAMETER(x)
8820: 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45  ,UNUSED_PARAMETE
8830: 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 77  R(y)../*.** Forw
8840: 61 72 64 20 72 65 66 65 72 65 6e 63 65 73 20 74  ard references t
8850: 6f 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2f 0a  o structures.*/.
8860: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
8870: 67 67 49 6e 66 6f 20 41 67 67 49 6e 66 6f 3b 0a  ggInfo AggInfo;.
8880: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 41  typedef struct A
8890: 75 74 68 43 6f 6e 74 65 78 74 20 41 75 74 68 43  uthContext AuthC
88a0: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
88b0: 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
88c0: 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66 6f 3b 0a  fo AutoincInfo;.
88d0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 42  typedef struct B
88e0: 69 74 76 65 63 20 42 69 74 76 65 63 3b 0a 74 79  itvec Bitvec;.ty
88f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
8900: 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b 0a 74 79  lSeq CollSeq;.ty
8910: 70 65 64 65 66 20 73 74 72 75 63 74 20 43 6f 6c  pedef struct Col
8920: 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74 79 70 65  umn Column;.type
8930: 64 65 66 20 73 74 72 75 63 74 20 44 62 20 44 62  def struct Db Db
8940: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8950: 20 53 63 68 65 6d 61 20 53 63 68 65 6d 61 3b 0a   Schema Schema;.
8960: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
8970: 78 70 72 20 45 78 70 72 3b 0a 74 79 70 65 64 65  xpr Expr;.typede
8980: 66 20 73 74 72 75 63 74 20 45 78 70 72 4c 69 73  f struct ExprLis
8990: 74 20 45 78 70 72 4c 69 73 74 3b 0a 74 79 70 65  t ExprList;.type
89a0: 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72 53  def struct ExprS
89b0: 70 61 6e 20 45 78 70 72 53 70 61 6e 3b 0a 74 79  pan ExprSpan;.ty
89c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 4b 65  pedef struct FKe
89d0: 79 20 46 4b 65 79 3b 0a 74 79 70 65 64 65 66 20  y FKey;.typedef 
89e0: 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74 72  struct FuncDestr
89f0: 75 63 74 6f 72 20 46 75 6e 63 44 65 73 74 72 75  uctor FuncDestru
8a00: 63 74 6f 72 3b 0a 74 79 70 65 64 65 66 20 73 74  ctor;.typedef st
8a10: 72 75 63 74 20 46 75 6e 63 44 65 66 20 46 75 6e  ruct FuncDef Fun
8a20: 63 44 65 66 3b 0a 74 79 70 65 64 65 66 20 73 74  cDef;.typedef st
8a30: 72 75 63 74 20 46 75 6e 63 44 65 66 48 61 73 68  ruct FuncDefHash
8a40: 20 46 75 6e 63 44 65 66 48 61 73 68 3b 0a 74 79   FuncDefHash;.ty
8a50: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 64 4c  pedef struct IdL
8a60: 69 73 74 20 49 64 4c 69 73 74 3b 0a 74 79 70 65  ist IdList;.type
8a70: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
8a80: 20 49 6e 64 65 78 3b 0a 74 79 70 65 64 65 66 20   Index;.typedef 
8a90: 73 74 72 75 63 74 20 49 6e 64 65 78 53 61 6d 70  struct IndexSamp
8aa0: 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c 65 3b 0a  le IndexSample;.
8ab0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4b  typedef struct K
8ac0: 65 79 43 6c 61 73 73 20 4b 65 79 43 6c 61 73 73  eyClass KeyClass
8ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ae0: 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49 6e 66 6f   KeyInfo KeyInfo
8af0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8b00: 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f 6f 6b 61   Lookaside Looka
8b10: 73 69 64 65 3b 0a 74 79 70 65 64 65 66 20 73 74  side;.typedef st
8b20: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c  ruct LookasideSl
8b30: 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  ot LookasideSlot
8b40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8b50: 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c 65 3b 0a   Module Module;.
8b60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 4e  typedef struct N
8b70: 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61 6d 65 43  ameContext NameC
8b80: 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64 65 66 20  ontext;.typedef 
8b90: 73 74 72 75 63 74 20 50 61 72 73 65 20 50 61 72  struct Parse Par
8ba0: 73 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  se;.typedef stru
8bb0: 63 74 20 50 72 65 55 70 64 61 74 65 20 50 72 65  ct PreUpdate Pre
8bc0: 55 70 64 61 74 65 3b 0a 74 79 70 65 64 65 66 20  Update;.typedef 
8bd0: 73 74 72 75 63 74 20 50 72 69 6e 74 66 41 72 67  struct PrintfArg
8be0: 75 6d 65 6e 74 73 20 50 72 69 6e 74 66 41 72 67  uments PrintfArg
8bf0: 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64 65 66 20  uments;.typedef 
8c00: 73 74 72 75 63 74 20 52 6f 77 53 65 74 20 52 6f  struct RowSet Ro
8c10: 77 53 65 74 3b 0a 74 79 70 65 64 65 66 20 73 74  wSet;.typedef st
8c20: 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74 20 53  ruct Savepoint S
8c30: 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70 65 64 65  avepoint;.typede
8c40: 66 20 73 74 72 75 63 74 20 53 65 6c 65 63 74 20  f struct Select 
8c50: 53 65 6c 65 63 74 3b 0a 74 79 70 65 64 65 66 20  Select;.typedef 
8c60: 73 74 72 75 63 74 20 53 51 4c 69 74 65 54 68 72  struct SQLiteThr
8c70: 65 61 64 20 53 51 4c 69 74 65 54 68 72 65 61 64  ead SQLiteThread
8c80: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8c90: 20 53 65 6c 65 63 74 44 65 73 74 20 53 65 6c 65   SelectDest Sele
8ca0: 63 74 44 65 73 74 3b 0a 74 79 70 65 64 65 66 20  ctDest;.typedef 
8cb0: 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 53  struct SrcList S
8cc0: 72 63 4c 69 73 74 3b 0a 74 79 70 65 64 65 66 20  rcList;.typedef 
8cd0: 73 74 72 75 63 74 20 53 74 72 41 63 63 75 6d 20  struct StrAccum 
8ce0: 53 74 72 41 63 63 75 6d 3b 0a 74 79 70 65 64 65  StrAccum;.typede
8cf0: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 20 54  f struct Table T
8d00: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
8d10: 72 75 63 74 20 54 61 62 6c 65 4c 6f 63 6b 20 54  ruct TableLock T
8d20: 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70 65 64 65  ableLock;.typede
8d30: 66 20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 54  f struct Token T
8d40: 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66 20 73 74  oken;.typedef st
8d50: 72 75 63 74 20 54 72 65 65 56 69 65 77 20 54 72  ruct TreeView Tr
8d60: 65 65 56 69 65 77 3b 0a 74 79 70 65 64 65 66 20  eeView;.typedef 
8d70: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 54  struct Trigger T
8d80: 72 69 67 67 65 72 3b 0a 74 79 70 65 64 65 66 20  rigger;.typedef 
8d90: 73 74 72 75 63 74 20 54 72 69 67 67 65 72 50 72  struct TriggerPr
8da0: 67 20 54 72 69 67 67 65 72 50 72 67 3b 0a 74 79  g TriggerPrg;.ty
8db0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8dc0: 67 67 65 72 53 74 65 70 20 54 72 69 67 67 65 72  ggerStep Trigger
8dd0: 53 74 65 70 3b 0a 74 79 70 65 64 65 66 20 73 74  Step;.typedef st
8de0: 72 75 63 74 20 55 6e 70 61 63 6b 65 64 52 65 63  ruct UnpackedRec
8df0: 6f 72 64 20 55 6e 70 61 63 6b 65 64 52 65 63 6f  ord UnpackedReco
8e00: 72 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rd;.typedef stru
8e10: 63 74 20 56 54 61 62 6c 65 20 56 54 61 62 6c 65  ct VTable VTable
8e20: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e30: 20 56 74 61 62 43 74 78 20 56 74 61 62 43 74 78   VtabCtx VtabCtx
8e40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e50: 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65 72 3b 0a   Walker Walker;.
8e60: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 57  typedef struct W
8e70: 68 65 72 65 49 6e 66 6f 20 57 68 65 72 65 49 6e  hereInfo WhereIn
8e80: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8e90: 63 74 20 57 69 74 68 20 57 69 74 68 3b 0a 0a 2f  ct With With;../
8ea0: 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a 65 63 74  * A VList object
8eb0: 20 72 65 63 6f 72 64 73 20 61 20 6d 61 70 70 69   records a mappi
8ec0: 6e 67 20 62 65 74 77 65 65 6e 20 70 61 72 61 6d  ng between param
8ed0: 65 74 65 72 73 2f 76 61 72 69 61 62 6c 65 73 2f  eters/variables/
8ee0: 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20 69 6e 20  wildcards.** in 
8ef0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
8f00: 74 20 28 73 75 63 68 20 61 73 20 24 61 62 63 2c  t (such as $abc,
8f10: 20 40 70 71 72 2c 20 6f 72 20 3a 78 79 7a 29 20   @pqr, or :xyz) 
8f20: 61 6e 64 20 74 68 65 20 69 6e 74 65 67 65 72 0a  and the integer.
8f30: 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e 75 6d 62  ** variable numb
8f40: 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
8f50: 74 68 20 74 68 61 74 20 70 61 72 61 6d 65 74 65  th that paramete
8f60: 72 2e 20 20 53 65 65 20 74 68 65 20 66 6f 72 6d  r.  See the form
8f70: 61 74 20 64 65 73 63 72 69 70 74 69 6f 6e 0a 2a  at description.*
8f80: 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33  * on the sqlite3
8f90: 56 4c 69 73 74 41 64 64 28 29 20 72 6f 75 74 69  VListAdd() routi
8fa0: 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f  ne for more info
8fb0: 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56 4c 69 73  rmation.  A VLis
8fc0: 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a 2a 20 6a  t is really.** j
8fd0: 75 73 74 20 61 6e 20 61 72 72 61 79 20 6f 66 20  ust an array of 
8fe0: 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a 74 79 70  integers..*/.typ
8ff0: 65 64 65 66 20 69 6e 74 20 56 4c 69 73 74 3b 0a  edef int VList;.
9000: 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20 73 6f 75  ./*.** Defer sou
9010: 72 63 69 6e 67 20 76 64 62 65 2e 68 20 61 6e 64  rcing vdbe.h and
9020: 20 62 74 72 65 65 2e 68 20 75 6e 74 69 6c 20 61   btree.h until a
9030: 66 74 65 72 20 74 68 65 20 22 75 38 22 20 61 6e  fter the "u8" an
9040: 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e 64 6c 65  d.** "BusyHandle
9050: 72 22 20 74 79 70 65 64 65 66 73 2e 20 76 64 62  r" typedefs. vdb
9060: 65 2e 68 20 61 6c 73 6f 20 72 65 71 75 69 72 65  e.h also require
9070: 73 20 61 20 66 65 77 20 6f 66 20 74 68 65 20 6f  s a few of the o
9080: 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e 74 65 72  paque.** pointer
9090: 20 74 79 70 65 73 20 28 69 2e 65 2e 20 46 75 6e   types (i.e. Fun
90a0: 63 44 65 66 29 20 64 65 66 69 6e 65 64 20 61 62  cDef) defined ab
90b0: 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65  ove..*/.#include
90c0: 20 22 62 74 72 65 65 2e 68 22 0a 23 69 6e 63 6c   "btree.h".#incl
90d0: 75 64 65 20 22 76 64 62 65 2e 68 22 0a 23 69 6e  ude "vdbe.h".#in
90e0: 63 6c 75 64 65 20 22 70 61 67 65 72 2e 68 22 0a  clude "pager.h".
90f0: 23 69 6e 63 6c 75 64 65 20 22 70 63 61 63 68 65  #include "pcache
9100: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6f 73  .h".#include "os
9110: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 6d 75  .h".#include "mu
9120: 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68 65 20 53  tex.h"../* The S
9130: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9140: 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  BLE compile-time
9150: 20 6f 70 74 69 6f 6e 20 75 73 65 64 20 74 6f 20   option used to 
9160: 73 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 0a  set the default.
9170: 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 73  ** synchronous s
9180: 65 74 74 69 6e 67 20 74 6f 20 45 58 54 52 41 2e  etting to EXTRA.
9190: 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65    It is no longe
91a0: 72 20 73 75 70 70 6f 72 74 65 64 2e 0a 2a 2f 0a  r supported..*/.
91b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 58  #ifdef SQLITE_EX
91c0: 54 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 77 61  TRA_DURABLE.# wa
91d0: 72 6e 69 6e 67 20 55 73 65 20 53 51 4c 49 54 45  rning Use SQLITE
91e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
91f0: 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61 64 20 6f  NOUS=3 instead o
9200: 66 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  f SQLITE_EXTRA_D
9210: 55 52 41 42 4c 45 0a 23 20 64 65 66 69 6e 65 20  URABLE.# define 
9220: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9230: 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a 23 65 6e  YNCHRONOUS 3.#en
9240: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75  dif../*.** Defau
9250: 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6c  lt synchronous l
9260: 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  evels..**.** Not
9270: 65 20 74 68 61 74 20 28 66 6f 72 20 68 69 73 74  e that (for hist
9280: 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73 29 20 74  orcal reasons) t
9290: 68 65 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f  he PAGER_SYNCHRO
92a0: 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73 20 64 69  NOUS_* macros di
92b0: 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20 74 68 65  ffer.** from the
92c0: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
92d0: 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76 61 6c 75  SYNCHRONOUS valu
92e0: 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a 20 20 20  e by 1..**.**   
92f0: 20 20 20 20 20 20 20 20 50 41 47 45 52 5f 53 59          PAGER_SY
9300: 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20 20 20 20  NCHRONOUS       
9310: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9320: 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20 20 20 20  OUS.**   OFF    
9330: 20 20 20 20 20 20 20 31 20 20 20 20 20 20 20 20         1        
9340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9350: 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41 4c 20 20   0.**   NORMAL  
9360: 20 20 20 20 20 20 32 20 20 20 20 20 20 20 20 20        2         
9370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9380: 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20 20 20 20  1.**   FULL     
9390: 20 20 20 20 20 33 20 20 20 20 20 20 20 20 20 20       3          
93a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
93b0: 0a 2a 2a 20 20 20 45 58 54 52 41 20 20 20 20 20  .**   EXTRA     
93c0: 20 20 20 20 34 20 20 20 20 20 20 20 20 20 20 20      4           
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 33 0a                3.
93e0: 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52 41 47 4d  **.** The "PRAGM
93f0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 22 20 73  A synchronous" s
9400: 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f 20 75 73  tatement also us
9410: 65 73 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65  es the zero-base
9420: 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a 20 49 6e  d numbers..** In
9430: 20 6f 74 68 65 72 20 77 6f 72 64 73 2c 20 74 68   other words, th
9440: 65 20 7a 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d  e zero-based num
9450: 62 65 72 73 20 61 72 65 20 75 73 65 64 20 66 6f  bers are used fo
9460: 72 20 61 6c 6c 20 65 78 74 65 72 6e 61 6c 20 69  r all external i
9470: 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20 61 6e 64  nterfaces.** and
9480: 20 74 68 65 20 6f 6e 65 2d 62 61 73 65 64 20 76   the one-based v
9490: 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 69  alues are used i
94a0: 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f 0a 23 69  nternally..*/.#i
94b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
94c0: 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  AULT_SYNCHRONOUS
94d0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
94e0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
94f0: 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66 0a 23 69  NOUS 2.#endif.#i
9500: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44 45 46  fndef SQLITE_DEF
9510: 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f  AULT_WAL_SYNCHRO
9520: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
9530: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
9540: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c  _SYNCHRONOUS SQL
9550: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
9560: 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a  HRONOUS.#endif..
9570: 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61 74 61 62  /*.** Each datab
9580: 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 61  ase file to be a
9590: 63 63 65 73 73 65 64 20 62 79 20 74 68 65 20 73  ccessed by the s
95a0: 79 73 74 65 6d 20 69 73 20 61 6e 20 69 6e 73 74  ystem is an inst
95b0: 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66  ance.** of the f
95c0: 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
95d0: 72 65 2e 20 20 54 68 65 72 65 20 61 72 65 20 6e  re.  There are n
95e0: 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74  ormally two of t
95f0: 68 65 73 65 20 73 74 72 75 63 74 75 72 65 73 0a  hese structures.
9600: 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65  ** in the sqlite
9610: 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e 20 20 61  .aDb[] array.  a
9620: 44 62 5b 30 5d 20 69 73 20 74 68 65 20 6d 61 69  Db[0] is the mai
9630: 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
9640: 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73  and.** aDb[1] is
9650: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
9660: 6c 65 20 75 73 65 64 20 74 6f 20 68 6f 6c 64 20  le used to hold 
9670: 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 73  temporary tables
9680: 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a  .  Additional.**
9690: 20 64 61 74 61 62 61 73 65 73 20 6d 61 79 20 62   databases may b
96a0: 65 20 61 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73  e attached..*/.s
96b0: 74 72 75 63 74 20 44 62 20 7b 0a 20 20 63 68 61  truct Db {.  cha
96c0: 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20  r *zDbSName;    
96d0: 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69    /* Name of thi
96e0: 73 20 64 61 74 61 62 61 73 65 2e 20 28 73 63 68  s database. (sch
96f0: 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69  ema name, not fi
9700: 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72  lename) */.  Btr
9710: 65 65 20 2a 70 42 74 3b 20 20 20 20 20 20 20 20  ee *pBt;        
9720: 20 20 2f 2a 20 54 68 65 20 42 2a 54 72 65 65 20    /* The B*Tree 
9730: 73 74 72 75 63 74 75 72 65 20 66 6f 72 20 74 68  structure for th
9740: 69 73 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  is database file
9750: 20 2a 2f 0a 20 20 75 38 20 73 61 66 65 74 79 5f   */.  u8 safety_
9760: 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f  level;     /* Ho
9770: 77 20 61 67 67 72 65 73 73 69 76 65 20 61 74 20  w aggressive at 
9780: 73 79 6e 63 69 6e 67 20 64 61 74 61 20 74 6f 20  syncing data to 
9790: 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79  disk */.  u8 bSy
97a0: 6e 63 53 65 74 3b 20 20 20 20 20 20 20 20 20 2f  ncSet;         /
97b0: 2a 20 54 72 75 65 20 69 66 20 22 50 52 41 47 4d  * True if "PRAGM
97c0: 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22  A synchronous=N"
97d0: 20 68 61 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f   has been run */
97e0: 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
97f0: 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74  ma;     /* Point
9800: 65 72 20 74 6f 20 64 61 74 61 62 61 73 65 20 73  er to database s
9810: 63 68 65 6d 61 20 28 70 6f 73 73 69 62 6c 79 20  chema (possibly 
9820: 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f  shared) */.};../
9830: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
9840: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
9850: 67 20 73 74 72 75 63 74 75 72 65 20 73 74 6f 72  g structure stor
9860: 65 73 20 61 20 64 61 74 61 62 61 73 65 20 73 63  es a database sc
9870: 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74  hema..**.** Most
9880: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
9890: 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  are associated w
98a0: 69 74 68 20 61 20 42 74 72 65 65 2e 20 20 54 68  ith a Btree.  Th
98b0: 65 20 65 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a  e exception is.*
98c0: 2a 20 74 68 65 20 53 63 68 65 6d 61 20 66 6f 72  * the Schema for
98d0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
98e0: 65 73 20 28 73 71 6c 69 74 65 33 2e 61 44 62 5b  es (sqlite3.aDb[
98f0: 31 5d 29 20 77 68 69 63 68 20 69 73 20 66 72 65  1]) which is fre
9900: 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49  e-standing..** I
9910: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
9920: 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65 20 53 63  ode, a single Sc
9930: 68 65 6d 61 20 6f 62 6a 65 63 74 20 63 61 6e 20  hema object can 
9940: 62 65 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c  be shared by mul
9950: 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20  tiple.** Btrees 
9960: 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
9970: 65 20 73 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e  e same underlyin
9980: 67 20 42 74 53 68 61 72 65 64 20 6f 62 6a 65 63  g BtShared objec
9990: 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20  t..**.** Schema 
99a0: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 75 74 6f  objects are auto
99b0: 6d 61 74 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f  matically deallo
99c0: 63 61 74 65 64 20 77 68 65 6e 20 74 68 65 20 6c  cated when the l
99d0: 61 73 74 20 42 74 72 65 65 20 74 68 61 74 0a 2a  ast Btree that.*
99e0: 2a 20 72 65 66 65 72 65 6e 63 65 73 20 74 68 65  * references the
99f0: 6d 20 69 73 20 64 65 73 74 72 6f 79 65 64 2e 20  m is destroyed. 
9a00: 20 20 54 68 65 20 54 45 4d 50 20 53 63 68 65 6d    The TEMP Schem
9a10: 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72  a is manually fr
9a20: 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65  eed by.** sqlite
9a30: 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20  3_close()..*.** 
9a40: 41 20 74 68 72 65 61 64 20 6d 75 73 74 20 62 65  A thread must be
9a50: 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78   holding a mutex
9a60: 20 6f 6e 20 74 68 65 20 63 6f 72 72 65 73 70 6f   on the correspo
9a70: 6e 64 69 6e 67 20 42 74 72 65 65 20 69 6e 20 6f  nding Btree in o
9a80: 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73  rder.** to acces
9a90: 73 20 53 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74  s Schema content
9aa0: 2e 20 20 54 68 69 73 20 69 6d 70 6c 69 65 73 20  .  This implies 
9ab0: 74 68 61 74 20 74 68 65 20 74 68 72 65 61 64 20  that the thread 
9ac0: 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20  must also be.** 
9ad0: 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20  holding a mutex 
9ae0: 6f 6e 20 74 68 65 20 73 71 6c 69 74 65 33 20 63  on the sqlite3 c
9af0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
9b00: 72 20 74 68 61 74 20 6f 77 6e 73 20 74 68 65 20  r that owns the 
9b10: 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20  Btree..** For a 
9b20: 54 45 4d 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c  TEMP Schema, onl
9b30: 79 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  y the connection
9b40: 20 6d 75 74 65 78 20 69 73 20 72 65 71 75 69 72   mutex is requir
9b50: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63  ed..*/.struct Sc
9b60: 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20 73 63 68  hema {.  int sch
9b70: 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a  ema_cookie;   /*
9b80: 20 44 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   Database schema
9b90: 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20   version number 
9ba0: 66 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f  for this file */
9bb0: 0a 20 20 69 6e 74 20 69 47 65 6e 65 72 61 74 69  .  int iGenerati
9bc0: 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65 6e 65 72  on;     /* Gener
9bd0: 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20  ation counter.  
9be0: 49 6e 63 72 65 6d 65 6e 74 65 64 20 77 69 74 68  Incremented with
9bf0: 20 65 61 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a   each change */.
9c00: 20 20 48 61 73 68 20 74 62 6c 48 61 73 68 3b 20    Hash tblHash; 
9c10: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61         /* All ta
9c20: 62 6c 65 73 20 69 6e 64 65 78 65 64 20 62 79 20  bles indexed by 
9c30: 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 69  name */.  Hash i
9c40: 64 78 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  dxHash;        /
9c50: 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e  * All (named) in
9c60: 64 69 63 65 73 20 69 6e 64 65 78 65 64 20 62 79  dices indexed by
9c70: 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20   name */.  Hash 
9c80: 74 72 69 67 48 61 73 68 3b 20 20 20 20 20 20 20  trigHash;       
9c90: 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  /* All triggers 
9ca0: 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20  indexed by name 
9cb0: 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65 79 48 61  */.  Hash fkeyHa
9cc0: 73 68 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  sh;       /* All
9cd0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 62 79   foreign keys by
9ce0: 20 72 65 66 65 72 65 6e 63 65 64 20 74 61 62 6c   referenced tabl
9cf0: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c  e name */.  Tabl
9d00: 65 20 2a 70 53 65 71 54 61 62 3b 20 20 20 20 20  e *pSeqTab;     
9d10: 20 2f 2a 20 54 68 65 20 73 71 6c 69 74 65 5f 73   /* The sqlite_s
9d20: 65 71 75 65 6e 63 65 20 74 61 62 6c 65 20 75 73  equence table us
9d30: 65 64 20 62 79 20 41 55 54 4f 49 4e 43 52 45 4d  ed by AUTOINCREM
9d40: 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65  ENT */.  u8 file
9d50: 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a  _format;      /*
9d60: 20 53 63 68 65 6d 61 20 66 6f 72 6d 61 74 20 76   Schema format v
9d70: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 69 73 20  ersion for this 
9d80: 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63  file */.  u8 enc
9d90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
9da0: 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
9db0: 75 73 65 64 20 62 79 20 74 68 69 73 20 64 61 74  used by this dat
9dc0: 61 62 61 73 65 20 2a 2f 0a 20 20 75 31 36 20 73  abase */.  u16 s
9dd0: 63 68 65 6d 61 46 6c 61 67 73 3b 20 20 20 20 20  chemaFlags;     
9de0: 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f 63 69 61  /* Flags associa
9df0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 73 63  ted with this sc
9e00: 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61  hema */.  int ca
9e10: 63 68 65 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f  che_size;      /
9e20: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * Number of page
9e30: 73 20 74 6f 20 75 73 65 20 69 6e 20 74 68 65 20  s to use in the 
9e40: 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cache */.};../*.
9e50: 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  ** These macros 
9e60: 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20 74  can be used to t
9e70: 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65  est, set, or cle
9e80: 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a 2a  ar bits in the.*
9e90: 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c  * Db.pSchema->fl
9ea0: 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
9eb0: 65 66 69 6e 65 20 44 62 48 61 73 50 72 6f 70 65  efine DbHasPrope
9ec0: 72 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28  rty(D,I,P)     (
9ed0: 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63  ((D)->aDb[I].pSc
9ee0: 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67  hema->schemaFlag
9ef0: 73 26 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65  s&(P))==(P)).#de
9f00: 66 69 6e 65 20 44 62 48 61 73 41 6e 79 50 72 6f  fine DbHasAnyPro
9f10: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 28 28  perty(D,I,P)  ((
9f20: 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68  (D)->aDb[I].pSch
9f30: 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73  ema->schemaFlags
9f40: 26 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e  &(P))!=0).#defin
9f50: 65 20 44 62 53 65 74 50 72 6f 70 65 72 74 79 28  e DbSetProperty(
9f60: 44 2c 49 2c 50 29 20 20 20 20 20 28 44 29 2d 3e  D,I,P)     (D)->
9f70: 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[I].pSchema->
9f80: 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29  schemaFlags|=(P)
9f90: 0a 23 64 65 66 69 6e 65 20 44 62 43 6c 65 61 72  .#define DbClear
9fa0: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
9fb0: 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53    (D)->aDb[I].pS
9fc0: 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61  chema->schemaFla
9fd0: 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20  gs&=~(P)../*.** 
9fe0: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
9ff0: 6f 72 20 74 68 65 20 44 42 2e 70 53 63 68 65 6d  or the DB.pSchem
a000: 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a  a->flags field..
a010: 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f 53 63 68  **.** The DB_Sch
a020: 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61 67 20 69  emaLoaded flag i
a030: 73 20 73 65 74 20 61 66 74 65 72 20 74 68 65 20  s set after the 
a040: 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
a050: 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64  has been.** read
a060: 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68   into internal h
a070: 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a  ash tables..**.*
a080: 2a 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77  * DB_UnresetView
a090: 73 20 6d 65 61 6e 73 20 74 68 61 74 20 6f 6e 65  s means that one
a0a0: 20 6f 72 20 6d 6f 72 65 20 76 69 65 77 73 20 68   or more views h
a0b0: 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ave column names
a0c0: 20 74 68 61 74 0a 2a 2a 20 68 61 76 65 20 62 65   that.** have be
a0d0: 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20  en filled out.  
a0e0: 49 66 20 74 68 65 20 73 63 68 65 6d 61 20 63 68  If the schema ch
a0f0: 61 6e 67 65 73 2c 20 74 68 65 73 65 20 63 6f 6c  anges, these col
a100: 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a  umn names might.
a110: 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e 64 20 73  ** changes and s
a120: 6f 20 74 68 65 20 76 69 65 77 20 77 69 6c 6c 20  o the view will 
a130: 6e 65 65 64 20 74 6f 20 62 65 20 72 65 73 65 74  need to be reset
a140: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f  ..*/.#define DB_
a150: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 20 20 20  SchemaLoaded    
a160: 30 78 30 30 30 31 20 20 2f 2a 20 54 68 65 20 73  0x0001  /* The s
a170: 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e 20 6c  chema has been l
a180: 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65  oaded */.#define
a190: 20 44 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73   DB_UnresetViews
a1a0: 20 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 53      0x0002  /* S
a1b0: 6f 6d 65 20 76 69 65 77 73 20 68 61 76 65 20 64  ome views have d
a1c0: 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61  efined column na
a1d0: 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44  mes */.#define D
a1e0: 42 5f 45 6d 70 74 79 20 20 20 20 20 20 20 20 20  B_Empty         
a1f0: 20 20 30 78 30 30 30 34 20 20 2f 2a 20 54 68 65    0x0004  /* The
a200: 20 66 69 6c 65 20 69 73 20 65 6d 70 74 79 20 28   file is empty (
a210: 6c 65 6e 67 74 68 20 30 20 62 79 74 65 73 29 20  length 0 bytes) 
a220: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75  */../*.** The nu
a230: 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65 6e  mber of differen
a240: 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e 67  t kinds of thing
a250: 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c 69  s that can be li
a260: 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74  mited.** using t
a270: 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74  he sqlite3_limit
a280: 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f  () interface..*/
a290: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
a2a0: 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45 5f  N_LIMIT (SQLITE_
a2b0: 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52  LIMIT_WORKER_THR
a2c0: 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c  EADS+1)../*.** L
a2d0: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a2e0: 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78 65  is a set of fixe
a2f0: 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20 74  d-size buffers t
a300: 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64 0a  hat can be used.
a310: 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73 6d  ** to satisfy sm
a320: 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d 65  all transient me
a330: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
a340: 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62 6a  requests for obj
a350: 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74  ects.** associat
a360: 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ed with a partic
a370: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
a380: 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20 75  nnection.  The u
a390: 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69  se of.** lookasi
a3a0: 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64  de malloc provid
a3b0: 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e 74  es a significant
a3c0: 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68   performance enh
a3d0: 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70  ancement.** (app
a3e0: 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f 69  rox 10%) by avoi
a3f0: 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61  ding numerous ma
a400: 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65 73  lloc/free reques
a410: 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67  ts while parsing
a420: 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  .** SQL statemen
a430: 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f  ts..**.** The Lo
a440: 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75 72  okaside structur
a450: 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72  e holds configur
a460: 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  ation informatio
a470: 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c  n about the.** l
a480: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
a490: 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63 68  subsystem.  Each
a4a0: 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72   available memor
a4b0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a  y allocation in.
a4c0: 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65  ** the lookaside
a4d0: 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73 74   subsystem is st
a4e0: 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64  ored on a linked
a4f0: 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69   list of Lookasi
a500: 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74  deSlot.** object
a510: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69  s..**.** Lookasi
a520: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
a530: 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20  re only allowed 
a540: 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61 74  for objects that
a550: 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64 0a   are associated.
a560: 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69 63  ** with a partic
a570: 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63 6f  ular database co
a580: 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65  nnection.  Hence
a590: 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  , schema informa
a5a0: 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62  tion cannot.** b
a5b0: 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b  e stored in look
a5c0: 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69 6e  aside because in
a5d0: 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f   shared cache mo
a5e0: 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69 6e  de the schema in
a5f0: 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20  formation.** is 
a600: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
a610: 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  le database conn
a620: 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65 66  ections.  Theref
a630: 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73 69  ore, while parsi
a640: 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66  ng.** schema inf
a650: 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f  ormation, the Lo
a660: 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65 64  okaside.bEnabled
a670: 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65 64   flag is cleared
a680: 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b   so that.** look
a690: 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e  aside allocation
a6a0: 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20 74  s are not used t
a6b0: 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65 20  o construct the 
a6c0: 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a  schema objects..
a6d0: 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73  */.struct Lookas
a6e0: 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69 73  ide {.  u32 bDis
a6f0: 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  able;           
a700: 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20  /* Only operate 
a710: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68  the lookaside wh
a720: 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36  en zero */.  u16
a730: 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20 20   sz;            
a740: 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
a750: 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20 62  each buffer in b
a760: 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61  ytes */.  u8 bMa
a770: 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20 20  lloced;         
a780: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53 74    /* True if pSt
a790: 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  art obtained fro
a7a0: 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63  m sqlite3_malloc
a7b0: 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74  () */.  int nOut
a7c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a7d0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75 66  /* Number of buf
a7e0: 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20 63  fers currently c
a7f0: 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20  hecked out */.  
a800: 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20 20  int mxOut;      
a810: 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68 77          /* Highw
a820: 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f  ater mark for nO
a830: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74  ut */.  int anSt
a840: 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20 20  at[3];          
a850: 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a 20  /* 0: hits.  1: 
a860: 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32 3a  size misses.  2:
a870: 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a   full misses */.
a880: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
a890: 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73  *pFree;   /* Lis
a8a0: 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 62  t of available b
a8b0: 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64  uffers */.  void
a8c0: 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20 20   *pStart;       
a8d0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79 74      /* First byt
a8e0: 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 6d  e of available m
a8f0: 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a 20  emory space */. 
a900: 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20 20   void *pEnd;    
a910: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
a920: 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64 20  t byte past end 
a930: 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70 61  of available spa
a940: 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20  ce */.};.struct 
a950: 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a  LookasideSlot {.
a960: 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20    LookasideSlot 
a970: 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65  *pNext;    /* Ne
a980: 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68 65  xt buffer in the
a990: 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62 75   list of free bu
a9a0: 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  ffers */.};../*.
a9b0: 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65 20  ** A hash table 
a9c0: 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e  for built-in fun
a9d0: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
a9e0: 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f 6e  s.  (Application
a9f0: 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63  -defined.** func
aa00: 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67 75  tions use a regu
aa10: 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65 20  lar table table 
aa20: 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a  from hash.h.).**
aa30: 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46 75  .** Hash each Fu
aa40: 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65 20  ncDef structure 
aa50: 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20  into one of the 
aa60: 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d 20  FuncDefHash.a[] 
aa70: 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73  slots..** Collis
aa80: 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65 20  ions are on the 
aa90: 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68 20  FuncDef.u.pHash 
aaa0: 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e  chain..*/.#defin
aab0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41  e SQLITE_FUNC_HA
aac0: 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74 20  SH_SZ 23.struct 
aad0: 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20 20  FuncDefHash {.  
aae0: 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49 54  FuncDef *a[SQLIT
aaf0: 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b  E_FUNC_HASH_SZ];
ab00: 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74         /* Hash t
ab10: 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69 6f  able for functio
ab20: 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66  ns */.};..#ifdef
ab30: 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54   SQLITE_USER_AUT
ab40: 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a  HENTICATION./*.*
ab50: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65  * Information he
ab60: 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69 74  ld in the "sqlit
ab70: 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f 6e  e3" database con
ab80: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61  nection object a
ab90: 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61  nd used.** to ma
aba0: 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65 6e  nage user authen
abb0: 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70  tication..*/.typ
abc0: 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c 69  edef struct sqli
abd0: 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71 6c  te3_userauth sql
abe0: 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a 73  ite3_userauth;.s
abf0: 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73  truct sqlite3_us
ac00: 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61 75  erauth {.  u8 au
ac10: 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20  thLevel;        
ac20: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 72           /* Curr
ac30: 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74 69  ent authenticati
ac40: 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e  on level */.  in
ac50: 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20 20  t nAuthPW;      
ac60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
ac70: 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74 68  ize of the zAuth
ac80: 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  PW in bytes */. 
ac90: 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b 20   char *zAuthPW; 
aca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
acb0: 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64 20  * Password used 
acc0: 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65 20  to authenticate 
acd0: 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74 68  */.  char *zAuth
ace0: 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20 20  User;           
acf0: 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20     /* User name 
ad00: 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74 69  used to authenti
ad10: 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41  cate */.};../* A
ad20: 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f  llowed values fo
ad30: 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61 75  r sqlite3_userau
ad40: 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a  th.authLevel */.
ad50: 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55 6e  #define UAUTH_Un
ad60: 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20 20  known     0     
ad70: 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69 6f  /* Authenticatio
ad80: 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b 65  n not yet checke
ad90: 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55  d */.#define UAU
ada0: 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20 31  TH_Fail        1
adb0: 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74       /* User aut
adc0: 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69 6c  hentication fail
add0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
ade0: 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20 20  UTH_User        
adf0: 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e 74  2     /* Authent
ae00: 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72 6d  icated as a norm
ae10: 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66 69  al user */.#defi
ae20: 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20 20  ne UAUTH_Admin  
ae30: 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41 75       3     /* Au
ae40: 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20 61  thenticated as a
ae50: 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 20  n administrator 
ae60: 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73  */../* Functions
ae70: 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75 73   used only by us
ae80: 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  er authorization
ae90: 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71   logic */.int sq
aea0: 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61 62  lite3UserAuthTab
aeb0: 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  le(const char*);
aec0: 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65 72  .int sqlite3User
aed0: 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73  AuthCheckLogin(s
aee0: 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
aef0: 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73  ar*,u8*);.void s
af00: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49 6e  qlite3UserAuthIn
af10: 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  it(sqlite3*);.vo
af20: 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74 46  id sqlite3CryptF
af30: 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  unc(sqlite3_cont
af40: 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
af50: 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64  _value**);..#end
af60: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45  if /* SQLITE_USE
af70: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
af80: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64   */../*.** typed
af90: 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68 6f  ef for the autho
afa0: 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63  rization callbac
afb0: 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  k function..*/.#
afc0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53 45  ifdef SQLITE_USE
afd0: 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e  R_AUTHENTICATION
afe0: 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28  .  typedef int (
aff0: 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28  *sqlite3_xauth)(
b000: 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
b010: 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72  char*,const char
b020: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20  *,const char*,. 
b030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
b050: 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
b060: 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20   char*);.#else. 
b070: 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73   typedef int (*s
b080: 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f  qlite3_xauth)(vo
b090: 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68  id*,int,const ch
b0a0: 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ar*,const char*,
b0b0: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
b0c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73              cons
b0e0: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66  t char*);.#endif
b0f0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b100: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
b110: 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20 65  ./* This is an e
b120: 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52 41 43  xtra SQLITE_TRAC
b130: 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69 6e 64  E macro that ind
b140: 69 63 61 74 65 73 20 22 6c 65 67 61 63 79 22 20  icates "legacy" 
b150: 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68  tracing.** in th
b160: 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c 69 74  e style of sqlit
b170: 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64  e3_trace().*/.#d
b180: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
b190: 43 45 5f 4c 45 47 41 43 59 20 20 30 78 38 30 0a  CE_LEGACY  0x80.
b1a0: 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53 51  #else.#define SQ
b1b0: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
b1c0: 59 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53  Y  0.#endif /* S
b1d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
b1e0: 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a  CATED */.../*.**
b1f0: 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 63   Each database c
b200: 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e 20  onnection is an 
b210: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
b220: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
b230: 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73  ure..*/.struct s
b240: 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69 74  qlite3 {.  sqlit
b250: 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20 20  e3_vfs *pVfs;   
b260: 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20 49           /* OS I
b270: 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 74  nterface */.  st
b280: 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62 65  ruct Vdbe *pVdbe
b290: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
b2a0: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76 69  ist of active vi
b2b0: 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a  rtual machines *
b2c0: 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66  /.  CollSeq *pDf
b2d0: 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20  ltColl;         
b2e0: 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c 74    /* The default
b2f0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
b300: 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a  nce (BINARY) */.
b310: 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20    sqlite3_mutex 
b320: 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  *mutex;         
b330: 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  /* Connection mu
b340: 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62  tex */.  Db *aDb
b350: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b360: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61         /* All ba
b370: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20  ckends */.  int 
b380: 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20  nDb;            
b390: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b3a0: 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73 20  ber of backends 
b3b0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65  currently in use
b3c0: 20 2a 2f 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b   */.  int flags;
b3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b3e0: 20 20 20 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e      /* Miscellan
b3f0: 65 6f 75 73 20 66 6c 61 67 73 2e 20 53 65 65 20  eous flags. See 
b400: 62 65 6c 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c  below */.  i64 l
b410: 61 73 74 52 6f 77 69 64 3b 20 20 20 20 20 20 20  astRowid;       
b420: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 4f 57 49           /* ROWI
b430: 44 20 6f 66 20 6d 6f 73 74 20 72 65 63 65 6e 74  D of most recent
b440: 20 69 6e 73 65 72 74 20 28 73 65 65 20 61 62 6f   insert (see abo
b450: 76 65 29 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d  ve) */.  i64 szM
b460: 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
b470: 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
b480: 74 20 6d 6d 61 70 5f 73 69 7a 65 20 73 65 74 74  t mmap_size sett
b490: 69 6e 67 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ing */.  unsigne
b4a0: 64 20 69 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b  d int openFlags;
b4b0: 20 20 20 20 20 20 20 2f 2a 20 46 6c 61 67 73 20         /* Flags 
b4c0: 70 61 73 73 65 64 20 74 6f 20 73 71 6c 69 74 65  passed to sqlite
b4d0: 33 5f 76 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f  3_vfs.xOpen() */
b4e0: 0a 20 20 69 6e 74 20 65 72 72 43 6f 64 65 3b 20  .  int errCode; 
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b500: 20 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20   /* Most recent 
b510: 65 72 72 6f 72 20 63 6f 64 65 20 28 53 51 4c 49  error code (SQLI
b520: 54 45 5f 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65  TE_*) */.  int e
b530: 72 72 4d 61 73 6b 3b 20 20 20 20 20 20 20 20 20  rrMask;         
b540: 20 20 20 20 20 20 20 20 20 2f 2a 20 26 20 72 65           /* & re
b550: 73 75 6c 74 20 63 6f 64 65 73 20 77 69 74 68 20  sult codes with 
b560: 74 68 69 73 20 62 65 66 6f 72 65 20 72 65 74 75  this before retu
b570: 72 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69  rning */.  int i
b580: 53 79 73 45 72 72 6e 6f 3b 20 20 20 20 20 20 20  SysErrno;       
b590: 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6e           /* Errn
b5a0: 6f 20 76 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73  o value from las
b5b0: 74 20 73 79 73 74 65 6d 20 65 72 72 6f 72 20 2a  t system error *
b5c0: 2f 0a 20 20 75 31 36 20 64 62 4f 70 74 46 6c 61  /.  u16 dbOptFla
b5d0: 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  gs;             
b5e0: 20 20 2f 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e    /* Flags to en
b5f0: 61 62 6c 65 2f 64 69 73 61 62 6c 65 20 6f 70 74  able/disable opt
b600: 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  imizations */.  
b610: 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20  u8 enc;         
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b630: 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a   Text encoding *
b640: 2f 0a 20 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69  /.  u8 autoCommi
b650: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
b660: 20 20 2f 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f    /* The auto-co
b670: 6d 6d 69 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20  mmit flag. */.  
b680: 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20  u8 temp_store;  
b690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b6a0: 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f   1: file 2: memo
b6b0: 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f  ry 0: default */
b6c0: 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c  .  u8 mallocFail
b6d0: 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
b6e0: 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65 20 68   /* True if we h
b6f0: 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f  ave seen a mallo
b700: 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75  c failure */.  u
b710: 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b  8 bBenignMalloc;
b720: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b730: 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65 20 4f  Do not require O
b740: 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  OMs if true */. 
b750: 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65   u8 dfltLockMode
b760: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
b770: 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e  * Default lockin
b780: 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74 61 63  g-mode for attac
b790: 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73 69 67  hed dbs */.  sig
b7a0: 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41 75 74  ned char nextAut
b7b0: 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20 41 75  ovac;      /* Au
b7c0: 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20 61 66  tovac setting af
b7d0: 74 65 72 20 56 41 43 55 55 4d 20 69 66 20 3e 3d  ter VACUUM if >=
b7e0: 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70 72 65  0 */.  u8 suppre
b7f0: 73 73 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  ssErr;          
b800: 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69       /* Do not i
b810: 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73 73 61  ssue error messa
b820: 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f 0a 20  ges if true */. 
b830: 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69   u8 vtabOnConfli
b840: 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ct;            /
b850: 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
b860: 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e  n for s3_vtab_on
b870: 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20  _conflict() */. 
b880: 20 75 38 20 69 73 54 72 61 6e 73 61 63 74 69 6f   u8 isTransactio
b890: 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f  nSavepoint;    /
b8a0: 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 6f 75  * True if the ou
b8b0: 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e  termost savepoin
b8c0: 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20 20 75  t is a TS */.  u
b8d0: 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20 20 20  8 mTrace;       
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
b8f0: 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c  zero or more SQL
b900: 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67 73 20  ITE_TRACE flags 
b910: 2a 2f 0a 20 20 75 38 20 73 6b 69 70 42 74 72 65  */.  u8 skipBtre
b920: 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  eMutex;         
b930: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 6e 6f     /* True if no
b940: 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 62 61   shared-cache ba
b950: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38 20 6e  ckends */.  u8 n
b960: 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20 20 20  SqlExec;        
b970: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
b980: 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67 20 4f  ber of pending O
b990: 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f 64 65  P_SqlExec opcode
b9a0: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78 74 50  s */.  int nextP
b9b0: 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20 20 20  agesize;        
b9c0: 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69 7a 65       /* Pagesize
b9d0: 20 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66   after VACUUM if
b9e0: 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d 61 67   >0 */.  u32 mag
b9f0: 69 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ic;             
ba00: 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69 63 20         /* Magic 
ba10: 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74 65 63  number for detec
ba20: 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75 73 65  t library misuse
ba30: 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61 6e 67   */.  int nChang
ba40: 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
ba50: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74      /* Value ret
ba60: 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33  urned by sqlite3
ba70: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
ba80: 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e 67 65  int nTotalChange
ba90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
baa0: 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   Value returned 
bab0: 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74 61 6c  by sqlite3_total
bac0: 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a 20 20  _changes() */.  
bad0: 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c 49 54  int aLimit[SQLIT
bae0: 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20 2f 2a  E_N_LIMIT];   /*
baf0: 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69 6e 74   Limits */.  int
bb00: 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61 70 3b   nMaxSorterMmap;
bb10: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
bb20: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 72 65  ximum size of re
bb30: 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62 79 20  gions mapped by 
bb40: 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74 72 75  sorter */.  stru
bb50: 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74 49 6e  ct sqlite3InitIn
bb60: 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49 6e 66  fo {      /* Inf
bb70: 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 64 75  ormation used du
bb80: 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
bb90: 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ion */.    int n
bba0: 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  ewTnum;         
bbb0: 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74 70 61         /* Rootpa
bbc0: 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65 69 6e  ge of table bein
bbd0: 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  g initialized */
bbe0: 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20 20 20  .    u8 iDb;    
bbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bc00: 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66 69 6c   /* Which db fil
bc10: 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69 74 69  e is being initi
bc20: 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20 75 38  alized */.    u8
bc30: 20 62 75 73 79 3b 20 20 20 20 20 20 20 20 20 20   busy;          
bc40: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 52 55            /* TRU
bc50: 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79 20 69  E if currently i
bc60: 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f 0a 20  nitializing */. 
bc70: 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72 69 67     u8 orphanTrig
bc80: 67 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ger;           /
bc90: 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65 6e 74  * Last statement
bca0: 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54 45 4d   is orphaned TEM
bcb0: 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 20  P trigger */.   
bcc0: 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61 62 6c   u8 imposterTabl
bcd0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
bce0: 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d 70 6f  Building an impo
bcf0: 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a 20 20  ster table */.  
bd00: 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20 6e 56  } init;.  int nV
bd10: 64 62 65 41 63 74 69 76 65 3b 20 20 20 20 20 20  dbeActive;      
bd20: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
bd30: 72 20 6f 66 20 56 44 42 45 73 20 63 75 72 72 65  r of VDBEs curre
bd40: 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a 2f 0a  ntly running */.
bd50: 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61 64 3b    int nVdbeRead;
bd60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bd70: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
bd80: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
bd90: 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a  ead or write */.
bda0: 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69 74 65    int nVdbeWrite
bdb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bdc0: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74  /* Number of act
bdd0: 69 76 65 20 56 44 42 45 73 20 74 68 61 74 20 72  ive VDBEs that r
bde0: 65 61 64 20 61 6e 64 20 77 72 69 74 65 20 2a 2f  ead and write */
bdf0: 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78 65 63  .  int nVdbeExec
be00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be10: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65   /* Number of ne
be20: 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20 56 64  sted calls to Vd
be30: 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20 69 6e  beExec() */.  in
be40: 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20 20 20  t nVDestroy;    
be50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
be60: 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20  umber of active 
be70: 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70 65 72  OP_VDestroy oper
be80: 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  ations */.  int 
be90: 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  nExtension;     
bea0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
beb0: 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20 65 78  ber of loaded ex
bec0: 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20 76 6f  tensions */.  vo
bed0: 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f 6e 3b  id **aExtension;
bee0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
bef0: 72 72 61 79 20 6f 66 20 73 68 61 72 65 64 20 6c  rray of shared l
bf00: 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73 20 2a  ibrary handles *
bf10: 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61 63 65  /.  int (*xTrace
bf20: 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f 69 64  )(u32,void*,void
bf30: 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20 2f 2a  *,void*);     /*
bf40: 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f 6e 20   Trace function 
bf50: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72 61 63  */.  void *pTrac
bf60: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  eArg;           
bf70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf80: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
bf90: 65 20 74 72 61 63 65 20 66 75 6e 63 74 69 6f 6e  e trace function
bfa0: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
bfb0: 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63 6f 6e  ofile)(void*,con
bfc0: 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b 20 20  st char*,u64);  
bfd0: 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66 75 6e  /* Profiling fun
bfe0: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
bff0: 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20 20 20  *pProfileArg;   
c000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c010: 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74       /* Argument
c020: 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75 6e 63   to profile func
c030: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
c040: 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20 20 20  pCommitArg;     
c050: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c060: 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f 6d 6d  rgument to xComm
c070: 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a  itCallback() */.
c080: 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69 74 43    int (*xCommitC
c090: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
c0a0: 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61      /* Invoked a
c0b0: 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20  t every commit. 
c0c0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f 6c 6c  */.  void *pRoll
c0d0: 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20  backArg;        
c0e0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c0f0: 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63 6b 43  nt to xRollbackC
c100: 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 76  allback() */.  v
c110: 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63 6b 43  oid (*xRollbackC
c120: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 29 3b  allback)(void*);
c130: 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65   /* Invoked at e
c140: 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a  very commit. */.
c150: 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74 65 41    void *pUpdateA
c160: 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78 55 70  rg;.  void (*xUp
c170: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 76 6f  dateCallback)(vo
c180: 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63  id*,int, const c
c190: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
c1a0: 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29 3b 0a  ,sqlite_int64);.
c1b0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
c1c0: 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48  ABLE_PREUPDATE_H
c1d0: 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50 72 65  OOK.  void *pPre
c1e0: 55 70 64 61 74 65 41 72 67 3b 20 20 20 20 20 20  UpdateArg;      
c1f0: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61 72 67      /* First arg
c200: 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55 70 64  ument to xPreUpd
c210: 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ateCallback */. 
c220: 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70 64 61   void (*xPreUpda
c230: 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20 20 2f  teCallback)(   /
c240: 2a 20 52 65 67 69 73 74 65 72 65 64 20 75 73 69  * Registered usi
c250: 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65 75 70  ng sqlite3_preup
c260: 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f 0a 20  date_hook() */. 
c270: 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33     void*,sqlite3
c280: 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e 73 74  *,int,char const
c290: 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 73 71  *,char const*,sq
c2a0: 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71 6c 69  lite3_int64,sqli
c2b0: 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b 0a 20  te3_int64.  );. 
c2c0: 20 50 72 65 55 70 64 61 74 65 20 2a 70 50 72 65   PreUpdate *pPre
c2d0: 55 70 64 61 74 65 3b 20 20 20 20 20 20 20 20 2f  Update;        /
c2e0: 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20 61 63  * Context for ac
c2f0: 74 69 76 65 20 70 72 65 2d 75 70 64 61 74 65 20  tive pre-update 
c300: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65 6e 64  callback */.#end
c310: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
c320: 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f 48 4f  BLE_PREUPDATE_HO
c330: 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  OK */.#ifndef SQ
c340: 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20  LITE_OMIT_WAL.  
c350: 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c 62 61  int (*xWalCallba
c360: 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71 6c 69  ck)(void *, sqli
c370: 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
c380: 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  r *, int);.  voi
c390: 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65 6e 64  d *pWalArg;.#end
c3a0: 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c  if.  void(*xColl
c3b0: 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c 73 71  Needed)(void*,sq
c3c0: 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78 74  lite3*,int eText
c3d0: 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  Rep,const char*)
c3e0: 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e  ;.  void(*xCollN
c3f0: 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a 2c 73  eeded16)(void*,s
c400: 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65 78  qlite3*,int eTex
c410: 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69 64 2a  tRep,const void*
c420: 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6c 6c  );.  void *pColl
c430: 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73 71 6c  NeededArg;.  sql
c440: 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45 72 72  ite3_value *pErr
c450: 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f  ;          /* Mo
c460: 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20  st recent error 
c470: 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75 6e 69  message */.  uni
c480: 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74 69 6c  on {.    volatil
c490: 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72 75 70  e int isInterrup
c4a0: 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69 66 20  ted; /* True if 
c4b0: 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75 70  sqlite3_interrup
c4c0: 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65  t has been calle
c4d0: 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c 65 20  d */.    double 
c4e0: 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20 20 20  notUsed1;       
c4f0: 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72 20 2a       /* Spacer *
c500: 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f 6f 6b  /.  } u1;.  Look
c510: 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64 65 3b  aside lookaside;
c520: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
c530: 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 63 6f  kaside malloc co
c540: 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f 0a 23  nfiguration */.#
c550: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c560: 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e  IT_AUTHORIZATION
c570: 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75 74 68  .  sqlite3_xauth
c580: 20 78 41 75 74 68 3b 20 20 20 20 20 20 20 20 20   xAuth;         
c590: 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74 68 6f   /* Access autho
c5a0: 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f  rization functio
c5b0: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75  n */.  void *pAu
c5c0: 74 68 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  thArg;          
c5d0: 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72 67 75       /* 1st argu
c5e0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63 63 65  ment to the acce
c5f0: 73 73 20 61 75 74 68 20 66 75 6e 63 74 69 6f 6e  ss auth function
c600: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
c610: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
c620: 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41 43 4b  ROGRESS_CALLBACK
c630: 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67 72 65  .  int (*xProgre
c640: 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20  ss)(void *);    
c650: 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65 73 73   /* The progress
c660: 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   callback */.  v
c670: 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73 41 72  oid *pProgressAr
c680: 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  g;           /* 
c690: 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  Argument to the 
c6a0: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
c6b0: 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  k */.  unsigned 
c6c0: 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20 20 20  nProgressOps;   
c6d0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
c6e0: 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20 70 72  f opcodes for pr
c6f0: 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20  ogress callback 
c700: 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
c710: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
c720: 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74  RTUALTABLE.  int
c730: 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20   nVTrans;       
c740: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c             /* Al
c750: 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f 66 20  located size of 
c760: 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48 61 73  aVTrans */.  Has
c770: 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20  h aModule;      
c780: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 6f             /* po
c790: 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c 69 74  pulated by sqlit
c7a0: 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65  e3_create_module
c7b0: 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74 78 20  () */.  VtabCtx 
c7c0: 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20 20 20  *pVtabCtx;      
c7d0: 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74        /* Context
c7e0: 20 66 6f 72 20 61 63 74 69 76 65 20 76 74 61 62   for active vtab
c7f0: 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74 65 20   connect/create 
c800: 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a 61 56  */.  VTable **aV
c810: 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20  Trans;          
c820: 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20 74 61     /* Virtual ta
c830: 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e 20 74  bles with open t
c840: 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  ransactions */. 
c850: 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63 6f 6e   VTable *pDiscon
c860: 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69 73 63  nect;    /* Disc
c870: 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69 6e 20  onnect these in 
c880: 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70 72 65  next sqlite3_pre
c890: 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64 69 66  pare() */.#endif
c8a0: 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b 20 20  .  Hash aFunc;  
c8b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c8c0: 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65 20 6f   /* Hash table o
c8d0: 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 75 6e  f connection fun
c8e0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61 73 68  ctions */.  Hash
c8f0: 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20 20 20   aCollSeq;      
c900: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c            /* All
c910: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
c920: 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79 48 61  nces */.  BusyHa
c930: 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64 6c 65  ndler busyHandle
c940: 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73 79 20  r;      /* Busy 
c950: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 44 62  callback */.  Db
c960: 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b 20 20   aDbStatic[2];  
c970: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
c980: 74 61 74 69 63 20 73 70 61 63 65 20 66 6f 72 20  tatic space for 
c990: 74 68 65 20 32 20 64 65 66 61 75 6c 74 20 62 61  the 2 default ba
c9a0: 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61 76 65  ckends */.  Save
c9b0: 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f 69 6e  point *pSavepoin
c9c0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73  t;        /* Lis
c9d0: 74 20 6f 66 20 61 63 74 69 76 65 20 73 61 76 65  t of active save
c9e0: 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20  points */.  int 
c9f0: 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20 20 20  busyTimeout;    
ca00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 75 73            /* Bus
ca10: 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65 6f 75  y handler timeou
ca20: 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a 20 20  t, in msec */.  
ca30: 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74 3b 20  int nSavepoint; 
ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ca50: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e 2d 74   Number of non-t
ca60: 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76 65 70  ransaction savep
ca70: 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  oints */.  int n
ca80: 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20 20 20  Statement;      
ca90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
caa0: 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73 74 61  er of nested sta
cab0: 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63 74 69  tement-transacti
cac0: 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20 6e 44  ons  */.  i64 nD
cad0: 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20 20 20  eferredCons;    
cae0: 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20 64          /* Net d
caf0: 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72 61 69  eferred constrai
cb00: 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73 61 63  nts this transac
cb10: 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34 20 6e  tion. */.  i64 n
cb20: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 3b  DeferredImmCons;
cb30: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74 20           /* Net 
cb40: 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64 69 61  deferred immedia
cb50: 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  te constraints *
cb60: 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74 65 73  /.  int *pnBytes
cb70: 46 72 65 65 64 3b 20 20 20 20 20 20 20 20 20 20  Freed;          
cb80: 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55 4c 4c    /* If not NULL
cb90: 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68 69 73  , increment this
cba0: 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a 2f 0a   in DbFree() */.
cbb0: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
cbc0: 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54 49  ABLE_UNLOCK_NOTI
cbd0: 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  FY.  /* The foll
cbe0: 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65 73 20  owing variables 
cbf0: 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63 74 65  are all protecte
cc00: 64 20 62 79 20 74 68 65 20 53 54 41 54 49 43 5f  d by the STATIC_
cc10: 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75 74 65  MASTER.  ** mute
cc20: 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69 74 65  x, not by sqlite
cc30: 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20 61 72  3.mutex. They ar
cc40: 65 20 75 73 65 64 20 62 79 20 63 6f 64 65 20 69  e used by code i
cc50: 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20 2a 2a  n notify.c..  **
cc60: 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 55 6e  .  ** When X.pUn
cc70: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d  lockConnection==
cc80: 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68  Y, that means th
cc90: 61 74 20 58 20 69 73 20 77 61 69 74 69 6e 67 20  at X is waiting 
cca0: 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20 75 6e  for Y to.  ** un
ccb0: 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69 74 20  lock so that it 
ccc0: 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20 20 2a  can proceed..  *
ccd0: 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70 42  *.  ** When X.pB
cce0: 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f  lockingConnectio
ccf0: 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73  n==Y, that means
cd00: 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e 67 20   that something 
cd10: 74 68 61 74 20 58 20 74 72 69 65 64 0a 20 20 2a  that X tried.  *
cd20: 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20 72 65  * tried to do re
cd30: 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20 77 69  cently failed wi
cd40: 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c 4f 43  th an SQLITE_LOC
cd50: 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20 74 6f  KED error due to
cd60: 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65 6c 64   locks.  ** held
cd70: 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20 73 71   by Y..  */.  sq
cd80: 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69 6e 67  lite3 *pBlocking
cd90: 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a 20 43  Connection; /* C
cda0: 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20 63  onnection that c
cdb0: 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c 4f 43  aused SQLITE_LOC
cdc0: 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  KED */.  sqlite3
cdd0: 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74   *pUnlockConnect
cde0: 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ion;           /
cdf0: 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  * Connection to 
ce00: 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f 63 6b  watch for unlock
ce10: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 6e 6c   */.  void *pUnl
ce20: 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20 20 20  ockArg;         
ce30: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
ce40: 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e 6c 6f  rgument to xUnlo
ce50: 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20 76 6f  ckNotify */.  vo
ce60: 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f 74 69  id (*xUnlockNoti
ce70: 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69 6e 74  fy)(void **, int
ce80: 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20 6e 6f  );  /* Unlock no
ce90: 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  tify callback */
cea0: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e 65 78  .  sqlite3 *pNex
ceb0: 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20 20 20  tBlocked;       
cec0: 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69 73 74   /* Next in list
ced0: 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65 64 20   of all blocked 
cee0: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f 0a 23  connections */.#
cef0: 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
cf00: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
cf10: 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65  ICATION.  sqlite
cf20: 33 5f 75 73 65 72 61 75 74 68 20 61 75 74 68 3b  3_userauth auth;
cf30: 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 72 20          /* User 
cf40: 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 69  authentication i
cf50: 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 23 65  nformation */.#e
cf60: 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  ndif.};../*.** A
cf70: 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63 6f 76   macro to discov
cf80: 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  er the encoding 
cf90: 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e 0a 2a  of a database..*
cfa0: 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45 4d 41  /.#define SCHEMA
cfb0: 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29 2d 3e  _ENC(db) ((db)->
cfc0: 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61 2d 3e  aDb[0].pSchema->
cfd0: 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45 4e 43  enc).#define ENC
cfe0: 28 64 62 29 20 20 20 20 20 20 20 20 28 28 64 62  (db)        ((db
cff0: 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a 20 50  )->enc)../*.** P
d000: 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66  ossible values f
d010: 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33 2e 66  or the sqlite3.f
d020: 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  lags..**.** Valu
d030: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
d040: 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
d050: 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 20 53  rt()):.**      S
d060: 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 20  QLITE_FullFSync 
d070: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46 55 4c      == PAGER_FUL
d080: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
d090: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
d0a0: 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43 4b 50  ync == PAGER_CKP
d0b0: 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  T_FULLFSYNC.**  
d0c0: 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63 68 65      SQLITE_Cache
d0d0: 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41 47 45  Spill    == PAGE
d0e0: 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a 2a 2f  R_CACHE_SPILL.*/
d0f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d100: 56 64 62 65 54 72 61 63 65 20 20 20 20 20 20 30  VdbeTrace      0
d110: 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20 54 72  x00000001  /* Tr
d120: 75 65 20 74 6f 20 74 72 61 63 65 20 56 44 42 45  ue to trace VDBE
d130: 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64   execution */.#d
d140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 6e 74  efine SQLITE_Int
d150: 65 72 6e 43 68 61 6e 67 65 73 20 20 30 78 30 30  ernChanges  0x00
d160: 30 30 30 30 30 32 20 20 2f 2a 20 55 6e 63 6f 6d  000002  /* Uncom
d170: 6d 69 74 74 65 64 20 48 61 73 68 20 74 61 62 6c  mitted Hash tabl
d180: 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64 65  e changes */.#de
d190: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c 6c  fine SQLITE_Full
d1a0: 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30 30 30  ColNames   0x000
d1b0: 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77 20 66  00004  /* Show f
d1c0: 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ull column names
d1d0: 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a 23 64   on SELECT */.#d
d1e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75 6c  efine SQLITE_Ful
d1f0: 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78 30 30  lFSync      0x00
d200: 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65 20 66  000008  /* Use f
d210: 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74 68 65  ull fsync on the
d220: 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64 65 66   backend */.#def
d230: 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70 74 46  ine SQLITE_CkptF
d240: 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30 30 30  ullFSync  0x0000
d250: 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66 75 6c  0010  /* Use ful
d260: 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68 65 63  l fsync for chec
d270: 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  kpoint */.#defin
d280: 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  e SQLITE_CacheSp
d290: 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30 30 30  ill     0x000000
d2a0: 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73 70 69  20  /* OK to spi
d2b0: 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65 20 2a  ll pager cache *
d2c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d2d0: 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 20  _ShortColNames  
d2e0: 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a 20 53  0x00000040  /* S
d2f0: 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75 6d 6e  how short column
d300: 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69  s names */.#defi
d310: 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52  ne SQLITE_CountR
d320: 6f 77 73 20 20 20 20 20 20 30 78 30 30 30 30 30  ows      0x00000
d330: 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20 72 6f  080  /* Count ro
d340: 77 73 20 63 68 61 6e 67 65 64 20 62 79 20 49 4e  ws changed by IN
d350: 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20 20 20  SERT, */.       
d360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d380: 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45 2c 20     /*   DELETE, 
d390: 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20 72 65  or UPDATE and re
d3a0: 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20 20 20  turn */.        
d3b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d3d0: 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75 6e 74    /*   the count
d3e0: 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62 61 63   using a callbac
d3f0: 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  k. */.#define SQ
d400: 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61 63  LITE_NullCallbac
d410: 6b 20 20 20 30 78 30 30 30 30 30 31 30 30 20 20  k   0x00000100  
d420: 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20 63 61  /* Invoke the ca
d430: 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66 20 74  llback once if t
d440: 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  he */.          
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d470: 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65 74 20  /*   result set 
d480: 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64 65 66  is empty */.#def
d490: 69 6e 65 20 53 51 4c 49 54 45 5f 53 71 6c 54 72  ine SQLITE_SqlTr
d4a0: 61 63 65 20 20 20 20 20 20 20 30 78 30 30 30 30  ace       0x0000
d4b0: 30 32 30 30 20 20 2f 2a 20 44 65 62 75 67 20 70  0200  /* Debug p
d4c0: 72 69 6e 74 20 53 51 4c 20 61 73 20 69 74 20 65  rint SQL as it e
d4d0: 78 65 63 75 74 65 73 20 2a 2f 0a 23 64 65 66 69  xecutes */.#defi
d4e0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  ne SQLITE_VdbeLi
d4f0: 73 74 69 6e 67 20 20 20 20 30 78 30 30 30 30 30  sting    0x00000
d500: 34 30 30 20 20 2f 2a 20 44 65 62 75 67 20 6c 69  400  /* Debug li
d510: 73 74 69 6e 67 73 20 6f 66 20 56 44 42 45 20 70  stings of VDBE p
d520: 72 6f 67 72 61 6d 73 20 2a 2f 0a 23 64 65 66 69  rograms */.#defi
d530: 6e 65 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  ne SQLITE_WriteS
d540: 63 68 65 6d 61 20 20 20 20 30 78 30 30 30 30 30  chema    0x00000
d550: 38 30 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 75 70  800  /* OK to up
d560: 64 61 74 65 20 53 51 4c 49 54 45 5f 4d 41 53 54  date SQLITE_MAST
d570: 45 52 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ER */.#define SQ
d580: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
d590: 61 63 65 20 30 78 30 30 30 30 31 30 30 30 20 20  ace 0x00001000  
d5a0: 2f 2a 20 54 72 61 63 65 20 73 71 6c 69 74 65 33  /* Trace sqlite3
d5b0: 56 64 62 65 41 64 64 4f 70 28 29 20 63 61 6c 6c  VdbeAddOp() call
d5c0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d5d0: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
d5e0: 20 20 20 30 78 30 30 30 30 32 30 30 30 20 20 2f     0x00002000  /
d5f0: 2a 20 44 6f 20 6e 6f 74 20 65 6e 66 6f 72 63 65  * Do not enforce
d600: 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61 69 6e   check constrain
d610: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
d620: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
d630: 74 74 65 64 20 30 78 30 30 30 34 30 30 30 20 20  tted 0x0004000  
d640: 2f 2a 20 46 6f 72 20 73 68 61 72 65 64 2d 63 61  /* For shared-ca
d650: 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23 64 65 66  che mode */.#def
d660: 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67 61 63  ine SQLITE_Legac
d670: 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30 30 30  yFileFmt  0x0000
d680: 38 30 30 30 20 20 2f 2a 20 43 72 65 61 74 65 20  8000  /* Create 
d690: 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 69 6e  new databases in
d6a0: 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23 64 65   format 1 */.#de
d6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 6f  fine SQLITE_Reco
d6c0: 76 65 72 79 4d 6f 64 65 20 20 20 30 78 30 30 30  veryMode   0x000
d6d0: 31 30 30 30 30 20 20 2f 2a 20 49 67 6e 6f 72 65  10000  /* Ignore
d6e0: 20 73 63 68 65 6d 61 20 65 72 72 6f 72 73 20 2a   schema errors *
d6f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d700: 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20 20  _ReverseOrder   
d710: 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a 20 52  0x00020000  /* R
d720: 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64  everse unordered
d730: 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66   SELECTs */.#def
d740: 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72  ine SQLITE_RecTr
d750: 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30 34  iggers    0x0004
d760: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
d770: 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67 65  recursive trigge
d780: 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  rs */.#define SQ
d790: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
d7a0: 20 20 20 20 30 78 30 30 30 38 30 30 30 30 20 20      0x00080000  
d7b0: 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69  /* Enforce forei
d7c0: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
d7d0: 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ts  */.#define S
d7e0: 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20  QLITE_AutoIndex 
d7f0: 20 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20       0x00100000 
d800: 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d   /* Enable autom
d810: 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a  atic indexes */.
d820: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
d830: 72 65 66 65 72 42 75 69 6c 74 69 6e 20 20 30 78  referBuiltin  0x
d840: 30 30 32 30 30 30 30 30 20 20 2f 2a 20 50 72 65  00200000  /* Pre
d850: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
d860: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
d870: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61 64  fine SQLITE_Load
d880: 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30 34  Extension  0x004
d890: 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  00000  /* Enable
d8a0: 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e 20   load_extension 
d8b0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d8c0: 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20 20  E_LoadExtFunc   
d8d0: 20 30 78 30 30 38 30 30 30 30 30 20 20 2f 2a 20   0x00800000  /* 
d8e0: 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65  Enable load_exte
d8f0: 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e 63  nsion() SQL func
d900: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d910: 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65 72  TE_EnableTrigger
d920: 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f 2a    0x01000000  /*
d930: 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20   True to enable 
d940: 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65 66  triggers */.#def
d950: 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65 72  ine SQLITE_Defer
d960: 46 4b 73 20 20 20 20 20 20 20 30 78 30 32 30 30  FKs       0x0200
d970: 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20 61  0000  /* Defer a
d980: 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  ll FK constraint
d990: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d9a0: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20 20  ITE_QueryOnly   
d9b0: 20 20 20 30 78 30 34 30 30 30 30 30 30 20 20 2f     0x04000000  /
d9c0: 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62 61  * Disable databa
d9d0: 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23 64  se changes */.#d
d9e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62  efine SQLITE_Vdb
d9f0: 65 45 51 50 20 20 20 20 20 20 20 20 30 78 30 38  eEQP        0x08
da00: 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75 67  000000  /* Debug
da10: 20 45 58 50 4c 41 49 4e 20 51 55 45 52 59 20 50   EXPLAIN QUERY P
da20: 4c 41 4e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  LAN */.#define S
da30: 51 4c 49 54 45 5f 56 61 63 75 75 6d 20 20 20 20  QLITE_Vacuum    
da40: 20 20 20 20 20 30 78 31 30 30 30 30 30 30 30 20       0x10000000 
da50: 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20 69 6e   /* Currently in
da60: 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 23 64 65   a VACUUM */.#de
da70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65 6c 6c  fine SQLITE_Cell
da80: 53 69 7a 65 43 6b 20 20 20 20 20 30 78 32 30 30  SizeCk     0x200
da90: 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63 6b 20  00000  /* Check 
daa0: 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a 65 73  btree cell sizes
dab0: 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64 65 66   on load */.#def
dac0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73 33 54  ine SQLITE_Fts3T
dad0: 6f 6b 65 6e 69 7a 65 72 20 20 30 78 34 30 30 30  okenizer  0x4000
dae0: 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20  0000  /* Enable 
daf0: 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72 28 32  fts3_tokenizer(2
db00: 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ) */.#define SQL
db10: 49 54 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73  ITE_NoCkptOnClos
db20: 65 20 20 30 78 38 30 30 30 30 30 30 30 20 20 2f  e  0x80000000  /
db30: 2a 20 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20  * No checkpoint 
db40: 6f 6e 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43  on close()/DETAC
db50: 48 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 42 69 74  H */.../*.** Bit
db60: 73 20 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33  s of the sqlite3
db70: 2e 64 62 4f 70 74 46 6c 61 67 73 20 66 69 65 6c  .dbOptFlags fiel
db80: 64 20 74 68 61 74 20 61 72 65 20 75 73 65 64 20  d that are used 
db90: 62 79 20 74 68 65 0a 2a 2a 20 73 71 6c 69 74 65  by the.** sqlite
dba0: 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c 28 53  3_test_control(S
dbb0: 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 4f  QLITE_TESTCTRL_O
dbc0: 50 54 49 4d 49 5a 41 54 49 4f 4e 53 2c 2e 2e 2e  PTIMIZATIONS,...
dbd0: 29 20 69 6e 74 65 72 66 61 63 65 20 74 6f 0a 2a  ) interface to.*
dbe0: 2a 20 73 65 6c 65 63 74 69 76 65 6c 79 20 64 69  * selectively di
dbf0: 73 61 62 6c 65 20 76 61 72 69 6f 75 73 20 6f 70  sable various op
dc00: 74 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2f 0a  timizations..*/.
dc10: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
dc20: 75 65 72 79 46 6c 61 74 74 65 6e 65 72 20 30 78  ueryFlattener 0x
dc30: 30 30 30 31 20 20 20 2f 2a 20 51 75 65 72 79 20  0001   /* Query 
dc40: 66 6c 61 74 74 65 6e 69 6e 67 20 2a 2f 0a 23 64  flattening */.#d
dc50: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 6c  efine SQLITE_Col
dc60: 75 6d 6e 43 61 63 68 65 20 20 20 20 30 78 30 30  umnCache    0x00
dc70: 30 32 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 63  02   /* Column c
dc80: 61 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ache */.#define 
dc90: 53 51 4c 49 54 45 5f 47 72 6f 75 70 42 79 4f 72  SQLITE_GroupByOr
dca0: 64 65 72 20 20 20 30 78 30 30 30 34 20 20 20 2f  der   0x0004   /
dcb0: 2a 20 47 52 4f 55 50 42 59 20 63 6f 76 65 72 20  * GROUPBY cover 
dcc0: 6f 66 20 4f 52 44 45 52 42 59 20 2a 2f 0a 23 64  of ORDERBY */.#d
dcd0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 61 63  efine SQLITE_Fac
dce0: 74 6f 72 4f 75 74 43 6f 6e 73 74 20 30 78 30 30  torOutConst 0x00
dcf0: 30 38 20 20 20 2f 2a 20 43 6f 6e 73 74 61 6e 74  08   /* Constant
dd00: 20 66 61 63 74 6f 72 69 6e 67 20 2a 2f 0a 2f 2a   factoring */./*
dd10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dd20: 6e 6f 74 20 75 73 65 64 20 20 20 20 30 78 30 30  not used    0x00
dd30: 31 30 20 20 20 2f 2f 20 57 61 73 3a 20 53 51 4c  10   // Was: SQL
dd40: 49 54 45 5f 49 64 78 52 65 61 6c 41 73 49 6e 74  ITE_IdxRealAsInt
dd50: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
dd60: 54 45 5f 44 69 73 74 69 6e 63 74 4f 70 74 20 20  TE_DistinctOpt  
dd70: 20 20 30 78 30 30 32 30 20 20 20 2f 2a 20 44 49    0x0020   /* DI
dd80: 53 54 49 4e 43 54 20 75 73 69 6e 67 20 69 6e 64  STINCT using ind
dd90: 65 78 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  exes */.#define 
dda0: 53 51 4c 49 54 45 5f 43 6f 76 65 72 49 64 78 53  SQLITE_CoverIdxS
ddb0: 63 61 6e 20 20 20 30 78 30 30 34 30 20 20 20 2f  can   0x0040   /
ddc0: 2a 20 43 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  * Covering index
ddd0: 20 73 63 61 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   scans */.#defin
dde0: 65 20 53 51 4c 49 54 45 5f 4f 72 64 65 72 42 79  e SQLITE_OrderBy
ddf0: 49 64 78 4a 6f 69 6e 20 30 78 30 30 38 30 20 20  IdxJoin 0x0080  
de00: 20 2f 2a 20 4f 52 44 45 52 20 42 59 20 6f 66 20   /* ORDER BY of 
de10: 6a 6f 69 6e 73 20 76 69 61 20 69 6e 64 65 78 20  joins via index 
de20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
de30: 45 5f 53 75 62 71 43 6f 72 6f 75 74 69 6e 65 20  E_SubqCoroutine 
de40: 20 30 78 30 31 30 30 20 20 20 2f 2a 20 45 76 61   0x0100   /* Eva
de50: 6c 75 61 74 65 20 73 75 62 71 75 65 72 69 65 73  luate subqueries
de60: 20 61 73 20 63 6f 72 6f 75 74 69 6e 65 73 20 2a   as coroutines *
de70: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
de80: 5f 54 72 61 6e 73 69 74 69 76 65 20 20 20 20 20  _Transitive     
de90: 30 78 30 32 30 30 20 20 20 2f 2a 20 54 72 61 6e  0x0200   /* Tran
dea0: 73 69 74 69 76 65 20 63 6f 6e 73 74 72 61 69 6e  sitive constrain
deb0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
dec0: 4c 49 54 45 5f 4f 6d 69 74 4e 6f 6f 70 4a 6f 69  LITE_OmitNoopJoi
ded0: 6e 20 20 20 30 78 30 34 30 30 20 20 20 2f 2a 20  n   0x0400   /* 
dee0: 4f 6d 69 74 20 75 6e 75 73 65 64 20 74 61 62 6c  Omit unused tabl
def0: 65 73 20 69 6e 20 6a 6f 69 6e 73 20 2a 2f 0a 23  es in joins */.#
df00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 74  define SQLITE_St
df10: 61 74 33 34 20 20 20 20 20 20 20 20 20 30 78 30  at34         0x0
df20: 38 30 30 20 20 20 2f 2a 20 55 73 65 20 53 54 41  800   /* Use STA
df30: 54 33 20 6f 72 20 53 54 41 54 34 20 64 61 74 61  T3 or STAT4 data
df40: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
df50: 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73 20 20  TE_CursorHints  
df60: 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20 41 64    0x2000   /* Ad
df70: 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e 74 20  d OP_CursorHint 
df80: 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65 66 69  opcodes */.#defi
df90: 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f 70 74  ne SQLITE_AllOpt
dfa0: 73 20 20 20 20 20 20 20 20 30 78 66 66 66 66 20  s        0xffff 
dfb0: 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d 69 7a    /* All optimiz
dfc0: 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  ations */../*.**
dfd0: 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65 73 74   Macros for test
dfe0: 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
dff0: 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73  ot optimizations
e000: 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f 72 20   are enabled or 
e010: 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23 64 65  disabled..*/.#de
e020: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
e030: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
e040: 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64 62 4f  sk)  (((db)->dbO
e050: 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29 29 21  ptFlags&(mask))!
e060: 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70 74 69  =0).#define Opti
e070: 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65 64 28  mizationEnabled(
e080: 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28 28 64  db, mask)   (((d
e090: 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28  b)->dbOptFlags&(
e0a0: 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a  mask))==0)../*.*
e0b0: 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66  * Return true if
e0c0: 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72   it OK to factor
e0d0: 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   constant expres
e0e0: 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65 20 69  sions into the i
e0f0: 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a  nitialization.**
e100: 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67 75 6d   code. The argum
e110: 65 6e 74 20 69 73 20 61 20 50 61 72 73 65 20 6f  ent is a Parse o
e120: 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20 63 6f  bject for the co
e130: 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f  de generator..*/
e140: 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74 46 61  .#define ConstFa
e150: 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e  ctorOk(P) ((P)->
e160: 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a  okConstFactor)..
e170: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
e180: 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 73 71  alues for the sq
e190: 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65 6c 64  lite.magic field
e1a0: 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 73  ..** The numbers
e1b0: 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20 61 74   are obtained at
e1c0: 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65   random and have
e1d0: 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65 61 6e   no special mean
e1e0: 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68  ing, other.** th
e1f0: 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69 6e 63  an being distinc
e200: 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68  t from one anoth
e210: 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
e220: 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e  QLITE_MAGIC_OPEN
e230: 20 20 20 20 20 30 78 61 30 32 39 61 36 39 37 20       0xa029a697 
e240: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73 20   /* Database is 
e250: 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  open */.#define 
e260: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f  SQLITE_MAGIC_CLO
e270: 53 45 44 20 20 20 30 78 39 66 33 63 32 64 33 33  SED   0x9f3c2d33
e280: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
e290: 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69   closed */.#defi
e2a0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
e2b0: 53 49 43 4b 20 20 20 20 20 30 78 34 62 37 37 31  SICK     0x4b771
e2c0: 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e  290  /* Error an
e2d0: 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f 73 65  d awaiting close
e2e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e2f0: 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20 20 20  TE_MAGIC_BUSY   
e300: 20 20 30 78 66 30 33 62 37 39 30 36 20 20 2f 2a    0xf03b7906  /*
e310: 20 44 61 74 61 62 61 73 65 20 63 75 72 72 65 6e   Database curren
e320: 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64  tly in use */.#d
e330: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e340: 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78 62 35  IC_ERROR    0xb5
e350: 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20 53 51  357930  /* An SQ
e360: 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72 72 6f  LITE_MISUSE erro
e370: 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a 23 64  r occurred */.#d
e380: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47  efine SQLITE_MAG
e390: 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78 36 34  IC_ZOMBIE   0x64
e3a0: 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65  cffc7f  /* Close
e3b0: 20 77 69 74 68 20 6c 61 73 74 20 73 74 61 74 65   with last state
e3c0: 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f  ment close */../
e3d0: 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 66 75  *.** Each SQL fu
e3e0: 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69 6e 65  nction is define
e3f0: 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e 63 65  d by an instance
e400: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
e410: 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 2e 20  g.** structure. 
e420: 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c   For global buil
e430: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28  t-in functions (
e440: 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20 6d 61  ex: substr(), ma
e450: 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a  x(), count()).**
e460: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
e470: 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73 20  is structure is 
e480: 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71 6c 69  held in the sqli
e490: 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
e4a0: 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46  ons object..** F
e4b0: 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  or per-connectio
e4c0: 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65  n application-de
e4d0: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c  fined functions,
e4e0: 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68   a pointer to th
e4f0: 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
e500: 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 64  is held in the d
e510: 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20 74 61  b->aHash hash ta
e520: 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75  ble..**.** The u
e530: 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69 73 20  .pHash field is 
e540: 75 73 65 64 20 62 79 20 74 68 65 20 67 6c 6f 62  used by the glob
e550: 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54  al built-ins.  T
e560: 68 65 20 75 2e 70 44 65 73 74 72 75 63 74 6f 72  he u.pDestructor
e570: 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75 73 65  .** field is use
e580: 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74  d by per-connect
e590: 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75 6e 63  ion app-def func
e5a0: 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  tions..*/.struct
e5b0: 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69 38 20   FuncDef {.  i8 
e5c0: 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20  nArg;           
e5d0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
e5e0: 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65  rguments.  -1 me
e5f0: 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f  ans unlimited */
e600: 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61 67 73  .  u16 funcFlags
e610: 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20  ;       /* Some 
e620: 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53  combination of S
e630: 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a  QLITE_FUNC_* */.
e640: 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74    void *pUserDat
e650: 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72 20 64  a;     /* User d
e660: 61 74 61 20 70 61 72 61 6d 65 74 65 72 20 2a 2f  ata parameter */
e670: 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e 65 78  .  FuncDef *pNex
e680: 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20  t;      /* Next 
e690: 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 73 61  function with sa
e6a0: 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69  me name */.  voi
e6b0: 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71 6c 69  d (*xSFunc)(sqli
e6c0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
e6d0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
e6e0: 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67  ); /* func or ag
e6f0: 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64  g-step */.  void
e700: 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28 73 71   (*xFinalize)(sq
e710: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b  lite3_context*);
e720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e730: 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a    /* Agg finaliz
e740: 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  er */.  const ch
e750: 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20  ar *zName;   /* 
e760: 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  SQL name of the 
e770: 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75  function. */.  u
e780: 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44  nion {.    FuncD
e790: 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20 20 20  ef *pHash;      
e7a0: 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61 20 64  /* Next with a d
e7b0: 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20 62 75  ifferent name bu
e7c0: 74 20 74 68 65 20 73 61 6d 65 20 68 61 73 68 20  t the same hash 
e7d0: 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73 74 72  */.    FuncDestr
e7e0: 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75 63 74  uctor *pDestruct
e7f0: 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72 65 6e  or;   /* Referen
e800: 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73 74 72  ce counted destr
e810: 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
e820: 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a  /.  } u;.};../*.
e830: 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74 75 72  ** This structur
e840: 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73 20 61  e encapsulates a
e850: 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64   user-function d
e860: 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c 62 61  estructor callba
e870: 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67  ck (as.** config
e880: 75 72 65 64 20 75 73 69 6e 67 20 63 72 65 61 74  ured using creat
e890: 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29  e_function_v2())
e8a0: 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e 63 65   and a reference
e8b0: 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a   counter. When.*
e8c0: 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f  * create_functio
e8d0: 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c 65 64  n_v2() is called
e8e0: 20 74 6f 20 63 72 65 61 74 65 20 61 20 66 75 6e   to create a fun
e8f0: 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64 65 73  ction with a des
e900: 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69  tructor,.** a si
e910: 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66 20 74  ngle object of t
e920: 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 6c 6f  his type is allo
e930: 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73 74 72  cated. FuncDestr
e940: 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20 73 65  uctor.nRef is se
e950: 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62  t to.** the numb
e960: 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20 6f 62  er of FuncDef ob
e970: 6a 65 63 74 73 20 63 72 65 61 74 65 64 20 28 65  jects created (e
e980: 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20 64 65  ither 1 or 3, de
e990: 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65 74 68  pending on wheth
e9a0: 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65  er.** or not the
e9b0: 20 73 70 65 63 69 66 69 65 64 20 65 6e 63 6f 64   specified encod
e9c0: 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f 41 4e  ing is SQLITE_AN
e9d0: 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65 66 2e  Y). The FuncDef.
e9e0: 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d  pDestructor.** m
e9f0: 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20 6f 66  ember of each of
ea00: 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44 65 66   the new FuncDef
ea10: 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65 74 20   objects is set 
ea20: 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
ea30: 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e  allocated.** Fun
ea40: 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a  cDestructor..**.
ea50: 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c 20 77  ** Thereafter, w
ea60: 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 46  hen one of the F
ea70: 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69  uncDef objects i
ea80: 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65 20 72  s deleted, the r
ea90: 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e  eference.** coun
eaa0: 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65 63 74  t on this object
eab0: 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65 64 2e   is decremented.
eac0: 20 57 68 65 6e 20 69 74 20 72 65 61 63 68 65 73   When it reaches
ead0: 20 30 2c 20 74 68 65 20 64 65 73 74 72 75 63 74   0, the destruct
eae0: 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64  or.** is invoked
eaf0: 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44 65 73   and the FuncDes
eb00: 74 72 75 63 74 6f 72 20 73 74 72 75 63 74 75 72  tructor structur
eb10: 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75  e freed..*/.stru
eb20: 63 74 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  ct FuncDestructo
eb30: 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a  r {.  int nRef;.
eb40: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
eb50: 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f  y)(void *);.  vo
eb60: 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d  id *pUserData;.}
eb70: 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c  ;../*.** Possibl
eb80: 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46 75 6e  e values for Fun
eb90: 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74  cDef.flags.  Not
eba0: 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45 4e 47  e that the _LENG
ebb0: 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a  TH and _TYPEOF.*
ebc0: 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20 63 6f  * values must co
ebd0: 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c  rrespond to OPFL
ebe0: 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61 6e 64  AG_LENGTHARG and
ebf0: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
ec00: 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54  G.  And.** SQLIT
ec10: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
ec20: 6d 75 73 74 20 62 65 20 74 68 65 20 73 61 6d 65  must be the same
ec30: 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54 45 52   as SQLITE_DETER
ec40: 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65 72 65  MINISTIC.  There
ec50: 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74 28 29  .** are assert()
ec60: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
ec70: 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72 69 66  he code to verif
ec80: 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  y this..**.** Va
ec90: 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
eca0: 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
ecb0: 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
ecc0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
ecd0: 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e  AX    ==  NC_Min
ece0: 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d 20 53  MaxAgg      == S
ecf0: 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20  F_MinMaxAgg.**  
ed00: 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c     SQLITE_FUNC_L
ed10: 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f 50 46  ENGTH    ==  OPF
ed20: 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a  LAG_LENGTHARG.**
ed30: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
ed40: 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f  _TYPEOF    ==  O
ed50: 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 0a  PFLAG_TYPEOFARG.
ed60: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
ed70: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20  NC_CONSTANT  == 
ed80: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
ed90: 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65 20 41  ISTIC from the A
eda0: 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  PI.**     SQLITE
edb0: 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20  _FUNC_ENCMASK   
edc0: 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54  depends on SQLIT
edd0: 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e  E_UTF* macros in
ede0: 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66   the API.*/.#def
edf0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ee00: 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30 33 20  ENCMASK  0x0003 
ee10: 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38 2c 20  /* SQLITE_UTF8, 
ee20: 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 6f  SQLITE_UTF16BE o
ee30: 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65  r UTF16LE */.#de
ee40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
ee50: 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30 30 34  _LIKE     0x0004
ee60: 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20 66 6f   /* Candidate fo
ee70: 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d  r the LIKE optim
ee80: 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  ization */.#defi
ee90: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
eea0: 41 53 45 20 20 20 20 20 30 78 30 30 30 38 20 2f  ASE     0x0008 /
eeb0: 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69 76 65  * Case-sensitive
eec0: 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e 63 74   LIKE-type funct
eed0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
eee0: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d  QLITE_FUNC_EPHEM
eef0: 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20 45 70      0x0010 /* Ep
ef00: 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65 74 65  hemeral.  Delete
ef10: 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a 23 64   with VDBE */.#d
ef20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
ef30: 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30 30 32  C_NEEDCOLL 0x002
ef40: 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65 74 46  0 /* sqlite3GetF
ef50: 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67  uncCollSeq() mig
ef60: 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23  ht be called*/.#
ef70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
ef80: 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78 30 30  NC_LENGTH   0x00
ef90: 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c  40 /* Built-in l
efa0: 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69 6f 6e  ength() function
efb0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
efc0: 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20  TE_FUNC_TYPEOF  
efd0: 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69 6c 74   0x0080 /* Built
efe0: 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66 75 6e  -in typeof() fun
eff0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
f000: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55   SQLITE_FUNC_COU
f010: 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20  NT    0x0100 /* 
f020: 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a  Built-in count(*
f030: 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f 0a 23  ) aggregate */.#
f040: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f050: 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78 30 32  NC_COALESCE 0x02
f060: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63  00 /* Built-in c
f070: 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69 66 6e  oalesce() or ifn
f080: 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ull() */.#define
f090: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c   SQLITE_FUNC_UNL
f0a0: 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f 2a 20  IKELY 0x0400 /* 
f0b0: 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c  Built-in unlikel
f0c0: 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  y() function */.
f0d0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f0e0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30  UNC_CONSTANT 0x0
f0f0: 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  800 /* Constant 
f100: 69 6e 70 75 74 73 20 67 69 76 65 20 61 20 63 6f  inputs give a co
f110: 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f  nstant output */
f120: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f130: 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78  FUNC_MINMAX   0x
f140: 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  1000 /* True for
f150: 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78 28 29   min() and max()
f160: 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f 0a 23   aggregates */.#
f170: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f180: 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78 32 30  NC_SLOCHNG  0x20
f190: 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e  00 /* "Slow Chan
f1a0: 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74  ge". Value const
f1b0: 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20 20 20  ant during a.   
f1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f1e0: 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65 72 79   ** single query
f1f0: 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67 65 20   - might change 
f200: 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23 64 65  over time */.#de
f210: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f220: 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30 30 30  _AFFINITY 0x4000
f230: 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61 66 66   /* Built-in aff
f240: 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69 6f 6e  inity() function
f250: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66   */../*.** The f
f260: 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65 20 6d  ollowing three m
f270: 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f 4e 28  acros, FUNCTION(
f280: 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20 61 6e  ), LIKEFUNC() an
f290: 64 20 41 47 47 52 45 47 41 54 45 28 29 20 61 72  d AGGREGATE() ar
f2a0: 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63 72 65  e.** used to cre
f2b0: 61 74 65 20 74 68 65 20 69 6e 69 74 69 61 6c 69  ate the initiali
f2c0: 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46 75 6e  zers for the Fun
f2d0: 63 44 65 66 20 73 74 72 75 63 74 75 72 65 73 2e  cDef structures.
f2e0: 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54 49 4f  .**.**   FUNCTIO
f2f0: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
f300: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
f310: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
f320: 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72 20  create a scalar 
f330: 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74  function definit
f340: 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ion of a functio
f350: 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 69  n zName.**     i
f360: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 43 20  mplemented by C 
f370: 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63 20 74  function xFunc t
f380: 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72 67  hat accepts nArg
f390: 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68 65 0a   arguments. The.
f3a0: 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70 61 73  **     value pas
f3b0: 73 65 64 20 61 73 20 69 41 72 67 20 69 73 20 63  sed as iArg is c
f3c0: 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64 2a 29  ast to a (void*)
f3d0: 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69 6c 61   and made availa
f3e0: 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20 74 68  ble.**     as th
f3f0: 65 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  e user-data (sql
f400: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
f410: 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  ) for the functi
f420: 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20 61 72  on. If.**     ar
f430: 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20 74 72  gument bNC is tr
f440: 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53 51 4c  ue, then the SQL
f450: 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c  ITE_FUNC_NEEDCOL
f460: 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0a 2a  L flag is set..*
f470: 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49 4f 4e  *.**   VFUNCTION
f480: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f490: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 0a  rg, bNC, xFunc).
f4a0: 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55 4e 43  **     Like FUNC
f4b0: 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74 20 6f  TION except it o
f4c0: 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54 45 5f  mits the SQLITE_
f4d0: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c  FUNC_CONSTANT fl
f4e0: 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46 55 4e  ag..**.**   DFUN
f4f0: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f500: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f510: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
f520: 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
f530: 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
f540: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f550: 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a 20 20  NT flag and.**  
f560: 20 20 20 61 64 64 73 20 74 68 65 20 53 51 4c 49     adds the SQLI
f570: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
f580: 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f 72 20  flag.  Used for 
f590: 64 61 74 65 20 26 20 74 69 6d 65 20 66 75 6e 63  date & time func
f5a0: 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61 6e 64  tions.**     and
f5b0: 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b 65 20   functions like 
f5c0: 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e 28 29  sqlite_version()
f5d0: 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e 67 65   that can change
f5e0: 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69 6e 67  , but not during
f5f0: 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67 6c 65  .**     a single
f600: 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 20 20   query..**.**   
f610: 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c  AGGREGATE(zName,
f620: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
f630: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 29  , xStep, xFinal)
f640: 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f 20  .**     Used to 
f650: 63 72 65 61 74 65 20 61 6e 20 61 67 67 72 65 67  create an aggreg
f660: 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64 65 66  ate function def
f670: 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d 65 6e  inition implemen
f680: 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20 74 68  ted by.**     th
f690: 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20 78 53  e C functions xS
f6a0: 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c 2e 20  tep and xFinal. 
f6b0: 54 68 65 20 66 69 72 73 74 20 66 6f 75 72 20 70  The first four p
f6c0: 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20 20 20  arameters.**    
f6d0: 20 61 72 65 20 69 6e 74 65 72 70 72 65 74 65 64   are interpreted
f6e0: 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77 61 79   in the same way
f6f0: 20 61 73 20 74 68 65 20 66 69 72 73 74 20 34 20   as the first 4 
f700: 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a 2a 2a  parameters to.**
f710: 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28 29 2e       FUNCTION().
f720: 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46 55 4e  .**.**   LIKEFUN
f730: 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70  C(zName, nArg, p
f740: 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a 20 20  Arg, flags).**  
f750: 20 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74     Used to creat
f760: 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e 63 74  e a scalar funct
f770: 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 6f  ion definition o
f780: 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a 4e 61  f a function zNa
f790: 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74 20 61  me.**     that a
f7a0: 63 63 65 70 74 73 20 6e 41 72 67 20 61 72 67 75  ccepts nArg argu
f7b0: 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69 6d 70  ments and is imp
f7c0: 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20 63 61  lemented by a ca
f7d0: 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20 20 66  ll to C.**     f
f7e0: 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75 6e 63  unction likeFunc
f7f0: 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72 67 20  . Argument pArg 
f800: 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f  is cast to a (vo
f810: 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65 0a 2a  id *) and made.*
f820: 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 20  *     available 
f830: 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20  as the function 
f840: 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c 69 74  user-data (sqlit
f850: 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29 29 2e  e3_user_data()).
f860: 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75 6e 63   The.**     Func
f870: 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69 61 62  Def.flags variab
f880: 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  le is set to the
f890: 20 76 61 6c 75 65 20 70 61 73 73 65 64 20 61 73   value passed as
f8a0: 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20 20 20   the flags.**   
f8b0: 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a 2f 0a    parameter..*/.
f8c0: 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e  #define FUNCTION
f8d0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
f8e0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
f8f0: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
f900: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c  E_FUNC_CONSTANT|
f910: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
f920: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
f930: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
f940: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
f950: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
f960: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
f970: 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43 54 49  .#define VFUNCTI
f980: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
f990: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
f9a0: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
f9b0: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
f9c0: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
f9d0: 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45  LL), \.   SQLITE
f9e0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67  _INT_TO_PTR(iArg
f9f0: 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20  ), 0, xFunc, 0, 
fa00: 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64  #zName, {0} }.#d
fa10: 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f 4e 28  efine DFUNCTION(
fa20: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
fa30: 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c  g, bNC, xFunc) \
fa40: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
fa50: 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51  _FUNC_SLOCHNG|SQ
fa60: 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53  LITE_UTF8|(bNC*S
fa70: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
fa80: 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49 54  OLL), \.   SQLIT
fa90: 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72  E_INT_TO_PTR(iAr
faa0: 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c  g), 0, xFunc, 0,
fab0: 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23   #zName, {0} }.#
fac0: 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f 4e 32  define FUNCTION2
fad0: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41  (zName, nArg, iA
fae0: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 2c 20  rg, bNC, xFunc, 
faf0: 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20 20  extraFlags) \.  
fb00: 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46 55 4e  {nArg,SQLITE_FUN
fb10: 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54  C_CONSTANT|SQLIT
fb20: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
fb30: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
fb40: 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c 0a 20  )|extraFlags,\. 
fb50: 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f    SQLITE_INT_TO_
fb60: 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46  PTR(iArg), 0, xF
fb70: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
fb80: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 53 54  {0} }.#define ST
fb90: 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  R_FUNCTION(zName
fba0: 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 62 4e  , nArg, pArg, bN
fbb0: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
fbc0: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
fbd0: 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f  _SLOCHNG|SQLITE_
fbe0: 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45  UTF8|(bNC*SQLITE
fbf0: 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c  _FUNC_NEEDCOLL),
fc00: 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c 20 78   \.   pArg, 0, x
fc10: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
fc20: 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b 45 46   }.#define LIKEF
fc30: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
fc40: 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c 0a 20   arg, flags) \. 
fc50: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46   {nArg, SQLITE_F
fc60: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
fc70: 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73 2c 20  ITE_UTF8|flags, 
fc80: 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61 72 67  \.   (void *)arg
fc90: 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c 20 30  , 0, likeFunc, 0
fca0: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
fcb0: 23 64 65 66 69 6e 65 20 41 47 47 52 45 47 41 54  #define AGGREGAT
fcc0: 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 61  E(zName, nArg, a
fcd0: 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c 20 78  rg, nc, xStep, x
fce0: 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41 72 67  Final) \.  {nArg
fcf0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
fd00: 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
fd10: 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51  EDCOLL), \.   SQ
fd20: 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28  LITE_INT_TO_PTR(
fd30: 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c 78  arg), 0, xStep,x
fd40: 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30  Final,#zName, {0
fd50: 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45  }}.#define AGGRE
fd60: 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e 41 72  GATE2(zName, nAr
fd70: 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65  g, arg, nc, xSte
fd80: 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74 72 61  p, xFinal, extra
fd90: 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41 72 67  Flags) \.  {nArg
fda0: 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 6e  , SQLITE_UTF8|(n
fdb0: 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  c*SQLITE_FUNC_NE
fdc0: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
fdd0: 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f  gs, \.   SQLITE_
fde0: 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67 29 2c  INT_TO_PTR(arg),
fdf0: 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e 61 6c   0, xStep,xFinal
fe00: 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a 0a 2f  ,#zName, {0}}../
fe10: 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65 6e 74  *.** All current
fe20: 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72 65 20   savepoints are 
fe30: 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b  stored in a link
fe40: 65 64 20 6c 69 73 74 20 73 74 61 72 74 69 6e 67  ed list starting
fe50: 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33 2e 70   at.** sqlite3.p
fe60: 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65 20 66  Savepoint. The f
fe70: 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69 6e 20  irst element in 
fe80: 74 68 65 20 6c 69 73 74 20 69 73 20 74 68 65 20  the list is the 
fe90: 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a 2a 2a  most recently.**
fea0: 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f 69 6e   opened savepoin
feb0: 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20 61 72  t. Savepoints ar
fec0: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c  e added to the l
fed0: 69 73 74 20 62 79 20 74 68 65 20 76 64 62 65 0a  ist by the vdbe.
fee0: 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20  ** OP_Savepoint 
fef0: 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a  instruction..*/.
ff00: 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e 74  struct Savepoint
ff10: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
ff20: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ff30: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61 76 65           /* Save
ff40: 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75 6c 2d  point name (nul-
ff50: 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f 0a 20  terminated) */. 
ff60: 20 69 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f   i64 nDeferredCo
ff70: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
ff80: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
ff90: 66 20 64 65 66 65 72 72 65 64 20 66 6b 20 76 69  f deferred fk vi
ffa0: 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 36  olations */.  i6
ffb0: 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  4 nDeferredImmCo
ffc0: 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ns;             
ffd0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 64    /* Number of d
ffe0: 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b 2e 20  eferred imm fk. 
fff0: 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74 20 2a  */.  Savepoint *
10000 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20  pNext;          
10010 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65           /* Pare
10020 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28 69 66  nt savepoint (if
10030 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   any) */.};../*.
10040 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
10050 20 61 72 65 20 75 73 65 64 20 61 73 20 74 68 65   are used as the
10060 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65 74 65   second paramete
10070 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61 76 65  r to sqlite3Save
10080 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e 64 20  point(),.** and 
10090 61 73 20 74 68 65 20 50 31 20 61 72 67 75 6d 65  as the P1 argume
100a0 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53 61 76  nt to the OP_Sav
100b0 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69  epoint instructi
100c0 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  on..*/.#define S
100d0 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e 20 20  AVEPOINT_BEGIN  
100e0 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 53 41      0.#define SA
100f0 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53 45 20  VEPOINT_RELEASE 
10100 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53 41 56     1.#define SAV
10110 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43 4b 20  EPOINT_ROLLBACK 
10120 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68    2.../*.** Each
10130 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65 20 28   SQLite module (
10140 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 64 65  virtual table de
10150 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64 65 66  finition) is def
10160 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20 69 6e  ined by an.** in
10170 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10180 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
10190 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  e, stored in the
101a0 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75 6c 65   sqlite3.aModule
101b0 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65 2e 0a  .** hash table..
101c0 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75 6c 65  */.struct Module
101d0 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c 69 74   {.  const sqlit
101e0 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f 64 75  e3_module *pModu
101f0 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43 61 6c  le;       /* Cal
10200 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73 20 2a  lback pointers *
10210 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
10220 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
10230 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
10240 20 70 61 73 73 65 64 20 74 6f 20 63 72 65 61 74   passed to creat
10250 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20  e_module() */.  
10260 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20 20 20  void *pAux;     
10270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10280 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70 61 73       /* pAux pas
10290 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f 6d 6f  sed to create_mo
102a0 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64  dule() */.  void
102b0 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76 6f 69   (*xDestroy)(voi
102c0 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  d *);           
102d0 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73 74 72   /* Module destr
102e0 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a  uctor function *
102f0 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70 6f 54  /.  Table *pEpoT
10300 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ab;             
10310 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70 6f 6e           /* Epon
10320 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f 72 20  ymous table for 
10330 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f 0a 7d  this module */.}
10340 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72 6d 61  ;../*.** informa
10350 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68 20  tion about each 
10360 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53 51 4c  column of an SQL
10370 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64 20 69   table is held i
10380 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a  n an instance.**
10390 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75   of this structu
103a0 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43 6f  re..*/.struct Co
103b0 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20 2a 7a  lumn {.  char *z
103c0 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e 61 6d  Name;     /* Nam
103d0 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e  e of this column
103e0 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74 68 65  , \000, then the
103f0 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70 72 20   type */.  Expr 
10400 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a 20 44  *pDflt;     /* D
10410 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
10420 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20  this column */. 
10430 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20 20 20   char *zColl;   
10440 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67 20 73    /* Collating s
10450 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e 55 4c  equence.  If NUL
10460 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66 61 75  L, use the defau
10470 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74 4e 75  lt */.  u8 notNu
10480 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 4f  ll;      /* An O
10490 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61 6e 64  E_ code for hand
104a0 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c 4c 20  ling a NOT NULL 
104b0 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
104c0 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b 20 20  char affinity;  
104d0 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20 53   /* One of the S
104e0 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20 76 61  QLITE_AFF_... va
104f0 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73 7a 45  lues */.  u8 szE
10500 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 45 73  st;        /* Es
10510 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f 66 20  timated size of 
10520 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20 63 6f  value in this co
10530 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49 4e 54  lumn. sizeof(INT
10540 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  )==1 */.  u8 col
10550 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20 42 6f  Flags;     /* Bo
10560 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69 65 73  olean properties
10570 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47 5f 20  .  See COLFLAG_ 
10580 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20 2a 2f  defines below */
10590 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20  .};../* Allowed 
105a0 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c 75 6d  values for Colum
105b0 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f 0a 23  n.colFlags:.*/.#
105c0 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 50  define COLFLAG_P
105d0 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31 20 20  RIMKEY  0x0001  
105e0 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73 20 70    /* Column is p
105f0 61 72 74 20 6f 66 20 74 68 65 20 70 72 69 6d 61  art of the prima
10600 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  ry key */.#defin
10610 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e  e COLFLAG_HIDDEN
10620 20 20 20 30 78 30 30 30 32 20 20 20 20 2f 2a 20     0x0002    /* 
10630 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20  A hidden column 
10640 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  in a virtual tab
10650 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f  le */.#define CO
10660 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20 20 30  LFLAG_HASTYPE  0
10670 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79 70 65  x0004    /* Type
10680 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20 63 6f   name follows co
10690 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a 2f 2a  lumn name */../*
106a0 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69 6e 67  .** A "Collating
106b0 20 53 65 71 75 65 6e 63 65 22 20 69 73 20 64 65   Sequence" is de
106c0 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74  fined by an inst
106d0 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
106e0 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75  owing.** structu
106f0 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c 6c 79  re. Conceptually
10700 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65  , a collating se
10710 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74 73 20  quence consists 
10720 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a 2a 2a  of a name and.**
10730 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20 72 6f   a comparison ro
10740 75 74 69 6e 65 20 74 68 61 74 20 64 65 66 69 6e  utine that defin
10750 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f 66 20  es the order of 
10760 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e 0a 2a  that sequence..*
10770 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65 71 2e  *.** If CollSeq.
10780 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20 69 74  xCmp is NULL, it
10790 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 0a   means that the.
107a0 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ** collating seq
107b0 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66 69 6e  uence is undefin
107c0 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62 75 69  ed.  Indices bui
107d0 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66 69 6e  lt on an undefin
107e0 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20  ed.** collating 
107f0 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e 6f 74  sequence may not
10800 20 62 65 20 72 65 61 64 20 6f 72 20 77 72 69 74   be read or writ
10810 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 43  ten..*/.struct C
10820 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61 72 20  ollSeq {.  char 
10830 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
10840 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20   /* Name of the 
10850 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
10860 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f 64 65  ce, UTF-8 encode
10870 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  d */.  u8 enc;  
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
10890 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 68 61  Text encoding ha
108a0 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28 29 20  ndled by xCmp() 
108b0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72  */.  void *pUser
108c0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69  ;          /* Fi
108d0 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20  rst argument to 
108e0 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e 74 20  xCmp() */.  int 
108f0 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c 69 6e  (*xCmp)(void*,in
10900 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20  t, const void*, 
10910 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
10920 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 6c  );.  void (*xDel
10930 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20 44 65  )(void*);  /* De
10940 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70 55 73  structor for pUs
10950 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
10960 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63 61 6e  A sort order can
10970 20 62 65 20 65 69 74 68 65 72 20 41 53 43 20 6f   be either ASC o
10980 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65 66 69  r DESC..*/.#defi
10990 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41 53 43  ne SQLITE_SO_ASC
109a0 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53 6f 72         0  /* Sor
109b0 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f  t in ascending o
109c0 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  rder */.#define 
109d0 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43 20 20  SQLITE_SO_DESC  
109e0 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74 20 69      1  /* Sort i
109f0 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72 64 65  n ascending orde
10a00 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  r */.#define SQL
10a10 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e 45 44  ITE_SO_UNDEFINED
10a20 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74 20 6f   -1 /* No sort o
10a30 72 64 65 72 20 73 70 65 63 69 66 69 65 64 20 2a  rder specified *
10a40 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d 6e 20  /../*.** Column 
10a50 61 66 66 69 6e 69 74 79 20 74 79 70 65 73 2e 0a  affinity types..
10a60 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73 65 64  **.** These used
10a70 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f 6e 69   to have mnemoni
10a80 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69 27 20  c name like 'i' 
10a90 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46 5f 49  for SQLITE_AFF_I
10aa0 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20 27 74  NTEGER and.** 't
10ab0 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
10ac0 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65 20 63  _TEXT.  But we c
10ad0 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74 6c 65  an save a little
10ae0 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70 72 6f   space and impro
10af0 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65 64 20  ve.** the speed 
10b00 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75 6d 62  a little by numb
10b10 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75 65 73  ering the values
10b20 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79 2e 0a   consecutively..
10b30 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68 65 72  **.** But rather
10b40 20 74 68 61 6e 20 73 74 61 72 74 20 77 69 74 68   than start with
10b50 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65 67 69   0 or 1, we begi
10b60 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54 68 61  n with 'A'.  Tha
10b70 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e 20 6d  t way,.** when m
10b80 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69 74 79  ultiple affinity
10b90 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e 63 61   types are conca
10ba0 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61 20 73  tenated into a s
10bb0 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75 73 65  tring and.** use
10bc0 64 20 61 73 20 74 68 65 20 50 34 20 6f 70 65 72  d as the P4 oper
10bd0 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c 20 62  and, they will b
10be0 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c 65 2e  e more readable.
10bf0 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c 73 6f  .**.** Note also
10c00 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65 72 69   that the numeri
10c10 63 20 74 79 70 65 73 20 61 72 65 20 67 72 6f 75  c types are grou
10c20 70 65 64 20 74 6f 67 65 74 68 65 72 20 73 6f 20  ped together so 
10c30 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a 2a 20  that testing.** 
10c40 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20 74 79  for a numeric ty
10c50 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65 20 63  pe is a single c
10c60 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e 64 20  omparison.  And 
10c70 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20 69 73  the BLOB type is
10c80 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65 66 69   first..*/.#defi
10c90 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 42 4c  ne SQLITE_AFF_BL
10ca0 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65 66 69  OB     'A'.#defi
10cb0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 54 45  ne SQLITE_AFF_TE
10cc0 58 54 20 20 20 20 20 27 42 27 0a 23 64 65 66 69  XT     'B'.#defi
10cd0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4e 55  ne SQLITE_AFF_NU
10ce0 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65 66 69  MERIC  'C'.#defi
10cf0 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 49 4e  ne SQLITE_AFF_IN
10d00 54 45 47 45 52 20 20 27 44 27 0a 23 64 65 66 69  TEGER  'D'.#defi
10d10 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 52 45  ne SQLITE_AFF_RE
10d20 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64 65 66  AL     'E'..#def
10d30 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 75 6d  ine sqlite3IsNum
10d40 65 72 69 63 41 66 66 69 6e 69 74 79 28 58 29 20  ericAffinity(X) 
10d50 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f 41 46   ((X)>=SQLITE_AF
10d60 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a 0a 2a  F_NUMERIC)../*.*
10d70 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41 46 46  * The SQLITE_AFF
10d80 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d 61 73  _MASK values mas
10d90 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67 6e 69  ks off the signi
10da0 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66 20 61  ficant bits of a
10db0 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20 76 61  n.** affinity va
10dc0 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  lue..*/.#define 
10dd0 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53 4b 20  SQLITE_AFF_MASK 
10de0 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a 2a 20      0x47../*.** 
10df0 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74 20 76  Additional bit v
10e00 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e 20 62  alues that can b
10e10 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e 20 61  e ORed with an a
10e20 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75 74 0a  ffinity without.
10e30 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20  ** changing the 
10e40 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a 2a 20  affinity..**.** 
10e50 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  The SQLITE_NOTNU
10e60 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63 6f 6d  LL flag is a com
10e70 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55 4c 4c  bination of NULL
10e80 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e 55 4c  EQ and JUMPIFNUL
10e90 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65 73 20  L..** It causes 
10ea0 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f 20 66  an assert() to f
10eb0 69 72 65 20 69 66 20 65 69 74 68 65 72 20 6f 70  ire if either op
10ec0 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d 70 61  erand to a compa
10ed0 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61 74 6f  rison.** operato
10ee0 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74 20 69  r is NULL.  It i
10ef0 73 20 61 64 64 65 64 20 74 6f 20 63 65 72 74 61  s added to certa
10f00 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20 6f 70  in comparison op
10f10 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20 70 72  erators to.** pr
10f20 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f 70 65  ove that the ope
10f30 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61 79 73  rands are always
10f40 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a 23 64   NOT NULL..*/.#d
10f50 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b 45 45  efine SQLITE_KEE
10f60 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38 20 20  PNULL     0x08  
10f70 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63 74 6f  /* Used by vecto
10f80 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a 23 64  r == or <> */.#d
10f90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a 55 4d  efine SQLITE_JUM
10fa0 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30 20 20  PIFNULL   0x10  
10fb0 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69 74 68  /* jumps if eith
10fc0 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20 4e 55  er operand is NU
10fd0 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL */.#define SQ
10fe0 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20 20 20  LITE_STOREP2    
10ff0 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f 72 65    0x20  /* Store
11000 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67 5b 50   result in reg[P
11010 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e 20 6a  2] rather than j
11020 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ump */.#define S
11030 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20 20 20  QLITE_NULLEQ    
11040 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55 4c 4c     0x80  /* NULL
11050 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65  =NULL */.#define
11060 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 20   SQLITE_NOTNULL 
11070 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20 41 73       0x90  /* As
11080 73 65 72 74 20 74 68 61 74 20 6f 70 65 72 61 6e  sert that operan
11090 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e 55 4c  ds are never NUL
110a0 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  L */../*.** An o
110b0 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20 74 79  bject of this ty
110c0 70 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  pe is created fo
110d0 72 20 65 61 63 68 20 76 69 72 74 75 61 6c 20 74  r each virtual t
110e0 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69 6e 0a  able present in.
110f0 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
11100 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 49 66  schema..**.** If
11110 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
11120 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
11130 74 68 65 6e 20 74 68 65 72 65 20 69 73 20 6f 6e  then there is on
11140 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  e instance of th
11150 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72 65 20  is.** structure 
11160 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61 73  for each databas
11170 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28 73 71  e connection (sq
11180 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75 73 65  lite3*) that use
11190 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a 2a 20  s the shared.** 
111a0 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69 73 20  schema. This is 
111b0 62 65 63 61 75 73 65 20 65 61 63 68 20 64 61 74  because each dat
111c0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
111d0 20 72 65 71 75 69 72 65 73 20 69 74 73 20 6f 77   requires its ow
111e0 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e 73 74  n unique.** inst
111f0 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71 6c 69  ance of the sqli
11200 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65  te3_vtab* handle
11210 20 75 73 65 64 20 74 6f 20 61 63 63 65 73 73 20   used to access 
11220 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
11230 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74 61 74  e.** implementat
11240 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76 74 61  ion. sqlite3_vta
11250 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e 20 6e  b* handles can n
11260 6f 74 20 62 65 20 73 68 61 72 65 64 20 62 65 74  ot be shared bet
11270 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61 73 65  ween.** database
11280 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20 65 76   connections, ev
11290 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65 73 74  en when the rest
112a0 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d 6f 72   of the in-memor
112b0 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 73 63  y database.** sc
112c0 68 65 6d 61 20 69 73 20 73 68 61 72 65 64 2c 20  hema is shared, 
112d0 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74  as the implement
112e0 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74 6f 72  ation often stor
112f0 65 73 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  es the database.
11300 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ** connection ha
11310 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f 20 69  ndle passed to i
11320 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e 6e 65  t via the xConne
11330 63 74 28 29 20 6f 72 20 78 43 72 65 61 74 65 28  ct() or xCreate(
11340 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75 72 69  ) method.** duri
11350 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  ng initializatio
11360 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20 54 68  n internally. Th
11370 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  is database conn
11380 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 6d 61  ection handle ma
11390 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75 73 65  y.** then be use
113a0 64 20 62 79 20 74 68 65 20 76 69 72 74 75 61 6c  d by the virtual
113b0 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65 6e 74   table implement
113c0 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73 73 20  ation to access 
113d0 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a 20 77  real tables.** w
113e0 69 74 68 69 6e 20 74 68 65 20 64 61 74 61 62 61  ithin the databa
113f0 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68 65 79  se. So that they
11400 20 61 70 70 65 61 72 20 61 73 20 70 61 72 74 20   appear as part 
11410 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73 0a 2a  of the callers.*
11420 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c 20 74  * transaction, t
11430 68 65 73 65 20 61 63 63 65 73 73 65 73 20 6e 65  hese accesses ne
11440 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20 76 69  ed to be made vi
11450 61 20 74 68 65 20 73 61 6d 65 20 64 61 74 61 62  a the same datab
11460 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  ase.** connectio
11470 6e 20 61 73 20 74 68 61 74 20 75 73 65 64 20 74  n as that used t
11480 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20 6f 70  o execute SQL op
11490 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20  erations on the 
114a0 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0a 2a  virtual table..*
114b0 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c 65 20  *.** All VTable 
114c0 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63 6f 72  objects that cor
114d0 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73 69 6e  respond to a sin
114e0 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61 20 73  gle table in a s
114f0 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62 61 73  hared.** databas
11500 65 20 73 63 68 65 6d 61 20 61 72 65 20 69 6e 69  e schema are ini
11510 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20 69 6e  tially stored in
11520 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74 20 70   a linked-list p
11530 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a 2a 20  ointed to by.** 
11540 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61 62 6c  the Table.pVTabl
11550 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61 62 6c  e member variabl
11560 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65 73 70  e of the corresp
11570 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f 62 6a  onding Table obj
11580 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61 6e 20  ect..** When an 
11590 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
115a0 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  ) operation is r
115b0 65 71 75 69 72 65 64 20 74 6f 20 61 63 63 65 73  equired to acces
115c0 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a 2a 2a  s the virtual.**
115d0 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61 72 63   table, it searc
115e0 68 65 73 20 74 68 65 20 6c 69 73 74 20 66 6f 72  hes the list for
115f0 20 74 68 65 20 56 54 61 62 6c 65 20 74 68 61 74   the VTable that
11600 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20   corresponds to 
11610 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73 65 20  the.** database 
11620 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69 6e 67  connection doing
11630 20 74 68 65 20 70 72 65 70 61 72 69 6e 67 20 73   the preparing s
11640 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68 65 20  o as to use the 
11650 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c 69 74  correct.** sqlit
11660 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 20  e3_vtab* handle 
11670 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  in the compiled 
11680 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  query..**.** Whe
11690 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 54  n an in-memory T
116a0 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73 20 64  able object is d
116b0 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78 61 6d  eleted (for exam
116c0 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a 2a 20  ple when the.** 
116d0 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e 67 20  schema is being 
116e0 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73 6f 6d  reloaded for som
116f0 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65 20 56  e reason), the V
11700 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 61 72  Table objects ar
11710 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74 65 64  e not.** deleted
11720 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74 65 33   and the sqlite3
11730 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 61  _vtab* handles a
11740 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e 6e 65  re not xDisconne
11750 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65 64 69  ct()ed.** immedi
11760 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64 2c 20  ately. Instead, 
11770 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64 20 66  they are moved f
11780 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e 70 56  rom the Table.pV
11790 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a 2a 2a  Table list to.**
117a0 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65 64 20   another linked 
117b0 6c 69 73 74 20 68 65 61 64 65 64 20 62 79 20 74  list headed by t
117c0 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69 73 63  he sqlite3.pDisc
117d0 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20 6f 66  onnect member of
117e0 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73 70 6f   the.** correspo
117f0 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20 73 74  nding sqlite3 st
11800 72 75 63 74 75 72 65 2e 20 54 68 65 79 20 61 72  ructure. They ar
11810 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64 2f 78  e then deleted/x
11820 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a 2a 20  Disconnected.** 
11830 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74 61 74  next time a stat
11840 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61 72 65  ement is prepare
11850 64 20 75 73 69 6e 67 20 73 61 69 64 20 73 71 6c  d using said sql
11860 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73 20 64  ite3*. This is d
11870 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69 64 20  one.** to avoid 
11880 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65 73 20  deadlock issues 
11890 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74 69 70  involving multip
118a0 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74 65 78  le sqlite3.mutex
118b0 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52 65 66   mutexes..** Ref
118c0 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73 20 61  er to comments a
118d0 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20 73 71  bove function sq
118e0 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c  lite3VtabUnlockL
118f0 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a 2a 20  ist() for an.** 
11900 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73 20 74  explanation as t
11910 6f 20 77 68 79 20 69 74 20 69 73 20 73 61 66 65  o why it is safe
11920 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74 72 79   to add an entry
11930 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33 2e 70   to an sqlite3.p
11940 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20 6c 69  Disconnect.** li
11950 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c 64 69  st without holdi
11960 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e  ng the correspon
11970 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d 75 74  ding sqlite3.mut
11980 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a 2a 20  ex mutex..**.** 
11990 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72 20 6f  The memory for o
119a0 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73 20 74  bjects of this t
119b0 79 70 65 20 69 73 20 61 6c 77 61 79 73 20 61 6c  ype is always al
119c0 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20 73 71  located by.** sq
119d0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28 29 2c  lite3DbMalloc(),
119e0 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65   using the conne
119f0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73 74 6f  ction handle sto
11a00 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e 64 62  red in VTable.db
11a10 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72 73 74   as.** the first
11a20 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a 73 74   argument..*/.st
11a30 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a 20 20  ruct VTable {.  
11a40 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20  sqlite3 *db;    
11a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74            /* Dat
11a60 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
11a70 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
11a80 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
11a90 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b 20 20   Module *pMod;  
11aa0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f             /* Po
11ab0 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c 65 20  inter to module 
11ac0 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
11ad0 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74 61 62  /.  sqlite3_vtab
11ae0 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20 2f 2a   *pVtab;      /*
11af0 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74 61 62   Pointer to vtab
11b00 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20 20 69   instance */.  i
11b10 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
11b20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11b30 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
11b40 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
11b50 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73 74 72   */.  u8 bConstr
11b60 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  aint;           
11b70 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74  /* True if const
11b80 72 61 69 6e 74 73 20 61 72 65 20 73 75 70 70 6f  raints are suppo
11b90 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53  rted */.  int iS
11ba0 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20  avepoint;       
11bb0 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f 66 20      /* Depth of 
11bc0 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20 73 74  the SAVEPOINT st
11bd0 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20  ack */.  VTable 
11be0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
11bf0 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
11c00 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65 20 61  nked list (see a
11c10 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  bove) */.};../*.
11c20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20 66 6f  ** The schema fo
11c30 72 20 65 61 63 68 20 53 51 4c 20 74 61 62 6c 65  r each SQL table
11c40 20 61 6e 64 20 76 69 65 77 20 69 73 20 72 65 70   and view is rep
11c50 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f  resented in memo
11c60 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e 73 74  ry.** by an inst
11c70 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
11c80 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
11c90 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62 6c 65  .*/.struct Table
11ca0 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65   {.  char *zName
11cb0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ;         /* Nam
11cc0 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 6f  e of the table o
11cd0 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f 6c 75  r view */.  Colu
11ce0 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20 20 20  mn *aCol;       
11cf0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
11d00 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c 75 6d  about each colum
11d10 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70 49  n */.  Index *pI
11d20 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a 20 4c  ndex;       /* L
11d30 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64 65 78  ist of SQL index
11d40 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62 6c 65  es on this table
11d50 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  . */.  Select *p
11d60 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 4e  Select;     /* N
11d70 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73 2e 20  ULL for tables. 
11d80 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66 69 6e   Points to defin
11d90 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65 77 2e  ition if a view.
11da0 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46 4b 65   */.  FKey *pFKe
11db0 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69  y;         /* Li
11dc0 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61 6c 6c  nked list of all
11dd0 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 69 6e   foreign keys in
11de0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
11df0 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20   char *zColAff; 
11e00 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
11e10 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
11e20 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
11e30 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72 4c 69  lumn */.  ExprLi
11e40 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20 20 2f  st *pCheck;    /
11e50 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f 6e 73  * All CHECK cons
11e60 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20 20 20  traints */.     
11e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e80 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73 6f 20    /*   ... also 
11e90 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e 20 6e  used as column n
11ea0 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20 56 49  ame list in a VI
11eb0 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d  EW */.  int tnum
11ec0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
11ed0 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67 65 20  Root BTree page 
11ee0 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65 20 2a  for this table *
11ef0 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65 66 3b  /.  u32 nTabRef;
11f00 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
11f10 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74  er of pointers t
11f20 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a  o this Table */.
11f30 20 20 75 33 32 20 74 61 62 46 6c 61 67 73 3b 20    u32 tabFlags; 
11f40 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
11f50 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f  f TF_* values */
11f60 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20 20 20  .  i16 iPKey;   
11f70 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f          /* If no
11f80 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73 65 20  t negative, use 
11f90 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73 20 74  aCol[iPKey] as t
11fa0 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20 69 31  he rowid */.  i1
11fb0 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20 20 20  6 nCol;         
11fc0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
11fd0 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69 73 20  columns in this 
11fe0 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73  table */.  LogEs
11ff0 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20 20 20  t nRowLogEst;   
12000 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72 6f 77  /* Estimated row
12010 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66 72 6f  s in table - fro
12020 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31 20 74  m sqlite_stat1 t
12030 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  able */.  LogEst
12040 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20 20 2f   szTabRow;     /
12050 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65  * Estimated size
12060 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65 20 72   of each table r
12070 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 23  ow in bytes */.#
12080 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
12090 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20 20 4c  BLE_COSTMULT.  L
120a0 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74 3b 20  ogEst costMult; 
120b0 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75 6c 74      /* Cost mult
120c0 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69 6e 67  iplier for using
120d0 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 23   this table */.#
120e0 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79 43 6f  endif.  u8 keyCo
120f0 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  nf;          /* 
12100 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20 63 61  What to do in ca
12110 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65 73 73  se of uniqueness
12120 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69 50 4b   conflict on iPK
12130 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  ey */.#ifndef SQ
12140 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45 52 54  LITE_OMIT_ALTERT
12150 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64 43 6f  ABLE.  int addCo
12160 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a 20 4f  lOffset;    /* O
12170 66 66 73 65 74 20 69 6e 20 43 52 45 41 54 45 20  ffset in CREATE 
12180 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20 61 64  TABLE stmt to ad
12190 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e 20 2a  d a new column *
121a0 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  /.#endif.#ifndef
121b0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
121c0 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e 74 20  TUALTABLE.  int 
121d0 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20 20 20  nModuleArg;     
121e0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72   /* Number of ar
121f0 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65 20 6d  guments to the m
12200 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61 72 20  odule */.  char 
12210 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b 20 20  **azModuleArg;  
12220 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31 3a 20  /* 0: module 1: 
12230 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62 20 6e  schema 2: vtab n
12240 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73 20 2a  ame 3...: args *
12250 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56 54 61  /.  VTable *pVTa
12260 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69 73 74  ble;     /* List
12270 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a 65 63   of VTable objec
12280 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  ts. */.#endif.  
12290 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67 65  Trigger *pTrigge
122a0 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20  r;   /* List of 
122b0 74 72 69 67 67 65 72 73 20 73 74 6f 72 65 64 20  triggers stored 
122c0 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a 20 20  in pSchema */.  
122d0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
122e0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 74       /* Schema t
122f0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 69  hat contains thi
12300 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 61 62  s table */.  Tab
12310 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69 65 3b  le *pNextZombie;
12320 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74 68 65    /* Next on the
12330 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65 54 61   Parse.pZombieTa
12340 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  b list */.};../*
12350 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
12360 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74 61 62  es for Table.tab
12370 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54 46 5f  Flags..**.** TF_
12380 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c 69 65  OOOHidden applie
12390 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72 20 76  s to tables or v
123a0 69 65 77 20 74 68 61 74 20 68 61 76 65 20 68 69  iew that have hi
123b0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74 68 61  dden columns tha
123c0 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f 77 65  t are.** followe
123d0 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65 6e 20  d by non-hidden 
123e0 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d 70 6c  columns.  Exampl
123f0 65 3a 20 20 22 43 52 45 41 54 45 20 56 49 52 54  e:  "CREATE VIRT
12400 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53 49 4e  UAL TABLE x USIN
12410 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48 49 44  G.** vtab1(a HID
12420 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69 6e 63  DEN, b);".  Sinc
12430 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e 2d 68  e "b" is a non-h
12440 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62 75 74  idden column but
12450 20 22 61 22 20 69 73 20 68 69 64 64 65 6e 2c 0a   "a" is hidden,.
12460 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48 69 64  ** the TF_OOOHid
12470 64 65 6e 20 61 74 74 72 69 62 75 74 65 20 77 6f  den attribute wo
12480 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74 68 69  uld apply in thi
12490 73 20 63 61 73 65 2e 20 20 53 75 63 68 20 74 61  s case.  Such ta
124a0 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a 2a 20  bles require.** 
124b0 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69 6e 67  special handling
124c0 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54 20 70   during INSERT p
124d0 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a 23 64  rocessing..*/.#d
124e0 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f 6e 6c  efine TF_Readonl
124f0 79 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20  y        0x0001 
12500 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c 79 20     /* Read-only 
12510 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a 2f 0a  system table */.
12520 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68 65 6d  #define TF_Ephem
12530 65 72 61 6c 20 20 20 20 20 20 20 30 78 30 30 30  eral       0x000
12540 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68 65 6d  2    /* An ephem
12550 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64  eral table */.#d
12560 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72 69 6d  efine TF_HasPrim
12570 61 72 79 4b 65 79 20 20 20 30 78 30 30 30 34 20  aryKey   0x0004 
12580 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
12590 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
125a0 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
125b0 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 30  increment   0x00
125c0 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72  08    /* Integer
125d0 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20   primary key is 
125e0 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f  autoincrement */
125f0 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 53  .#define TF_HasS
12600 74 61 74 31 20 20 20 20 20 20 20 20 30 78 30 30  tat1        0x00
12610 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c 6f 67  10    /* nRowLog
12620 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73 71 6c  Est set from sql
12630 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23 64 65  ite_stat1 */.#de
12640 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52  fine TF_WithoutR
12650 6f 77 69 64 20 20 20 20 30 78 30 30 32 30 20 20  owid    0x0020  
12660 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e 20 20    /* No rowid.  
12670 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73 20 74  PRIMARY KEY is t
12680 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66 69 6e  he key */.#defin
12690 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f  e TF_NoVisibleRo
126a0 77 69 64 20 20 30 78 30 30 34 30 20 20 20 20 2f  wid  0x0040    /
126b0 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69 62 6c  * No user-visibl
126c0 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75 6d 6e  e "rowid" column
126d0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 4f   */.#define TF_O
126e0 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20 20 30  OOHidden       0
126f0 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75 74 2d  x0080    /* Out-
12700 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65 6e 20  of-Order hidden 
12710 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65 66 69  columns */.#defi
12720 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65 64 20  ne TF_StatsUsed 
12730 20 20 20 20 20 20 30 78 30 31 30 30 20 20 20 20        0x0100    
12740 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e 65 72  /* Query planner
12750 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66 65 63   decisions affec
12760 74 65 64 20 62 79 0a 20 20 20 20 20 20 20 20 20  ted by.         
12770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12780 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 49              ** I
12790 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45 73 74  ndex.aiRowLogEst
127a0 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23 64 65  [] values */.#de
127b0 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74 4e 75  fine TF_HasNotNu
127c0 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30 20 20  ll      0x0200  
127d0 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 4e 4f    /* Contains NO
127e0 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e  T NULL constrain
127f0 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 65 73  ts */../*.** Tes
12800 74 20 74 6f 20 73 65 65 20 77 68 65 74 68 65 72  t to see whether
12810 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20   or not a table 
12820 69 73 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  is a virtual tab
12830 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20  le.  This is.** 
12840 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20  done as a macro 
12850 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20  so that it will 
12860 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74  be optimized out
12870 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a   when virtual.**
12880 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69   table support i
12890 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74  s omitted from t
128a0 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66  he build..*/.#if
128b0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
128c0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20  _VIRTUALTABLE.# 
128d0 20 64 65 66 69 6e 65 20 49 73 56 69 72 74 75 61   define IsVirtua
128e0 6c 28 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e  l(X)      ((X)->
128f0 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65 6c 73  nModuleArg).#els
12900 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73 56 69  e.#  define IsVi
12910 72 74 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a  rtual(X)      0.
12920 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61  #endif../*.** Ma
12930 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e  cros to determin
12940 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73  e if a column is
12950 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69   hidden.  IsOrdi
12960 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
12970 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73  ().** only works
12980 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c   for non-virtual
12990 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72   tables (ordinar
129a0 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65  y tables and vie
129b0 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c  ws) and is.** al
129c0 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73  ways false unles
129d0 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  s SQLITE_ENABLE_
129e0 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69  HIDDEN_COLUMNS i
129f0 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a  s defined.  The.
12a00 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ** IsHiddenColum
12a10 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e  n() macro is gen
12a20 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f  eral purpose..*/
12a30 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
12a40 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45  ITE_ENABLE_HIDDE
12a50 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65  N_COLUMNS).#  de
12a60 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c  fine IsHiddenCol
12a70 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28  umn(X)         (
12a80 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  ((X)->colFlags &
12a90 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29   COLFLAG_HIDDEN)
12aa0 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49  !=0).#  define I
12ab0 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43  sOrdinaryHiddenC
12ac0 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e  olumn(X) (((X)->
12ad0 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
12ae0 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23  AG_HIDDEN)!=0).#
12af0 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  elif !defined(SQ
12b00 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41  LITE_OMIT_VIRTUA
12b10 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e  LTABLE).#  defin
12b20 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  e IsHiddenColumn
12b30 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28 58  (X)         (((X
12b40 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  )->colFlags & CO
12b50 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30  LFLAG_HIDDEN)!=0
12b60 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  ).#  define IsOr
12b70 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
12b80 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20  mn(X) 0.#else.# 
12b90 20 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e   define IsHidden
12ba0 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20  Column(X)       
12bb0 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73    0.#  define Is
12bc0 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
12bd0 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66  lumn(X) 0.#endif
12be0 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74  .../* Does the t
12bf0 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69  able have a rowi
12c00 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73  d */.#define Has
12c10 52 6f 77 69 64 28 58 29 20 20 20 20 20 28 28 28  Rowid(X)     (((
12c20 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54  X)->tabFlags & T
12c30 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d  F_WithoutRowid)=
12c40 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69  =0).#define Visi
12c50 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28 28 58  bleRowid(X) (((X
12c60 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46  )->tabFlags & TF
12c70 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29  _NoVisibleRowid)
12c80 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ==0)../*.** Each
12c90 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
12ca0 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e  straint is an in
12cb0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
12cc0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
12cd0 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69  e..**.** A forei
12ce0 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69  gn key is associ
12cf0 61 74 65 64 20 77 69 74 68 20 74 77 6f 20 74 61  ated with two ta
12d00 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d  bles.  The "from
12d10 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68  " table is.** th
12d20 65 20 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e  e table that con
12d30 74 61 69 6e 73 20 74 68 65 20 52 45 46 45 52 45  tains the REFERE
12d40 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68 61 74  NCES clause that
12d50 20 63 72 65 61 74 65 73 20 74 68 65 20 66 6f 72   creates the for
12d60 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68  eign.** key.  Th
12d70 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20  e "to" table is 
12d80 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 69  the table that i
12d90 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52  s named in the R
12da0 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65  EFERENCES clause
12db0 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68  ..** Consider th
12dc0 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a  is example:.**.*
12dd0 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42  *     CREATE TAB
12de0 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20  LE ex1(.**      
12df0 20 61 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41   a INTEGER PRIMA
12e00 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20  RY KEY,.**      
12e10 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54   b INTEGER CONST
12e20 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45  RAINT fk1 REFERE
12e30 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20  NCES ex2(x).**  
12e40 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20     );.**.** For 
12e50 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31  foreign key "fk1
12e60 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c  ", the from-tabl
12e70 65 20 69 73 20 22 65 78 31 22 20 61 6e 64 20 74  e is "ex1" and t
12e80 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22  he to-table is "
12e90 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c  ex2"..** Equival
12ea0 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a  ent names:.**.**
12eb0 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20       from-table 
12ec0 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a  == child-table.*
12ed0 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65  *       to-table
12ee0 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65   == parent-table
12ef0 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45  .**.** Each REFE
12f00 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65  RENCES clause ge
12f10 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61  nerates an insta
12f20 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
12f30 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a  wing structure.*
12f40 2a 20 77 68 69 63 68 20 69 73 20 61 74 74 61 63  * which is attac
12f50 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d  hed to the from-
12f60 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74  table.  The to-t
12f70 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78  able need not ex
12f80 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20  ist when.** the 
12f90 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72  from-table is cr
12fa0 65 61 74 65 64 2e 20 20 54 68 65 20 65 78 69 73  eated.  The exis
12fb0 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d  tence of the to-
12fc0 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65  table is not che
12fd0 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  cked..**.** The 
12fe0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65  list of all pare
12ff0 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61  nts for child Ta
13000 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20 61 74  ble X is held at
13010 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20   X.pFKey..**.** 
13020 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68  A list of all ch
13030 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62  ildren for a tab
13040 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63  le named Z (whic
13050 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e  h might not even
13060 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65   exist).** is he
13070 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65  ld in Schema.fke
13080 79 48 61 73 68 20 77 69 74 68 20 61 20 68 61 73  yHash with a has
13090 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73  h key of Z..*/.s
130a0 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54  truct FKey {.  T
130b0 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20  able *pFrom;    
130c0 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69   /* Table contai
130d0 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e  ning the REFEREN
130e0 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a  CES clause (aka:
130f0 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65   Child) */.  FKe
13100 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f  y *pNextFrom;  /
13110 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68  * Next FKey with
13120 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72   the same in pFr
13130 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20  om. Next parent 
13140 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68  of pFrom */.  ch
13150 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20  ar *zTo;        
13160 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65  /* Name of table
13170 20 74 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f   that the key po
13180 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61  ints to (aka: Pa
13190 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20  rent) */.  FKey 
131a0 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20  *pNextTo;    /* 
131b0 4e 65 78 74 20 77 69 74 68 20 74 68 65 20 73 61  Next with the sa
131c0 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69  me zTo. Next chi
131d0 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20  ld of zTo. */.  
131e0 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20  FKey *pPrevTo;  
131f0 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69    /* Previous wi
13200 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20  th the same zTo 
13210 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20  */.  int nCol;  
13220 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
13230 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74   of columns in t
13240 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20  his key */.  /* 
13250 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31  EV: R-30323-2191
13260 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65  7 */.  u8 isDefe
13270 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54  rred;       /* T
13280 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e  rue if constrain
13290 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65  t checking is de
132a0 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d  ferred till COMM
132b0 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69  IT */.  u8 aActi
132c0 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a  on[2];        /*
132d0 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f   ON DELETE and O
132e0 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73  N UPDATE actions
132f0 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a  , respectively *
13300 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61 70 54  /.  Trigger *apT
13310 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69  rigger[2];/* Tri
13320 67 67 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f  ggers for aActio
13330 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20  n[] actions */. 
13340 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20   struct sColMap 
13350 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e  {      /* Mappin
13360 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  g of columns in 
13370 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73  pFrom to columns
13380 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69   in zTo */.    i
13390 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20  nt iFrom;       
133a0 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66       /* Index of
133b0 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d   column in pFrom
133c0 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43   */.    char *zC
133d0 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ol;           /*
133e0 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20   Name of column 
133f0 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c  in zTo.  If NULL
13400 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59   use PRIMARY KEY
13410 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b   */.  } aCol[1];
13420 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
13430 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63  ne entry for eac
13440 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e  h of nCol column
13450 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53  s */.};../*.** S
13460 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d  QLite supports m
13470 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20 77 61  any different wa
13480 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20  ys to resolve a 
13490 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
134a0 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70  ror.  ROLLBACK p
134b0 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20  rocessing means 
134c0 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e  that a constrain
134d0 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63  t violation.** c
134e0 61 75 73 65 73 20 74 68 65 20 6f 70 65 72 61 74  auses the operat
134f0 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74  ion in process t
13500 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74  o fail and for t
13510 68 65 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73  he current trans
13520 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20  action.** to be 
13530 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42  rolled back.  AB
13540 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  ORT processing m
13550 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69  eans the operati
13560 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a  on in process.**
13570 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70   fails and any p
13580 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f  rior changes fro
13590 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61  m that one opera
135a0 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20  tion are backed 
135b0 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20  out,.** but the 
135c0 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e  transaction is n
135d0 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20  ot rolled back. 
135e0 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67   FAIL processing
135f0 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74   means that.** t
13600 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20  he operation in 
13610 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61  progress stops a
13620 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72  nd returns an er
13630 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70  ror code.  But p
13640 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20  rior.** changes 
13650 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20  due to the same 
13660 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f  operation are no
13670 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64  t backed out and
13680 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20   no rollback.** 
13690 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20  occurs.  IGNORE 
136a0 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 70  means that the p
136b0 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68  articular row th
136c0 61 74 20 63 61 75 73 65 64 20 74 68 65 20 63 6f  at caused the co
136d0 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
136e0 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65  r is not inserte
136f0 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50  d or updated.  P
13700 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e  rocessing contin
13710 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72  ues and no error
13720 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e  .** is returned.
13730 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20    REPLACE means 
13740 74 68 61 74 20 70 72 65 65 78 69 73 74 69 6e 67  that preexisting
13750 20 64 61 74 61 62 61 73 65 20 72 6f 77 73 20 74   database rows t
13760 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20  hat caused.** a 
13770 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e  UNIQUE constrain
13780 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20  t violation are 
13790 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20  removed so that 
137a0 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f  the new insert o
137b0 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20  r.** update can 
137c0 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73  proceed.  Proces
137d0 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61  sing continues a
137e0 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72  nd no error is r
137f0 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52  eported..**.** R
13800 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c  ESTRICT, SETNULL
13810 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20 61 63  , and CASCADE ac
13820 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79  tions apply only
13830 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73   to foreign keys
13840 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73  ..** RESTRICT is
13850 20 74 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f   the same as ABO
13860 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45  RT for IMMEDIATE
13870 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e   foreign keys an
13880 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73  d the.** same as
13890 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45   ROLLBACK for DE
138a0 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45  FERRED keys.  SE
138b0 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74  TNULL means that
138c0 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20   the foreign.** 
138d0 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55  key is set to NU
138e0 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61  LL.  CASCADE mea
138f0 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45 54 45  ns that a DELETE
13900 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20 74 68   or UPDATE of th
13910 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20  e.** referenced 
13920 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f  table row is pro
13930 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65  pagated into the
13940 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20   row that holds 
13950 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b  the.** foreign k
13960 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f  ey..**.** The fo
13970 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63  llowing symbolic
13980 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65 64   values are used
13990 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68   to record which
139a0 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69   type.** of acti
139b0 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23  on to take..*/.#
139c0 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20  define OE_None  
139d0 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20     0   /* There 
139e0 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74  is no constraint
139f0 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65   to check */.#de
13a00 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b  fine OE_Rollback
13a10 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65   1   /* Fail the
13a20 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72   operation and r
13a30 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e  ollback the tran
13a40 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
13a50 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32  ne OE_Abort    2
13a60 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63     /* Back out c
13a70 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f  hanges but do no
13a80 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61   rollback transa
13a90 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
13aa0 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20   OE_Fail     3  
13ab0 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65   /* Stop the ope
13ac0 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65  ration but leave
13ad0 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67   all prior chang
13ae0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  es */.#define OE
13af0 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a  _Ignore   4   /*
13b00 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f   Ignore the erro
13b10 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65  r. Do not do the
13b20 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54   INSERT or UPDAT
13b30 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f  E */.#define OE_
13b40 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20  Replace  5   /* 
13b50 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20  Delete existing 
13b60 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20  record, then do 
13b70 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45  INSERT or UPDATE
13b80 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f   */..#define OE_
13b90 52 65 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20  Restrict 6   /* 
13ba0 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d  OE_Abort for IMM
13bb0 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62  EDIATE, OE_Rollb
13bc0 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44  ack for DEFERRED
13bd0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
13be0 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53  etNull  7   /* S
13bf0 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
13c00 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c  ey value to NULL
13c10 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53   */.#define OE_S
13c20 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53  etDflt  8   /* S
13c30 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b  et the foreign k
13c40 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20  ey value to its 
13c50 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69  default */.#defi
13c60 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39  ne OE_Cascade  9
13c70 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68     /* Cascade th
13c80 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64  e changes */..#d
13c90 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74  efine OE_Default
13ca0 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74    10  /* Do what
13cb0 65 76 65 72 20 74 68 65 20 64 65 66 61 75 6c 74  ever the default
13cc0 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a   action is */...
13cd0 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
13ce0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
13cf0 6e 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ng structure is 
13d00 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66 69  passed as the fi
13d10 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20  rst.** argument 
13d20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65  to sqlite3VdbeKe
13d30 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20  yCompare and is 
13d40 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20  used to control 
13d50 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f  the.** compariso
13d60 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64  n of the two ind
13d70 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e  ex keys..**.** N
13d80 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72  ote that aSortOr
13d90 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b  der[] and aColl[
13da0 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20  ] have nField+1 
13db0 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a  slots.  There.**
13dc0 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74   are nField slot
13dd0 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  s for the column
13de0 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68  s of an index th
13df0 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f  en one extra slo
13e00 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77  t.** for the row
13e10 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a  id at the end..*
13e20 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f  /.struct KeyInfo
13e30 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20   {.  u32 nRef;  
13e40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13e50 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73  er of references
13e60 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f   to this KeyInfo
13e70 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20   object */.  u8 
13e80 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
13e90 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e   /* Text encodin
13ea0 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53  g - one of the S
13eb0 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65  QLITE_UTF* value
13ec0 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c  s */.  u16 nFiel
13ed0 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  d;         /* Nu
13ee0 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75  mber of key colu
13ef0 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78  mns in the index
13f00 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c   */.  u16 nXFiel
13f10 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  d;        /* Num
13f20 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62  ber of columns b
13f30 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f  eyond the key co
13f40 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74  lumns */.  sqlit
13f50 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f  e3 *db;        /
13f60 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
13f70 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75  onnection */.  u
13f80 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20  8 *aSortOrder;  
13f90 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72     /* Sort order
13fa0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
13fb0 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a  . */.  CollSeq *
13fc0 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f  aColl[1];  /* Co
13fd0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
13fe0 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f   for each term o
13ff0 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a  f the key */.};.
14000 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65  ./*.** This obje
14010 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72  ct holds a recor
14020 64 20 77 68 69 63 68 20 68 61 73 20 62 65 65 6e  d which has been
14030 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f   parsed out into
14040 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66   individual.** f
14050 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70  ields, for the p
14060 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67  urposes of doing
14070 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a   a comparison..*
14080 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73  *.** A record is
14090 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20   an object that 
140a0 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20  contains one or 
140b0 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64  more fields of d
140c0 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20  ata..** Records 
140d0 61 72 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72  are used to stor
140e0 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66  e the content of
140f0 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64   a table row and
14100 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65   to store.** the
14110 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78   key of an index
14120 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69  .  A blob encodi
14130 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69  ng of a record i
14140 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20  s created by.** 
14150 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72  the OP_MakeRecor
14160 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20  d opcode of the 
14170 56 44 42 45 20 61 6e 64 20 69 73 20 64 69 73 61  VDBE and is disa
14180 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a  ssembled by the.
14190 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63  ** OP_Column opc
141a0 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e  ode..**.** An in
141b0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
141c0 62 6a 65 63 74 20 73 65 72 76 65 73 20 61 73 20  bject serves as 
141d0 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e  a "key" for doin
141e0 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a  g a search on.**
141f0 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65   an index b+tree
14200 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68  . The goal of th
14210 65 20 73 65 61 72 63 68 20 69 73 20 74 6f 20 66  e search is to f
14220 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20 74 68  ind the entry th
14230 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20  at.** is closed 
14240 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73 63 72  to the key descr
14250 69 62 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a  ibed by this obj
14260 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63  ect.  This objec
14270 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20  t might hold.** 
14280 6a 75 73 74 20 61 20 70 72 65 66 69 78 20 6f 66  just a prefix of
14290 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e   the key.  The n
142a0 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20  umber of fields 
142b0 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70  is given by.** p
142c0 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e  KeyInfo->nField.
142d0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e  .**.** The r1 an
142e0 64 20 72 32 20 66 69 65 6c 64 73 20 61 72 65 20  d r2 fields are 
142f0 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65  the values to re
14300 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79  turn if this key
14310 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a   is less than.**
14320 20 6f 72 20 67 72 65 61 74 65 72 20 74 68 61 6e   or greater than
14330 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74   a key in the bt
14340 72 65 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ree, respectivel
14350 79 2e 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f  y.  These are no
14360 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64  rmally.** -1 and
14370 20 2b 31 20 72 65 73 70 65 63 74 69 76 65 6c 79   +1 respectively
14380 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65 20 69  , but might be i
14390 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e  nverted to +1 an
143a0 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72  d -1 if the b-tr
143b0 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43  ee.** is in DESC
143c0 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68   order..**.** Th
143d0 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e  e key comparison
143e0 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61   functions actua
143f0 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66 61 75  lly return defau
14400 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20  lt_rc when they 
14410 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c  find.** an equal
14420 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64  s comparison.  d
14430 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
14440 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20   -1, 0, or +1.  
14450 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20  If there are.** 
14460 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73  multiple entries
14470 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77   in the b-tree w
14480 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79  ith the same key
14490 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b   (when only look
144a0 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69  ing.** at the fi
144b0 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46  rst pKeyInfo->nF
144c0 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66  ields,) then def
144d0 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73  ault_rc can be s
144e0 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63  et to -1 to.** c
144f0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
14500 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74  to find the last
14510 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f   match, or +1 to
14520 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
14530 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65  h to.** find the
14540 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a   first match..**
14550 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70  .** The key comp
14560 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  arison functions
14570 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e   will set eqSeen
14580 20 74 6f 20 74 72 75 65 20 69 66 20 74 68 65 79   to true if they
14590 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64   ever.** get and
145a0 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77   equal results w
145b0 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68  hen comparing th
145c0 69 73 20 73 74 72 75 63 74 75 72 65 20 74 6f 20  is structure to 
145d0 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e  a b-tree record.
145e0 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74  .** When default
145f0 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72  _rc!=0, the sear
14600 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20  ch might end up 
14610 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d  on the record im
14620 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66  mediately.** bef
14630 6f 72 65 20 74 68 65 20 66 69 72 73 74 20 6d 61  ore the first ma
14640 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65  tch or immediate
14650 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c 61 73  ly after the las
14660 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a  t match.  The.**
14670 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69   eqSeen field wi
14680 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68 65 74  ll indicate whet
14690 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78  her or not an ex
146a0 61 63 74 20 6d 61 74 63 68 20 65 78 69 73 74 73  act match exists
146b0 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65   in the.** b-tre
146c0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70  e..*/.struct Unp
146d0 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20  ackedRecord {.  
146e0 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66  KeyInfo *pKeyInf
146f0 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e  o;  /* Collation
14700 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20   and sort-order 
14710 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20  information */. 
14720 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20   Mem *aMem;     
14730 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a       /* Values *
14740 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20  /.  u16 nField; 
14750 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14760 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20  r of entries in 
14770 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20  apMem[] */.  i8 
14780 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20  default_rc;     
14790 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72   /* Comparison r
147a0 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72  esult if keys ar
147b0 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20  e equal */.  u8 
147c0 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20  errCode;        
147d0 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74   /* Error detect
147e0 65 64 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d  ed by xRecordCom
147f0 70 61 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72  pare (CORRUPT or
14800 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20   NOMEM) */.  i8 
14810 72 31 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  r1;             
14820 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
14830 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68  urn if (lhs > rh
14840 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20  s) */.  i8 r2;  
14850 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
14860 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69  alue to return i
14870 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f  f (rhs < lhs) */
14880 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20  .  u8 eqSeen;   
14890 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
148a0 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f  f an equality co
148b0 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65  mparison has bee
148c0 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f  n seen */.};.../
148d0 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e  *.** Each SQL in
148e0 64 65 78 20 69 73 20 72 65 70 72 65 73 65 6e 74  dex is represent
148f0 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20  ed in memory by 
14900 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f  an.** instance o
14910 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
14920 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
14930 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20   The columns of 
14940 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 61  the table that a
14950 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64  re to be indexed
14960 20 61 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a   are described.*
14970 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d  * by the aiColum
14980 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69  n[] field of thi
14990 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  s structure.  Fo
149a0 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f  r example, suppo
149b0 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68  se.** we have th
149c0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c  e following tabl
149d0 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a  e and index:.**.
149e0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54 41  **     CREATE TA
149f0 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20  BLE Ex1(c1 int, 
14a00 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29  c2 int, c3 text)
14a10 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  ;.**     CREATE 
14a20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31  INDEX Ex2 ON Ex1
14a30 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49  (c3,c1);.**.** I
14a40 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74 72 75  n the Table stru
14a50 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67  cture describing
14a60 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65   Ex1, nCol==3 be
14a70 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 0a  cause there are.
14a80 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73  ** three columns
14a90 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20   in the table.  
14aa0 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73 74 72  In the Index str
14ab0 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69 6e  ucture describin
14ac0 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d  g.** Ex2, nColum
14ad0 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20  n==2 since 2 of 
14ae0 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66  the 3 columns of
14af0 20 45 78 31 20 61 72 65 20 69 6e 64 65 78 65 64   Ex1 are indexed
14b00 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f  ..** The value o
14b10 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32  f aiColumn is {2
14b20 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b  , 0}.  aiColumn[
14b30 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68  0]==2 because th
14b40 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d  e.** first colum
14b50 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20  n to be indexed 
14b60 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65  (c3) has an inde
14b70 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43  x of 2 in Ex1.aC
14b80 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63  ol[]..** The sec
14b90 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65  ond column to be
14ba0 20 69 6e 64 65 78 65 64 20 28 63 31 29 20 68 61   indexed (c1) ha
14bb0 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20  s an index of 0 
14bc0 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d  in.** Ex1.aCol[]
14bd0 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f  , hence Ex2.aiCo
14be0 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a  lumn[1]==0..**.*
14bf0 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72  * The Index.onEr
14c00 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d  ror field determ
14c10 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72 20  ines whether or 
14c20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65 64 20  not the indexed 
14c30 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20  columns.** must 
14c40 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68  be unique and wh
14c50 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79  at to do if they
14c60 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20   are not.  When 
14c70 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45  Index.onError=OE
14c80 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61  _None,.** it mea
14c90 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61  ns this is not a
14ca0 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20   unique index.  
14cb0 4f 74 68 65 72 77 69 73 65 20 69 74 20 69 73 20  Otherwise it is 
14cc0 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a  a unique index.*
14cd0 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20  * and the value 
14ce0 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72  of Index.onError
14cf0 20 69 6e 64 69 63 61 74 65 20 74 68 65 20 77 68   indicate the wh
14d00 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73  ich conflict res
14d10 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72  olution.** algor
14d20 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77  ithm to employ w
14d30 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d  henever an attem
14d40 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e  pt is made to in
14d50 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75  sert a non-uniqu
14d60 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a  e.** element..**
14d70 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e  .** While parsin
14d80 67 20 61 20 43 52 45 41 54 45 20 54 41 42 4c 45  g a CREATE TABLE
14d90 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44 45 58   or CREATE INDEX
14da0 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72   statement in or
14db0 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61  der to.** genera
14dc0 74 65 20 56 44 42 45 20 63 6f 64 65 20 28 61 73  te VDBE code (as
14dd0 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73   opposed to pars
14de0 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f  ing one read fro
14df0 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74  m an sqlite_mast
14e00 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70  er.** table as p
14e10 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61  art of parsing a
14e20 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  n existing datab
14e30 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61  ase schema), tra
14e40 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73  nsient instances
14e50 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75  .** of this stru
14e60 63 74 75 72 65 20 6d 61 79 20 62 65 20 63 72 65  cture may be cre
14e70 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61  ated. In this ca
14e80 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75  se the Index.tnu
14e90 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a  m variable is.**
14ea0 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74   used to store t
14eb0 68 65 20 61 64 64 72 65 73 73 20 6f 66 20 61 20  he address of a 
14ec0 56 44 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e  VDBE instruction
14ed0 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65  , not a database
14ee0 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20   page.** number 
14ef0 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65  (it cannot - the
14f00 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 69   database page i
14f10 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20  s not allocated 
14f20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a  until the VDBE.*
14f30 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65  * program is exe
14f40 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76  cuted). See conv
14f50 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69  ertToWithoutRowi
14f60 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74  dTable() for det
14f70 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ails..*/.struct 
14f80 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a  Index {.  char *
14f90 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20  zName;          
14fa0 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
14fb0 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31  is index */.  i1
14fc0 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20  6 *aiColumn;    
14fd0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
14fe0 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
14ff0 20 62 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20   by this index. 
15000 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c   1st is 0 */.  L
15010 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45  ogEst *aiRowLogE
15020 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20  st;     /* From 
15030 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f  ANALYZE: Est. ro
15040 77 73 20 73 65 6c 65 63 74 65 64 20 62 79 20 65  ws selected by e
15050 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
15060 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20  Table *pTable;  
15070 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15080 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20  SQL table being 
15090 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61  indexed */.  cha
150a0 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20  r *zColAff;     
150b0 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20        /* String 
150c0 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66  defining the aff
150d0 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f  inity of each co
150e0 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20  lumn */.  Index 
150f0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
15100 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69     /* The next i
15110 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65 64 20  ndex associated 
15120 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 74 61  with the same ta
15130 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20  ble */.  Schema 
15140 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20  *pSchema;       
15150 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74    /* Schema cont
15160 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65  aining this inde
15170 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74  x */.  u8 *aSort
15180 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20 20 20  Order;          
15190 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  /* for each colu
151a0 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20  mn: True==DESC, 
151b0 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20  False==ASC */.  
151c0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43  const char **azC
151d0 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61  oll;     /* Arra
151e0 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73  y of collation s
151f0 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f  equence names fo
15200 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70  r index */.  Exp
15210 72 20 2a 70 50 61 72 74 49 64 78 57 68 65 72 65  r *pPartIdxWhere
15220 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63  ;     /* WHERE c
15230 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74 69 61  lause for partia
15240 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45  l indices */.  E
15250 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70  xprList *aColExp
15260 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  r;      /* Colum
15270 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f  n expressions */
15280 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20  .  int tnum;    
15290 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
152a0 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e  B Page containin
152b0 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69  g root of this i
152c0 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74  ndex */.  LogEst
152d0 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20   szIdxRow;      
152e0 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20     /* Estimated 
152f0 61 76 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65  average row size
15300 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75   in bytes */.  u
15310 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20  16 nKeyCol;     
15320 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
15330 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72  r of columns for
15340 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a  ming the key */.
15350 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20    u16 nColumn;  
15360 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
15370 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15380 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e  stored in the in
15390 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72  dex */.  u8 onEr
153a0 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ror;            
153b0 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f    /* OE_Abort, O
153c0 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70  E_Ignore, OE_Rep
153d0 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65  lace, or OE_None
153e0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
153f0 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f  dxType:2;      /
15400 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d  * 1==UNIQUE, 2==
15410 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d  PRIMARY KEY, 0==
15420 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
15430 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72    unsigned bUnor
15440 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73  dered:1;   /* Us
15450 65 20 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72  e this index for
15460 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65   == or IN querie
15470 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69  s only */.  unsi
15480 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c  gned uniqNotNull
15490 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20  :1;  /* True if 
154a0 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e  UNIQUE and NOT N
154b0 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75  ULL for all colu
154c0 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  mns */.  unsigne
154d0 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20  d isResized:1;  
154e0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
154f0 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29  izeIndexObject()
15500 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64   has been called
15510 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
15520 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f  sCovering:1;   /
15530 2a 20 54 72 75 65 20 69 66 20 74 68 69 73 20 69  * True if this i
15540 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64  s a covering ind
15550 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ex */.  unsigned
15560 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20   noSkipScan:1;  
15570 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74   /* Do not try t
15580 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20  o use skip-scan 
15590 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 6e 73  if true */.  uns
155a0 69 67 6e 65 64 20 68 61 73 53 74 61 74 31 3a 31  igned hasStat1:1
155b0 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77 4c 6f  ;     /* aiRowLo
155c0 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f 6d 65  gEst values come
155d0 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61   from sqlite_sta
155e0 74 31 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  t1 */.#ifdef SQL
155f0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
15600 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e 74 20  _OR_STAT4.  int 
15610 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20 20 20  nSample;        
15620 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
15630 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20 61 53  f elements in aS
15640 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  ample[] */.  int
15650 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20 20 20   nSampleCol;    
15660 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
15670 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61 6e 45   IndexSample.anE
15680 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20 2a 2f  q[] and so on */
15690 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41 76 67  .  tRowcnt *aAvg
156a0 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41  Eq;         /* A
156b0 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c 75 65  verage nEq value
156c0 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74 20 69  s for keys not i
156d0 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20 20 49  n aSample */.  I
156e0 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53 61 6d  ndexSample *aSam
156f0 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d 70 6c  ple;    /* Sampl
15700 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74 2d 6d  es of the left-m
15710 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74 52 6f  ost key */.  tRo
15720 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74 3b 20  wcnt *aiRowEst; 
15730 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67        /* Non-log
15740 61 72 69 74 68 6d 69 63 20 73 74 61 74 31 20 64  arithmic stat1 d
15750 61 74 61 20 66 6f 72 20 74 68 69 73 20 69 6e 64  ata for this ind
15760 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20  ex */.  tRowcnt 
15770 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20 20 20  nRowEst0;       
15780 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69 74 68   /* Non-logarith
15790 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20 72 6f  mic number of ro
157a0 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20  ws in the index 
157b0 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
157c0 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75  .** Allowed valu
157d0 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69 64 78  es for Index.idx
157e0 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  Type.*/.#define 
157f0 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 41  SQLITE_IDXTYPE_A
15800 50 50 44 45 46 20 20 20 20 20 20 30 20 20 20 2f  PPDEF      0   /
15810 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e 67 20  * Created using 
15820 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
15830 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
15840 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20 20 20  DXTYPE_UNIQUE   
15850 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c 65 6d     1   /* Implem
15860 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20 63 6f  ents a UNIQUE co
15870 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66  nstraint */.#def
15880 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59  ine SQLITE_IDXTY
15890 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20 20 32  PE_PRIMARYKEY  2
158a0 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50 52 49     /* Is the PRI
158b0 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74 68 65  MARY KEY for the
158c0 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20 52 65   table */../* Re
158d0 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
158e0 65 78 20 58 20 69 73 20 61 20 50 52 49 4d 41 52  ex X is a PRIMAR
158f0 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f 0a 23  Y KEY index */.#
15900 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61 72 79  define IsPrimary
15910 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28 28 58  KeyIndex(X)  ((X
15920 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51 4c 49  )->idxType==SQLI
15930 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49 4d 41  TE_IDXTYPE_PRIMA
15940 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74 75 72  RYKEY)../* Retur
15950 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65 78 20  n true if index 
15960 58 20 69 73 20 61 20 55 4e 49 51 55 45 20 69 6e  X is a UNIQUE in
15970 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  dex */.#define I
15980 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58 29 20  sUniqueIndex(X) 
15990 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45 72 72       ((X)->onErr
159a0 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a 2f 2a  or!=OE_None)../*
159b0 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43 6f 6c   The Index.aiCol
159c0 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61 72 65  umn[] values are
159d0 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69 74 69   normally positi
159e0 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42 75 74  ve integer.  But
159f0 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20 73 6f  .** there are so
15a00 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75  me negative valu
15a10 65 73 20 74 68 61 74 20 68 61 76 65 20 73 70 65  es that have spe
15a20 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a 2a 2f  cial meaning:.*/
15a30 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f 57 49  .#define XN_ROWI
15a40 44 20 20 20 20 20 28 2d 31 29 20 20 20 20 20 2f  D     (-1)     /
15a50 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
15a60 20 69 73 20 74 68 65 20 72 6f 77 69 64 20 2a 2f   is the rowid */
15a70 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58 50 52  .#define XN_EXPR
15a80 20 20 20 20 20 20 28 2d 32 29 20 20 20 20 20 2f        (-2)     /
15a90 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75 6d 6e  * Indexed column
15aa0 20 69 73 20 61 6e 20 65 78 70 72 65 73 73 69 6f   is an expressio
15ab0 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  n */../*.** Each
15ac0 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64 20 69   sample stored i
15ad0 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73 74 61  n the sqlite_sta
15ae0 74 33 20 74 61 62 6c 65 20 69 73 20 72 65 70 72  t3 table is repr
15af0 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72  esented in memor
15b00 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73 74 72  y.** using a str
15b10 75 63 74 75 72 65 20 6f 66 20 74 68 69 73 20 74  ucture of this t
15b20 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75 6d 65  ype.  See docume
15b30 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65 20 74  ntation at the t
15b40 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61 6e 61  op of the.** ana
15b50 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20 66 69  lyze.c source fi
15b60 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f 6e 61  le for additiona
15b70 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a  l information..*
15b80 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78 53 61  /.struct IndexSa
15b90 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20 2a 70  mple {.  void *p
15ba0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 6f  ;          /* Po
15bb0 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c 65 64  inter to sampled
15bc0 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69 6e 74   record */.  int
15bd0 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f   n;            /
15be0 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f 72 64  * Size of record
15bf0 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 74   in bytes */.  t
15c00 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20 20 20  Rowcnt *anEq;   
15c10 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
15c20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 74 68  of rows where th
15c30 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74 68 69  e key equals thi
15c40 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74 52  s sample */.  tR
15c50 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20 20 20  owcnt *anLt;    
15c60 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20 6f  /* Est. number o
15c70 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b 65 79  f rows where key
15c80 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68   is less than th
15c90 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20 74  is sample */.  t
15ca0 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b 20 20  Rowcnt *anDLt;  
15cb0 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72 20   /* Est. number 
15cc0 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65 79 73  of distinct keys
15cd0 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69 73 20   less than this 
15ce0 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  sample */.};../*
15cf0 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e 20 63  .** Each token c
15d00 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74 68 65  oming out of the
15d10 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69 6e 73   lexer is an ins
15d20 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68 69 73  tance of.** this
15d30 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 6f 6b   structure.  Tok
15d40 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75 73 65  ens are also use
15d50 64 20 61 73 20 70 61 72 74 20 6f 66 20 61 6e 20  d as part of an 
15d60 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a 0a 2a  expression..**.*
15d70 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65 6e 2e  * Note if Token.
15d80 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65 6e 2e  z==0 then Token.
15d90 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20  dyn and Token.n 
15da0 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20 61 6e  are undefined an
15db0 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61 69 6e  d.** may contain
15dc0 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73 2e 20   random values. 
15dd0 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61 6e 79   Do not make any
15de0 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61 62 6f   assumptions abo
15df0 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a 2a 20  ut Token.dyn.** 
15e00 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68 65 6e  and Token.n when
15e10 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a 2f 0a   Token.z==0..*/.
15e20 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b 0a 20  struct Token {. 
15e30 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 20   const char *z; 
15e40 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66 20 74      /* Text of t
15e50 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74 20 4e  he token.  Not N
15e60 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64 21 20  ULL-terminated! 
15e70 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 6e  */.  unsigned in
15e80 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d 62 65  t n;    /* Numbe
15e90 72 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  r of characters 
15ea0 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20 2a 2f  in this token */
15eb0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  .};../*.** An in
15ec0 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73  stance of this s
15ed0 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69 6e  tructure contain
15ee0 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  s information ne
15ef0 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
15f00 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61 20 53  .** code for a S
15f10 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e 74 61  ELECT that conta
15f20 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
15f30 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 49  nctions..**.** I
15f40 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f 41 47  f Expr.op==TK_AG
15f50 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b 5f 41  G_COLUMN or TK_A
15f60 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68 65 6e  GG_FUNCTION then
15f70 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f 20 69   Expr.pAggInfo i
15f80 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 74  s a.** pointer t
15f90 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
15fa0 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43 6f 6c  .  The Expr.iCol
15fb0 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74 68 65  umn field is the
15fc0 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41 67 67   index in.** Agg
15fd0 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72 20 41  Info.aCol[] or A
15fe0 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d 20 6f  ggInfo.aFunc[] o
15ff0 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6e 65  f information ne
16000 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65  eded to generate
16010 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74 68 61  .** code for tha
16020 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 67  t node..**.** Ag
16030 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79 20 61  gInfo.pGroupBy a
16040 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63  nd AggInfo.aFunc
16050 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74 6f 20  .pExpr point to 
16060 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20 74 68  fields within th
16070 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20 53 65  e.** original Se
16080 6c 65 63 74 20 73 74 72 75 63 74 75 72 65 20 74  lect structure t
16090 68 61 74 20 64 65 73 63 72 69 62 65 73 20 74 68  hat describes th
160a0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
160b0 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20 66 69  nt.  These.** fi
160c0 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65 65 64  elds do not need
160d0 20 74 6f 20 62 65 20 66 72 65 65 64 20 77 68 65   to be freed whe
160e0 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67 20 74  n deallocating t
160f0 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72 75 63  he AggInfo struc
16100 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
16110 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38 20 64  AggInfo {.  u8 d
16120 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20 20 20  irectMode;      
16130 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20 72 65      /* Direct re
16140 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d 65 61  ndering mode mea
16150 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64 69 72  ns take data dir
16160 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20 20 20  ectly.          
16170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16180 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65 20 74  ** from source t
16190 61 62 6c 65 73 20 72 61 74 68 65 72 20 74 68 61  ables rather tha
161a0 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c 61 74  n from accumulat
161b0 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73 65 53  ors */.  u8 useS
161c0 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20 20 20  ortingIdx;      
161d0 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20 6d 6f   /* In direct mo
161e0 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20 74 68  de, reference th
161f0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
16200 72 61 74 68 65 72 0a 20 20 20 20 20 20 20 20 20  rather.         
16210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16220 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73 6f 75   ** than the sou
16230 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 69  rce table */.  i
16240 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b 20 20  nt sortingIdx;  
16250 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73 6f 72         /* Cursor
16260 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65 20 73   number of the s
16270 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a 2f 0a  orting index */.
16280 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
16290 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43 75 72  PTab;     /* Cur
162a0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 70 73  sor number of ps
162b0 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a 20 20  eudo-table */.  
162c0 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f 6c 75  int nSortingColu
162d0 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65  mn;     /* Numbe
162e0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  r of columns in 
162f0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
16300 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 67  x */.  int mnReg
16310 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20 20 2f  , mxReg;       /
16320 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67 69 73  * Range of regis
16330 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64 20 66  ters allocated f
16340 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46 75 6e  or aCol and aFun
16350 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  c */.  ExprList 
16360 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 20 2f  *pGroupBy;     /
16370 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79 20 63  * The group by c
16380 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72 75 63  lause */.  struc
16390 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20 7b 20  t AggInfo_col { 
163a0 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 63     /* For each c
163b0 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20 73 6f  olumn used in so
163c0 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f 0a 20  urce tables */. 
163d0 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
163e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
163f0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
16400 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20 20     int iTable;  
16410 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43              /* C
16420 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16430 74 68 65 20 73 6f 75 72 63 65 20 74 61 62 6c 65  the source table
16440 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 6f 6c   */.    int iCol
16450 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  umn;            
16460 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65   /* Column numbe
16470 72 20 77 69 74 68 69 6e 20 74 68 65 20 73 6f 75  r within the sou
16480 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  rce table */.   
16490 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f 6c 75   int iSorterColu
164a0 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 6c  mn;       /* Col
164b0 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 74 68  umn number in th
164c0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
164d0 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b  */.    int iMem;
164e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
164f0 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  /* Memory locati
16500 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20  on that acts as 
16510 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20  accumulator */. 
16520 20 20 20 45 78 70 72 20 2a 70 45 78 70 72 3b 20     Expr *pExpr; 
16530 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
16540 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78 70 72  he original expr
16550 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20 2a 61  ession */.  } *a
16560 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f 6c 75  Col;.  int nColu
16570 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  mn;            /
16580 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 64  * Number of used
16590 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43 6f 6c   entries in aCol
165a0 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 63 63  [] */.  int nAcc
165b0 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20 20 20  umulator;       
165c0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  /* Number of col
165d0 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77 20 74  umns that show t
165e0 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20 6f 75  hrough to the ou
165f0 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20 20 20  tput..          
16600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16610 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 63 6f  ** Additional co
16620 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 6f  lumns are used o
16630 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74 65 72  nly as parameter
16640 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20 20 20  s to.           
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
16660 2a 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  * aggregate func
16670 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72 75 63  tions */.  struc
16680 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63 20 7b  t AggInfo_func {
16690 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 61     /* For each a
166a0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
166b0 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  n */.    Expr *p
166c0 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 20  Expr;           
166d0 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20    /* Expression 
166e0 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66 75 6e  encoding the fun
166f0 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46 75 6e  ction */.    Fun
16700 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20 20 20  cDef *pFunc;    
16710 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61 67 67        /* The agg
16720 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20  regate function 
16730 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 2a  implementation *
16740 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d 3b 20  /.    int iMem; 
16750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
16760 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74 69 6f  * Memory locatio
16770 6e 20 74 68 61 74 20 61 63 74 73 20 61 73 20 61  n that acts as a
16780 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a 20 20  ccumulator */.  
16790 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63 74 3b    int iDistinct;
167a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
167b0 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 75 73  hemeral table us
167c0 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20 44 49  ed to enforce DI
167d0 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20 2a 61  STINCT */.  } *a
167e0 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46 75 6e  Func;.  int nFun
167f0 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
16800 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
16810 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b 5d 20  ries in aFunc[] 
16820 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
16830 20 64 61 74 61 74 79 70 65 20 79 6e 56 61 72 20   datatype ynVar 
16840 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e 74 65  is a signed inte
16850 67 65 72 2c 20 65 69 74 68 65 72 20 31 36 2d 62  ger, either 16-b
16860 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a 2a 2a  it or 32-bit..**
16870 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73 20 31   Usually it is 1
16880 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69 66 20  6-bits.  But if 
16890 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
168a0 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20 67 72  BLE_NUMBER is gr
168b0 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20 33 32  eater.** than 32
168c0 37 36 37 20 77 65 20 68 61 76 65 20 74 6f 20 6d  767 we have to m
168d0 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e 20 20  ake it 32-bit.  
168e0 31 36 2d 62 69 74 20 69 73 20 70 72 65 66 65 72  16-bit is prefer
168f0 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a 20 69  red because.** i
16900 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65 6d 6f  t uses less memo
16910 72 79 20 69 6e 20 74 68 65 20 45 78 70 72 20 6f  ry in the Expr o
16920 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69 73 20  bject, which is 
16930 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75 73 65  a big memory use
16940 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d 73 20  r.** in systems 
16950 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70 72 65  with lots of pre
16960 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73  pared statements
16970 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70 6c 69  .  And few appli
16980 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65 64 20  cations.** need 
16990 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75 74 20  more than about 
169a0 31 30 20 6f 72 20 32 30 20 76 61 72 69 61 62 6c  10 or 20 variabl
169b0 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 78  es.  But some ex
169c0 74 72 65 6d 65 20 75 73 65 72 73 20 77 61 6e 74  treme users want
169d0 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72 65 70  .** to have prep
169e0 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 73 20  ared statements 
169f0 77 69 74 68 20 6f 76 65 72 20 33 32 37 36 37 20  with over 32767 
16a00 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64 20 66  variables, and f
16a10 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65 20 6f  or them.** the o
16a20 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62  ption is availab
16a30 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65 2d 74  le (at compile-t
16a40 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ime)..*/.#if SQL
16a50 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42 4c 45  ITE_MAX_VARIABLE
16a60 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37 0a 74  _NUMBER<=32767.t
16a70 79 70 65 64 65 66 20 69 31 36 20 79 6e 56 61 72  ypedef i16 ynVar
16a80 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65 66 20  ;.#else.typedef 
16a90 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e 64 69  int ynVar;.#endi
16aa0 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 6e 6f  f../*.** Each no
16ab0 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65 73 73  de of an express
16ac0 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72 73 65  ion in the parse
16ad0 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e 73 74   tree is an inst
16ae0 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20  ance.** of this 
16af0 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a  structure..**.**
16b00 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68 65 20   Expr.op is the 
16b10 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e 74 65  opcode. The inte
16b20 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b 65 6e  ger parser token
16b30 20 63 6f 64 65 73 20 61 72 65 20 72 65 75 73 65   codes are reuse
16b40 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65 73 20  d.** as opcodes 
16b50 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d 70 6c  here. For exampl
16b60 65 2c 20 74 68 65 20 70 61 72 73 65 72 20 64 65  e, the parser de
16b70 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f 20 62  fines TK_GE to b
16b80 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20  e an integer.** 
16b90 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74 69 6e  code representin
16ba0 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65 72 61  g the ">=" opera
16bb0 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65 20 69  tor. This same i
16bc0 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73 20 72  nteger code is r
16bd0 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65 70 72  eused.** to repr
16be0 65 73 65 6e 74 20 74 68 65 20 67 72 65 61 74 65  esent the greate
16bf0 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61 6c 2d  r-than-or-equal-
16c00 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 74  to operator in t
16c10 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a 2a 2a  he expression.**
16c20 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20   tree..**.** If 
16c30 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69  the expression i
16c40 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72 61 6c  s an SQL literal
16c50 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20 54 4b   (TK_INTEGER, TK
16c60 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f 42 2c  _FLOAT, TK_BLOB,
16c70 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49 4e 47  .** or TK_STRING
16c80 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74 6f 6b  ), then Expr.tok
16c90 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  en contains the 
16ca0 74 65 78 74 20 6f 66 20 74 68 65 20 53 51 4c 20  text of the SQL 
16cb0 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a 20 74  literal. If.** t
16cc0 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73  he expression is
16cd0 20 61 20 76 61 72 69 61 62 6c 65 20 28 54 4b 5f   a variable (TK_
16ce0 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65 6e 20  VARIABLE), then 
16cf0 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61  Expr.token conta
16d00 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72 69 61  ins the.** varia
16d10 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61 6c 6c  ble name. Finall
16d20 79 2c 20 69 66 20 74 68 65 20 65 78 70 72 65 73  y, if the expres
16d30 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
16d40 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55 4e 43  unction (TK_FUNC
16d50 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e 20 45  TION),.** then E
16d60 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74 61 69  xpr.token contai
16d70 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ns the name of t
16d80 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2a 0a  he function..**.
16d90 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74 20 61  ** Expr.pRight a
16da0 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20 61 72  nd Expr.pLeft ar
16db0 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64 20 72  e the left and r
16dc0 69 67 68 74 20 73 75 62 65 78 70 72 65 73 73 69  ight subexpressi
16dd0 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69 6e 61  ons of a.** bina
16de0 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45 69 74  ry operator. Eit
16df0 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61 79 20  her or both may 
16e00 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a 20 45  be NULL..**.** E
16e10 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 20 61  xpr.x.pList is a
16e20 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d 65 6e   list of argumen
16e30 74 73 20 69 66 20 74 68 65 20 65 78 70 72 65 73  ts if the expres
16e40 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c 20 66  sion is an SQL f
16e50 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20 43 41  unction,.** a CA
16e60 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 72  SE expression or
16e70 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73 69 6f   an IN expressio
16e80 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 3c  n of the form "<
16e90 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20 3c 7a  lhs> IN (<y>, <z
16ea0 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70 72 2e  >...)"..** Expr.
16eb0 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75 73 65  x.pSelect is use
16ec0 64 20 69 66 20 74 68 65 20 65 78 70 72 65 73 73  d if the express
16ed0 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73 65 6c  ion is a sub-sel
16ee0 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72 65 73  ect or an expres
16ef0 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 66  sion of.** the f
16f00 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20 28 53  orm "<lhs> IN (S
16f10 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49 66 20  ELECT ...)". If 
16f20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  the EP_xIsSelect
16f30 20 62 69 74 20 69 73 20 73 65 74 20 69 6e 20 74   bit is set in t
16f40 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
16f50 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78 70 72   mask, then Expr
16f60 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61  .x.pSelect is va
16f70 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65 2c 20  lid. Otherwise, 
16f80 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73 0a  Expr.x.pList is.
16f90 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a 2a 20  ** valid..**.** 
16fa0 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 6f 66  An expression of
16fb0 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f 72 20   the form ID or 
16fc0 49 44 2e 49 44 20 72 65 66 65 72 73 20 74 6f 20  ID.ID refers to 
16fd0 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20 74 61  a column in a ta
16fe0 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75 63 68  ble..** For such
16ff0 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 45 78   expressions, Ex
17000 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74 6f 20  pr.op is set to 
17010 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 45 78  TK_COLUMN and Ex
17020 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a 2a 20  pr.iTable is.** 
17030 74 68 65 20 69 6e 74 65 67 65 72 20 63 75 72 73  the integer curs
17040 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61 20 56  or number of a V
17050 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69 6e 74  DBE cursor point
17060 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61 62 6c  ing to that tabl
17070 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e 69 43  e and.** Expr.iC
17080 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63 6f 6c  olumn is the col
17090 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72 20 74  umn number for t
170a0 68 65 20 73 70 65 63 69 66 69 63 20 63 6f 6c 75  he specific colu
170b0 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 65  mn.  If the.** e
170c0 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75 73 65  xpression is use
170d0 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 69 6e  d as a result in
170e0 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 53 45   an aggregate SE
170f0 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65 0a 2a  LECT, then the.*
17100 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73 6f 20  * value is also 
17110 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 45 78  stored in the Ex
17120 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e 20 69  pr.iAgg column i
17130 6e 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  n the aggregate 
17140 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20 63 61  so that.** it ca
17150 6e 20 62 65 20 61 63 63 65 73 73 65 64 20 61 66  n be accessed af
17160 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67 61 74  ter all aggregat
17170 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65 64 2e  es are computed.
17180 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78  .**.** If the ex
17190 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 75  pression is an u
171a0 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c 65 20  nbound variable 
171b0 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73 74 69  marker (a questi
171c0 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61 72 61  on mark.** chara
171d0 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68 65 20  cter '?' in the 
171e0 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20 74 68  original SQL) th
171f0 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54 61 62  en the Expr.iTab
17200 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69 6e 64  le holds the ind
17210 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66 6f 72  ex.** number for
17220 20 74 68 61 74 20 76 61 72 69 61 62 6c 65 2e 0a   that variable..
17230 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65 78 70  **.** If the exp
17240 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62  ression is a sub
17250 71 75 65 72 79 20 74 68 65 6e 20 45 78 70 72 2e  query then Expr.
17260 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20 61 6e  iColumn holds an
17270 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65 67 69   integer.** regi
17280 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f 6e 74  ster number cont
17290 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73 75 6c  aining the resul
172a0 74 20 6f 66 20 74 68 65 20 73 75 62 71 75 65 72  t of the subquer
172b0 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20 73 75  y.  If the.** su
172c0 62 71 75 65 72 79 20 67 69 76 65 73 20 61 20 63  bquery gives a c
172d0 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74 2c 20  onstant result, 
172e0 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73 20 2d  then iTable is -
172f0 31 2e 20 20 49 66 20 74 68 65 20 73 75 62 71 75  1.  If the subqu
17300 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61 20 64  ery.** gives a d
17310 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65 72 20  ifferent answer 
17320 61 74 20 64 69 66 66 65 72 65 6e 74 20 74 69 6d  at different tim
17330 65 73 20 64 75 72 69 6e 67 20 73 74 61 74 65 6d  es during statem
17340 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67 0a 2a  ent processing.*
17350 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  * then iTable is
17360 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
17370 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74 68 61  a subroutine tha
17380 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65 20 73  t computes the s
17390 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 49  ubquery..**.** I
173a0 66 20 74 68 65 20 45 78 70 72 20 69 73 20 6f 66  f the Expr is of
173b0 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d 6e 2c   type OP_Column,
173c0 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65 20 69   and the table i
173d0 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67 20 66  t is selecting f
173e0 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69 73 6b  rom.** is a disk
173f0 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20 22 6f   table or the "o
17400 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74 61 62  ld.*" pseudo-tab
17410 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20 70 6f  le, then pTab po
17420 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a 20 63  ints to the.** c
17430 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 61 62  orresponding tab
17440 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e 0a 2a  le definition..*
17450 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f 4e 20  *.** ALLOCATION 
17460 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45 78 70  NOTES:.**.** Exp
17470 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20 75 73  r objects can us
17480 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d 6f 72  e a lot of memor
17490 79 20 73 70 61 63 65 20 69 6e 20 64 61 74 61 62  y space in datab
174a0 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54 6f 0a  ase schema.  To.
174b0 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65 20 6d  ** help reduce m
174c0 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d 65 6e  emory requiremen
174d0 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20 61 6e  ts, sometimes an
174e0 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77 69 6c   Expr object wil
174f0 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61 74 65  l be.** truncate
17500 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64 75 63  d.  And to reduc
17510 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  e the number of 
17520 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
17530 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a 2a 2a  ns, sometimes.**
17540 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 78 70   two or more Exp
17550 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c 20 62  r objects will b
17560 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73 69  e stored in a si
17570 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  ngle memory allo
17580 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67 65 74  cation,.** toget
17590 68 65 72 20 77 69 74 68 20 45 78 70 72 2e 7a 54  her with Expr.zT
175a0 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a 2a 2a  oken strings..**
175b0 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65  .** If the EP_Re
175c0 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54 6f 6b  duced and EP_Tok
175d0 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61 72 65  enOnly flags are
175e0 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61 6e 20   set when.** an 
175f0 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73 20 74  Expr object is t
17600 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65 6e 20  runcated.  When 
17610 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
17620 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a 20 74  t, then all.** t
17630 68 65 20 63 68 69 6c 64 20 45 78 70 72 20 6f 62  he child Expr ob
17640 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45 78 70  jects in the Exp
17650 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78 70 72  r.pLeft and Expr
17660 2e 70 52 69 67 68 74 20 73 75 62 74 72 65 65 73  .pRight subtrees
17670 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  .** are containe
17680 64 20 77 69 74 68 69 6e 20 74 68 65 20 73 61 6d  d within the sam
17690 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  e memory allocat
176a0 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f 77 65  ion.  Note, howe
176b0 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74 68 65  ver, that.** the
176c0 20 73 75 62 74 72 65 65 73 20 69 6e 20 45 78 70   subtrees in Exp
176d0 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45 78 70  r.x.pList or Exp
176e0 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72 65 20  r.x.pSelect are 
176f0 61 6c 77 61 79 73 20 73 65 70 61 72 61 74 65 6c  always separatel
17700 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64 2c 20  y.** allocated, 
17710 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 77 68  regardless of wh
17720 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 50 5f  ether or not EP_
17730 52 65 64 75 63 65 64 20 69 73 20 73 65 74 2e 0a  Reduced is set..
17740 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 20 7b  */.struct Expr {
17750 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20  .  u8 op;       
17760 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 70 65            /* Ope
17770 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d 65 64  ration performed
17780 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f   by this node */
17790 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79  .  char affinity
177a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
177b0 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74 68 65   affinity of the
177c0 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69 66 20   column or 0 if 
177d0 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a 2f 0a  not a column */.
177e0 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20 20 20    u32 flags;    
177f0 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 72 69           /* Vari
17800 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50 5f 2a  ous flags.  EP_*
17810 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   See below */.  
17820 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68 61 72  union {.    char
17830 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20   *zToken;       
17840 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61 6c 75     /* Token valu
17850 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e 61 74  e. Zero terminat
17860 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65 64 20  ed and dequoted 
17870 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61 6c 75  */.    int iValu
17880 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
17890 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20 69 6e   Non-negative in
178a0 74 65 67 65 72 20 76 61 6c 75 65 20 69 66 20 45  teger value if E
178b0 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a 20 20  P_IntValue */.  
178c0 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68  } u;..  /* If th
178d0 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 66  e EP_TokenOnly f
178e0 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20 74 68  lag is set in th
178f0 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d 61 73  e Expr.flags mas
17900 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a 2a 20  k, then no.  ** 
17910 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63 61 74  space is allocat
17920 65 64 20 66 6f 72 20 74 68 65 20 66 69 65 6c 64  ed for the field
17930 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70 6f 69  s below this poi
17940 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74 20 74  nt. An attempt t
17950 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20 74 68  o.  ** access th
17960 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74 20 69  em will result i
17970 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f 72 20  n a segfault or 
17980 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20 20 2a  malfunction..  *
17990 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
179d0 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20 2a 70  ****/..  Expr *p
179e0 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20 20 20  Left;           
179f0 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64 65 20  /* Left subnode 
17a00 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69 67 68  */.  Expr *pRigh
17a10 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52  t;          /* R
17a20 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a 2f 0a  ight subnode */.
17a30 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 45 78    union {.    Ex
17a40 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b 20 20  prList *pList;  
17a50 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c 20 45     /* op = IN, E
17a60 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c 20 43  XISTS, SELECT, C
17a70 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c 20 42  ASE, FUNCTION, B
17a80 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20 53 65  ETWEEN */.    Se
17a90 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20  lect *pSelect;  
17aa0 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65 6c 65     /* EP_xIsSele
17ab0 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e 2c 20  ct and op = IN, 
17ac0 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 20 2a  EXISTS, SELECT *
17ad0 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a 20 49  /.  } x;..  /* I
17ae0 66 20 74 68 65 20 45 50 5f 52 65 64 75 63 65 64  f the EP_Reduced
17af0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
17b00 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
17b10 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
17b20 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
17b30 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
17b40 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
17b50 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
17b60 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
17b70 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
17b80 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
17b90 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
17ba0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
17bb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17be0 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53 51 4c  ******/..#if SQL
17bf0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
17c00 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65 69 67  TH>0.  int nHeig
17c10 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ht;           /*
17c20 20 48 65 69 67 68 74 20 6f 66 20 74 68 65 20 74   Height of the t
17c30 72 65 65 20 68 65 61 64 65 64 20 62 79 20 74 68  ree headed by th
17c40 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e 64 69  is node */.#endi
17c50 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65 3b 20  f.  int iTable; 
17c60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
17c70 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f 72 20  _COLUMN: cursor 
17c80 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65 20  number of table 
17c90 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e 0a 20  holding column. 
17ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cb0 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 52 45          ** TK_RE
17cc0 47 49 53 54 45 52 3a 20 72 65 67 69 73 74 65 72  GISTER: register
17cd0 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20 20 20   number.        
17ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17cf0 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52 3a 20   ** TK_TRIGGER: 
17d00 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e 20 6f  1 -> new, 0 -> o
17d10 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ld.             
17d20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 45              ** E
17d30 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31 33 34  P_Unlikely:  134
17d40 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c 69 6b  217728 times lik
17d50 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20 20 20  elihood.        
17d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17d70 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a 20 31   ** TK_SELECT: 1
17d80 73 74 20 72 65 67 69 73 74 65 72 20 6f 66 20 72  st register of r
17d90 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a 2f 0a  esult vector */.
17da0 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b    ynVar iColumn;
17db0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43           /* TK_C
17dc0 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e  OLUMN: column in
17dd0 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77  dex.  -1 for row
17de0 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20  id..            
17df0 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
17e00 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72  TK_VARIABLE: var
17e10 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c  iable number (al
17e20 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20 20 20  ways >= 1)..    
17e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e40 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43       ** TK_SELEC
17e50 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e  T_COLUMN: column
17e60 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 20 76   of the result v
17e70 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36 20 69  ector */.  i16 i
17e80 41 67 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Agg;            
17e90 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74 72 79    /* Which entry
17ea0 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e 61 43   in pAggInfo->aC
17eb0 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e 63 5b  ol[] or ->aFunc[
17ec0 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69 67 68  ] */.  i16 iRigh
17ed0 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20 2f 2a  tJoinTable;   /*
17ee0 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 2c   If EP_FromJoin,
17ef0 20 74 68 65 20 72 69 67 68 74 20 74 61 62 6c 65   the right table
17f00 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a 2f 0a   of the join */.
17f10 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20 20 20    u8 op2;       
17f20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 52           /* TK_R
17f30 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69 6e 61  EGISTER: origina
17f40 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70 72 2e  l value of Expr.
17f50 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  op.             
17f60 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54              ** T
17f70 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20 76 61  K_COLUMN: the va
17f80 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20 4f 50  lue of p5 for OP
17f90 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20 20 20  _Column.        
17fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17fb0 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e 43 54   ** TK_AGG_FUNCT
17fc0 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64 65 70  ION: nesting dep
17fd0 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f 20  th */.  AggInfo 
17fe0 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20 20 2f  *pAggInfo;     /
17ff0 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41 47 47  * Used by TK_AGG
18000 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b 5f 41  _COLUMN and TK_A
18010 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f 0a 20  GG_FUNCTION */. 
18020 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20   Table *pTab;   
18030 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
18040 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e 20 65   for TK_COLUMN e
18050 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f 0a 7d  xpressions. */.}
18060 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
18070 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65 20 6d  lowing are the m
18080 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74 73 20  eanings of bits 
18090 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
180a0 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66  s field..*/.#def
180b0 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69 6e 20  ine EP_FromJoin 
180c0 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f 72 69   0x000001 /* Ori
180d0 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f 55 53  ginates in ON/US
180e0 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20 6f 75  ING clause of ou
180f0 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66  ter join */.#def
18100 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20 20 20  ine EP_Agg      
18110 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43 6f 6e   0x000002 /* Con
18120 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72  tains one or mor
18130 65 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  e aggregate func
18140 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65  tions */.#define
18150 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20 30 78   EP_Resolved  0x
18160 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20 68 61  000004 /* IDs ha
18170 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76 65 64  ve been resolved
18180 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f 0a 23   to COLUMNs */.#
18190 64 65 66 69 6e 65 20 45 50 5f 45 72 72 6f 72 20  define EP_Error 
181a0 20 20 20 20 30 78 30 30 30 30 30 38 20 2f 2a 20      0x000008 /* 
181b0 45 78 70 72 65 73 73 69 6f 6e 20 63 6f 6e 74 61  Expression conta
181c0 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ins one or more 
181d0 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65 66 69 6e  errors */.#defin
181e0 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
181f0 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65  x000010 /* Aggre
18200 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
18210 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
18220 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
18230 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
18240 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
18250 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
18260 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
18270 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
18280 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
18290 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
182a0 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
182b0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
182c0 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
182d0 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
182e0 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
182f0 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
18300 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
18310 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
18320 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
18330 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
18340 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
18350 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20  ne EP_Generic   
18360 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f  0x000200 /* Igno
18370 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66  re COLLATE or af
18380 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74  finity on this t
18390 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ree */.#define E
183a0 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
183b0 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
183c0 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
183d0 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
183e0 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
183f0 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
18400 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
18410 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
18420 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
18430 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
18440 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
18450 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
18460 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
18470 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
18480 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
18490 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
184a0 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
184b0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
184c0 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
184d0 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
184e0 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
184f0 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
18500 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
18510 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30  tatic    0x00800
18520 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
18530 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
18540 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
18550 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
18560 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
18570 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
18580 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
18590 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
185a0 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
185b0 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
185c0 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
185d0 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
185e0 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
185f0 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
18600 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
18610 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
18620 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
18630 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30  _ConstFunc 0x080
18640 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f  000 /* A SQLITE_
18650 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72  FUNC_CONSTANT or
18660 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69   _SLOCHNG functi
18670 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
18680 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30  _CanBeNull 0x100
18690 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75  000 /* Can be nu
186a0 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e  ll despite NOT N
186b0 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
186c0 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
186d0 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20  query  0x200000 
186e0 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
186f0 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65   a TK_SELECT ope
18700 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
18710 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78   EP_Alias     0x
18720 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20  400000 /* Is an 
18730 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75  alias for a resu
18740 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f  lt set column */
18750 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66  .#define EP_Leaf
18760 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f        0x800000 /
18770 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70  * Expr.pLeft, .p
18780 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63  Right, .u.pSelec
18790 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  t all NULL */../
187a0 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
187b0 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
187c0 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
187d0 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
187e0 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
187f0 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
18800 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
18810 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
18820 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
18830 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
18840 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
18850 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
18860 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
18870 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
18880 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
18890 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
188a0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
188b0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
188c0 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
188d0 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
188e0 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
188f0 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
18900 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
18910 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
18920 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
18930 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
18940 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
18950 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
18960 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
18970 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
18980 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
18990 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
189a0 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
189b0 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
189c0 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
189d0 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
189e0 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
189f0 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
18a00 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
18a10 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
18a20 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
18a30 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
18a40 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
18a50 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
18a60 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
18a70 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
18a80 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
18a90 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
18aa0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
18ab0 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
18ac0 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63  al Expr.** struc
18ad0 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
18ae0 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
18af0 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
18b00 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20  n Expr.flags.** 
18b10 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
18b20 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
18b30 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
18b40 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
18b50 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
18b60 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
18b70 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
18b80 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
18b90 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
18ba0 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
18bb0 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
18bc0 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
18bd0 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
18be0 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
18bf0 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
18c00 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
18c10 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
18c20 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
18c30 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
18c40 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
18c50 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
18c60 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
18c70 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  nt.** above sqli
18c80 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
18c90 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
18ca0 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
18cb0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
18cc0 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
18cd0 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
18ce0 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
18cf0 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
18d00 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
18d10 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
18d20 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
18d30 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
18d40 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
18d50 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
18d60 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
18d70 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
18d80 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
18d90 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
18da0 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
18db0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
18dc0 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
18dd0 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
18de0 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
18df0 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
18e00 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
18e10 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
18e20 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
18e30 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
18e40 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
18e50 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
18e60 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
18e70 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
18e80 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
18e90 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
18ea0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
18eb0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
18ec0 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
18ed0 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
18ee0 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
18ef0 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
18f00 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
18f10 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
18f20 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
18f30 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
18f40 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
18f50 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
18f60 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
18f70 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
18f80 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
18f90 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
18fa0 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
18fb0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
18fc0 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
18fd0 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
18fe0 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
18ff0 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
19000 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
19010 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
19020 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
19030 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
19040 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
19050 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
19060 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
19070 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
19080 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
19090 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
190a0 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20    int nAlloc;   
190b0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
190c0 65 72 20 6f 66 20 61 5b 5d 20 73 6c 6f 74 73 20  er of a[] slots 
190d0 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 73  allocated */.  s
190e0 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
190f0 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
19100 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
19110 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
19120 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
19130 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
19140 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
19150 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
19160 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
19170 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
19180 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
19190 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
191a0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
191b0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
191c0 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
191d0 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
191e0 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
191f0 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
19200 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
19210 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
19220 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
19230 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
19240 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
19250 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
19260 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
19270 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
19280 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
19290 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
192a0 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
192b0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
192c0 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
192d0 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
192e0 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
192f0 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  le */.    union 
19300 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
19310 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
19320 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
19330 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
19340 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
19350 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
19360 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
19370 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
19380 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
19390 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
193a0 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
193b0 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
193c0 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
193d0 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
193e0 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
193f0 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
19400 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19420 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
19430 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
19440 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
19450 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
19460 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
19470 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
19480 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
19490 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
194a0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
194b0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
194c0 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
194d0 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
194e0 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
194f0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
19500 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
19510 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
19520 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
19530 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
19540 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
19550 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
19560 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
19570 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
19580 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
19590 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
195a0 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
195b0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
195c0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
195d0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
195e0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
195f0 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
19600 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
19610 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
19620 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
19630 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
19640 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
19650 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19660 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
19670 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
19680 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
19690 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
196a0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
196b0 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
196c0 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
196d0 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
196e0 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
196f0 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
19700 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
19710 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
19720 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
19730 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
19740 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
19750 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
19760 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
19770 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
19780 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
19790 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
197a0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
197b0 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
197c0 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
197d0 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
197e0 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
197f0 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
19800 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
19810 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
19820 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
19830 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
19840 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
19850 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
19860 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
19870 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
19880 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
19890 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
198a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
198b0 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
198c0 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
198d0 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
198e0 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
198f0 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
19900 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
19910 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
19920 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
19930 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
19940 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
19950 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
19960 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
19970 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
19980 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
19990 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
199a0 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
199b0 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
199c0 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
199d0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
199e0 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
199f0 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
19a00 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
19a10 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
19a20 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
19a30 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
19a40 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
19a50 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
19a60 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
19a70 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
19a80 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
19a90 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
19aa0 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
19ab0 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
19ac0 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
19ad0 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
19ae0 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
19af0 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
19b00 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
19b10 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
19b20 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
19b30 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
19b40 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
19b50 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
19b60 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
19b70 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
19b80 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
19b90 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
19ba0 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
19bb0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
19bc0 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
19bd0 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
19be0 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
19bf0 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
19c00 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
19c10 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
19c20 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
19c30 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
19c40 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
19c50 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
19c60 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
19c70 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
19c80 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
19c90 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
19ca0 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
19cb0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
19cc0 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
19cd0 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
19ce0 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
19cf0 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
19d00 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
19d10 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
19d20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
19d30 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
19d40 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
19d50 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
19d60 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
19d70 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
19d80 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
19d90 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
19da0 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
19db0 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
19dc0 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
19dd0 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
19de0 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
19df0 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
19e00 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
19e10 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
19e20 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
19e30 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
19e40 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
19e50 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
19e60 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
19e70 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
19e80 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
19e90 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
19ea0 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
19eb0 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
19ec0 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
19ed0 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
19ee0 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
19ef0 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
19f00 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
19f10 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
19f20 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
19f30 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
19f40 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
19f50 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
19f60 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
19f70 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
19f80 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
19f90 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
19fa0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
19fb0 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
19fc0 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
19fd0 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
19fe0 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
19ff0 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
1a000 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
1a010 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
1a020 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
1a030 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
1a040 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1a050 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
1a060 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1a070 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1a080 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
1a090 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
1a0a0 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
1a0b0 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
1a0c0 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
1a0d0 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
1a0e0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
1a0f0 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
1a100 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
1a110 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
1a120 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1a130 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
1a140 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
1a150 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
1a160 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
1a170 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
1a180 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
1a190 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
1a1a0 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
1a1b0 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
1a1c0 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
1a1d0 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1a1e0 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
1a1f0 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
1a200 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
1a210 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
1a220 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
1a230 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
1a240 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
1a250 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
1a260 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
1a270 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
1a280 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20  ween this table 
1a290 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
1a2a0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a2b0 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
1a2c0 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
1a2d0 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
1a2e0 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
1a2f0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1a300 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20  isIndexedBy :1; 
1a310 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1a320 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44  re is an INDEXED
1a330 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1a340 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54      unsigned isT
1a350 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f  abFunc :1;     /
1a360 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d  * True if table-
1a370 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1a380 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20  syntax */.      
1a390 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
1a3a0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
1a3b0 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
1a3c0 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
1a3d0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1a3e0 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
1a3f0 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
1a400 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
1a410 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a420 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
1a430 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
1a440 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
1a450 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
1a460 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65      } fg;.#ifnde
1a470 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1a480 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
1a490 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
1a4a0 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
1a4b0 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
1a4c0 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
1a4d0 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
1a4e0 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
1a4f0 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
1a500 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
1a510 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
1a520 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
1a530 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
1a540 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
1a550 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
1a560 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
1a570 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
1a580 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
1a590 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
1a5a0 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
1a5b0 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
1a5c0 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
1a5d0 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69   used */.    uni
1a5e0 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  on {.      char 
1a5f0 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20  *zIndexedBy;    
1a600 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
1a610 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
1a620 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
1a630 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73  */.      ExprLis
1a640 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a  t *pFuncArg;  /*
1a650 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61   Arguments to ta
1a660 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
1a670 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b  ion */.    } u1;
1a680 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49  .    Index *pIBI
1a690 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20  ndex;  /* Index 
1a6a0 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
1a6b0 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49  ponding to u1.zI
1a6c0 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20  ndexedBy */.  } 
1a6d0 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
1a6e0 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
1a6f0 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
1a700 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
1a710 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
1a720 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
1a730 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
1a740 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
1a750 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
1a760 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
1a770 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
1a780 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
1a790 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1a7a0 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
1a7b0 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
1a7c0 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
1a7d0 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1a7e0 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
1a7f0 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
1a800 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
1a810 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
1a820 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
1a830 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
1a840 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1a850 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
1a860 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
1a870 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
1a880 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1a890 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
1a8a0 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
1a8b0 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
1a8c0 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
1a8d0 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
1a8e0 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
1a8f0 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
1a900 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
1a910 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
1a920 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
1a930 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
1a940 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
1a950 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
1a960 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
1a970 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
1a980 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  mber..**.** Valu
1a990 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
1a9a0 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
1a9b0 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48  rt()):.**     WH
1a9c0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d  ERE_USE_LIMIT  =
1a9d0 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a  = SF_FixedLimit.
1a9e0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1a9f0 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
1aa00 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
1aa10 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
1aa20 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
1aa30 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
1aa40 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
1aa50 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
1aa60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1aa70 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
1aa80 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
1aa90 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1aaa0 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
1aab0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1aac0 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
1aad0 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
1aae0 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
1aaf0 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
1ab00 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1ab10 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20  NEPASS_MULTIROW 
1ab20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53  0x0008 /* ONEPAS
1ab30 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c  S is ok with mul
1ab40 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
1ab50 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
1ab60 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
1ab70 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  010 /* Ok to ret
1ab80 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
1ab90 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
1aba0 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42  ine WHERE_OR_SUB
1abb0 43 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32  CLAUSE     0x002
1abc0 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  0 /* Processing 
1abd0 61 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70  a sub-WHERE as p
1abe0 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20  art of.         
1abf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
1ac10 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74  the OR optimizat
1ac20 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ion  */.#define 
1ac30 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
1ac40 20 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a         0x0040 /*
1ac50 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
1ac60 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
1ac70 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ac80 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
1ac90 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65   0x0080 /* pOrde
1aca0 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
1acb0 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
1acc0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1acd0 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
1ace0 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20    0x0100 /* All 
1acf0 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
1ad00 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
1ad10 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
1ad20 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
1ad30 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0200 /* Support 
1ad40 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
1ad50 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
1ad60 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42  e WHERE_SEEK_TAB
1ad70 4c 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20  LE       0x0400 
1ad80 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20  /* Do not defer 
1ad90 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61  seeks on main ta
1ada0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ble */.#define W
1adb0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d  HERE_ORDERBY_LIM
1adc0 49 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20  IT    0x0800 /* 
1add0 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e  ORDERBY+LIMIT on
1ade0 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20   the inner loop 
1adf0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1ae00 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45  _SEEK_UNIQ_TABLE
1ae10 20 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e    0x1000 /* Do n
1ae20 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69  ot defer seeks i
1ae30 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20  f unique */.    
1ae40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae50 20 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30      /*     0x200
1ae60 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1ae70 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ly used */.#defi
1ae80 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  ne WHERE_USE_LIM
1ae90 49 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30  IT        0x4000
1aea0 20 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49   /* Use the LIMI
1aeb0 54 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61  T in cost estima
1aec0 74 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  tes */.         
1aed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1aee0 2a 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20  *     0x8000    
1aef0 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1af00 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  ed */../* Allowe
1af10 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
1af20 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72  from sqlite3Wher
1af30 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f  eIsDistinct().*/
1af40 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1af50 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20  ISTINCT_NOOP    
1af60 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54    0  /* DISTINCT
1af70 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65   keyword not use
1af80 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1af90 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51  RE_DISTINCT_UNIQ
1afa0 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64  UE    1  /* No d
1afb0 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65  uplicates */.#de
1afc0 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1afd0 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20  NCT_ORDERED   2 
1afe0 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74   /* All duplicat
1aff0 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20  es are adjacent 
1b000 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b010 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45  _DISTINCT_UNORDE
1b020 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63  RED 3  /* Duplic
1b030 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72  ates are scatter
1b040 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  ed */../*.** A N
1b050 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
1b060 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
1b070 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
1b080 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
1b090 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
1b0a0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
1b0b0 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
1b0c0 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
1b0d0 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
1b0e0 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
1b0f0 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
1b100 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
1b110 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
1b120 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
1b130 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
1b140 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
1b150 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
1b160 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
1b170 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
1b180 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
1b190 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
1b1a0 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
1b1b0 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
1b1c0 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
1b1d0 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
1b1e0 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
1b1f0 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
1b200 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
1b210 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
1b220 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
1b230 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
1b240 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a   the inner-most.
1b250 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
1b260 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
1b270 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
1b280 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
1b290 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
1b2a0 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
1b2b0 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
1b2c0 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
1b2d0 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
1b2e0 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
1b2f0 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
1b300 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
1b310 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
1b320 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
1b330 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
1b340 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
1b350 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
1b360 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
1b370 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
1b380 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
1b390 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
1b3a0 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
1b3b0 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
1b3c0 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
1b3d0 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
1b3e0 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
1b3f0 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
1b400 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
1b410 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
1b420 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
1b430 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
1b440 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
1b450 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
1b460 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
1b470 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
1b480 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
1b490 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
1b4a0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
1b4b0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1b4c0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1b4d0 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
1b4e0 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
1b4f0 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
1b500 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
1b510 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
1b520 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
1b530 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1b540 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
1b550 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
1b560 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
1b570 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
1b580 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
1b590 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
1b5a0 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
1b5b0 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1b5c0 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1b5d0 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1b5e0 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1b5f0 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1b600 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1b610 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1b620 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1b630 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1b640 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1b650 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1b660 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1b670 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1b680 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
1b690 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1b6a0 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1b6b0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1b6c0 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
1b6d0 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1b6e0 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
1b6f0 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
1b700 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  ield..**.** Valu
1b710 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1b720 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1b730 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1b740 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  NC_HasAgg    == 
1b750 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  SF_HasAgg.**    
1b760 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1b770 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1b780 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1b790 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  AX.**.*/.#define
1b7a0 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1b7b0 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1b7c0 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1b7d0 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1b7e0 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
1b7f0 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a  Idx   0x0002  /*
1b800 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1b810 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
1b820 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
1b830 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
1b840 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
1b850 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
1b860 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
1b870 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
1b880 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
1b890 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
1b8a0 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
1b8b0 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
1b8c0 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
1b8d0 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
1b8e0 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f  0x0010  /* One o
1b8f0 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1b900 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
1b910 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1b920 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1b930 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1b940 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1b950 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1b960 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65  #define NC_VarSe
1b970 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20  lect 0x0040  /* 
1b980 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  A correlated sub
1b990 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73  query has been s
1b9a0 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1b9b0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30  C_MinMaxAgg 0x10
1b9c0 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61  00  /* min/max a
1b9d0 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20  ggregates seen. 
1b9e0 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20   See note above 
1b9f0 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1ba00 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1ba10 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1ba20 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
1ba30 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
1ba40 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
1ba50 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
1ba60 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1ba70 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74  nt..**.** nLimit
1ba80 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66   is set to -1 if
1ba90 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
1baa0 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66  IT clause.  nOff
1bab0 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e  set is set to 0.
1bac0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
1bad0 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
1bae0 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20  the parser sets 
1baf0 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61  nLimit to the va
1bb00 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  lue of the.** li
1bb10 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
1bb20 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
1bb30 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30  the offset (or 0
1bb40 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74   if there is not
1bb50 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75  .** offset).  Bu
1bb60 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d  t later on, nLim
1bb70 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62  it and nOffset b
1bb80 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79  ecome the memory
1bb90 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e   locations.** in
1bba0 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72   the VDBE that r
1bbb0 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20  ecord the limit 
1bbc0 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  and offset count
1bbd0 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  ers..**.** addrO
1bbe0 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
1bbf0 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
1bc00 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
1bc10 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1bc20 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
1bc30 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
1bc40 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
1bc50 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
1bc60 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
1bc70 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
1bc80 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
1bc90 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
1bca0 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
1bcb0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1bcc0 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
1bcd0 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
1bce0 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
1bcf0 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
1bd00 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
1bd10 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
1bd20 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
1bd30 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
1bd40 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
1bd50 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
1bd60 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
1bd70 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
1bd80 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
1bd90 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
1bda0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1bdb0 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
1bdc0 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
1bdd0 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1bde0 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
1bdf0 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
1be00 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
1be10 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1be20 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
1be30 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
1be40 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
1be50 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
1be60 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
1be70 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1be80 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1be90 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
1bea0 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
1beb0 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f  K_EXCEPT */.  Lo
1bec0 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b  gEst nSelectRow;
1bed0 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
1bee0 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  d number of resu
1bef0 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32  lt rows */.  u32
1bf00 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
1bf10 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
1bf20 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
1bf30 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
1bf40 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
1bf50 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
1bf60 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
1bf70 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69  T counters */.#i
1bf80 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1bf90 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65  ABLED.  char zSe
1bfa0 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f  lName[12];     /
1bfb0 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  * Symbolic name 
1bfc0 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75  of this SELECT u
1bfd0 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67  se for debugging
1bfe0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1bff0 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1c000 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
1c010 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
1c020 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
1c030 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ct */.  SrcList 
1c040 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
1c050 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
1c060 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
1c070 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
1c080 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1c090 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1c0a0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
1c0b0 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
1c0c0 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1c0d0 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
1c0e0 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
1c0f0 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1c100 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1c110 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
1c120 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
1c130 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
1c140 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
1c150 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
1c160 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
1c170 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
1c180 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1c190 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
1c1a0 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
1c1b0 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
1c1c0 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
1c1d0 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
1c1e0 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1c1f0 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1c200 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
1c210 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
1c220 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
1c230 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
1c240 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
1c250 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1c260 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
1c270 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
1c280 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
1c290 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  L. */.};../*.** 
1c2a0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1c2b0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
1c2c0 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
1c2d0 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
1c2e0 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
1c2f0 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1c300 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63  nstraints (all c
1c310 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72  hecked via asser
1c320 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48  t()).**     SF_H
1c330 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f  asAgg     == NC_
1c340 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46  HasAgg.**     SF
1c350 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e  _MinMaxAgg  == N
1c360 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
1c370 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  == SQLITE_FUNC_M
1c380 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f  INMAX.**     SF_
1c390 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48  FixedLimit == WH
1c3a0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f  ERE_USE_LIMIT.*/
1c3b0 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1c3c0 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30  inct       0x000
1c3d0 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1c3e0 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1c3f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1c400 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78  ll            0x
1c410 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  00002  /* Includ
1c420 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1c430 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1c440 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1c450 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e  0x00004  /* Iden
1c460 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1c470 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1c480 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1c490 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20  te      0x00008 
1c4a0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1c4b0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20   functions or a 
1c4c0 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1c4d0 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20  ine SF_HasAgg   
1c4e0 20 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f        0x00010  /
1c4f0 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
1c500 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
1c510 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
1c520 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30  sEphemeral  0x00
1c530 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65  020  /* Uses the
1c540 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
1c550 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
1c560 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
1c570 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73     0x00040  /* s
1c580 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
1c590 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
1c5a0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
1c5b0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
1c5c0 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f   0x00080  /* FRO
1c5d0 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
1c5e0 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
1c5f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1c600 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78  ompound       0x
1c610 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00100  /* Part o
1c620 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
1c630 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
1c640 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
1c650 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74  0x00200  /* Synt
1c660 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
1c670 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
1c680 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61  efine SF_MultiVa
1c690 6c 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20  lue     0x00400 
1c6a0 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45   /* Single VALUE
1c6b0 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74  S term with mult
1c6c0 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1c6d0 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
1c6e0 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20  om     0x00800  
1c6f0 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
1c700 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
1c710 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1c720 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
1c730 20 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20      0x01000  /* 
1c740 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
1c750 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
1c760 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
1c770 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
1c780 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65   0x02000  /* The
1c790 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
1c7a0 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
1c7b0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
1c7c0 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20  _FixedLimit     
1c7d0 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c  0x04000  /* nSel
1c7e0 65 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20  ectRow set by a 
1c7f0 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a  constant LIMIT *
1c800 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79  /.#define SF_May
1c810 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38  beConvert   0x08
1c820 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e  000  /* Need con
1c830 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1c840 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1c850 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e  /.#define SF_Con
1c860 76 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30  verted      0x10
1c870 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65  000  /* By conve
1c880 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1c890 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1c8a0 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75  #define SF_Inclu
1c8b0 64 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30  deHidden  0x2000
1c8c0 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69  0  /* Include hi
1c8d0 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  dden columns in 
1c8e0 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  output */.../*.*
1c8f0 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
1c900 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
1c910 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
1c920 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
1c930 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
1c940 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
1c950 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
1c960 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
1c970 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
1c980 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
1c990 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
1c9a0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1c9b0 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
1c9c0 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
1c9d0 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ex.**           
1c9e0 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
1c9f0 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
1ca00 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1ca10 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
1ca20 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
1ca30 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
1ca40 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
1ca50 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1ca60 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
1ca70 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
1ca80 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
1ca90 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
1caa0 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
1cad0 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
1cae0 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
1caf0 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
1cb00 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
1cb10 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
1cb20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb30 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
1cb40 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
1cb50 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
1cb60 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1cb80 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
1cb90 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
1cba0 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
1cbb0 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
1cbc0 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
1cbd0 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
1cbe0 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
1cbf0 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
1cc00 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1cc10 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
1cc20 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
1cc30 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
1cc40 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
1cc50 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
1cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cc70 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
1cc80 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
1cc90 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
1cca0 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
1ccb0 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
1ccc0 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1ccd0 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1cce0 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1ccf0 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
1cd00 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
1cd10 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
1cd20 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1cd40 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1cd50 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
1cd60 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
1cd70 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cd80 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
1cd90 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
1cda0 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
1cdb0 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
1cdc0 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
1cdd0 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
1cde0 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
1cdf0 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
1ce00 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
1ce10 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
1ce20 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
1ce30 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
1ce40 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1ce50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce60 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
1ce70 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
1ce80 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
1ce90 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
1cea0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1ceb0 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
1cec0 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
1ced0 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
1cee0 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
1cef0 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
1cf00 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1cf10 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
1cf20 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
1cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1cf40 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
1cf50 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1cf60 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
1cf70 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cf80 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
1cf90 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1cfa0 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
1cfb0 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
1cfc0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1cfd0 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
1cfe0 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1cff0 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
1d000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d010 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
1d020 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
1d030 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
1d040 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
1d050 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
1d060 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
1d070 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d080 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
1d090 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
1d0a0 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
1d0b0 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1d0d0 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1d0e0 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1d0f0 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1d100 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1d110 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1d120 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1d130 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1d140 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1d150 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1d160 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1d170 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1d180 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1d190 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1d1a0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1d1b0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1d1c0 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1d1d0 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1d1e0 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1d1f0 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1d200 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1d210 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1d220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d230 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1d240 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1d250 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d270 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1d280 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1d290 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1d2a0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1d2b0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1d2c0 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1d2d0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1d2e0 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1d2f0 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1d300 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1d310 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d330 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1d340 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1d350 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1d360 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1d370 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1d380 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1d390 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1d3a0 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1d3b0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1d3c0 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1d3d0 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1d3e0 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1d3f0 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1d400 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1d410 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1d420 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1d430 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1d440 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d450 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1d460 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1d470 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1d480 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1d490 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d4a0 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1d4b0 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1d4c0 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1d4d0 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1d4e0 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1d4f0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1d500 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1d510 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1d520 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1d530 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1d540 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1d550 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d560 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1d570 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1d580 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1d590 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1d5a0 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1d5b0 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1d5c0 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1d5d0 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1d5e0 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1d5f0 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1d600 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1d610 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1d620 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1d630 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1d640 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1d650 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1d660 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1d670 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1d680 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1d690 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1d6a0 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1d6b0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1d6c0 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1d6d0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1d6e0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1d6f0 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1d700 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1d710 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1d720 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1d730 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1d740 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1d750 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1d760 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1d770 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1d780 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1d790 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1d7a0 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1d7b0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1d7c0 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1d7d0 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1d7e0 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1d7f0 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1d800 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1d810 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1d820 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1d830 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1d840 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1d850 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1d860 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1d870 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1d880 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1d890 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1d8a0 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1d8b0 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1d8c0 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1d8d0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1d8e0 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1d8f0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1d900 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1d910 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1d920 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1d930 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1d940 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1d950 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1d960 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1d970 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1d980 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1d990 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1d9a0 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1d9b0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1d9c0 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1d9d0 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1d9e0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1d9f0 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1da00 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1da10 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1da20 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1da30 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1da40 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1da50 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1da60 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1da70 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1da80 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1da90 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1daa0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 66 66   */.  char *zAff
1dab0 53 64 73 74 3b 20 20 20 20 20 20 2f 2a 20 41 66  Sdst;      /* Af
1dac0 66 69 6e 69 74 79 20 75 73 65 64 20 77 68 65 6e  finity used when
1dad0 20 65 44 65 73 74 3d 3d 53 52 54 5f 53 65 74 20   eDest==SRT_Set 
1dae0 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d  */.  int iSDParm
1daf0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70  ;         /* A p
1db00 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62 79  arameter used by
1db10 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70 6f   the eDest dispo
1db20 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20  sal method */.  
1db30 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20 20  int iSdst;      
1db40 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67       /* Base reg
1db50 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73 75  ister where resu
1db60 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e 20  lts are written 
1db70 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20  */.  int nSdst; 
1db80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1db90 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73  ber of registers
1dba0 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20   allocated */.  
1dbb0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1dbc0 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1dbd0 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1dbe0 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1dbf0 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1dc00 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1dc10 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1dc20 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1dc30 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1dc40 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c  NCREMENT.** tabl
1dc50 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
1dc60 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
1dc70 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1dc80 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
1dc90 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
1dca0 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
1dcb0 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
1dcc0 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
1dcd0 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
1dce0 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
1dcf0 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
1dd00 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
1dd10 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
1dd20 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
1dd30 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
1dd40 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74  rts are done wit
1dd50 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
1dd60 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
1dd70 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
1dd80 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
1dd90 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
1dda0 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
1ddb0 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
1ddc0 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
1ddd0 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
1dde0 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1ddf0 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
1de00 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
1de10 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
1de20 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
1de30 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
1de40 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
1de50 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
1de60 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
1de70 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
1de80 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
1de90 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1dea0 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
1deb0 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
1dec0 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
1ded0 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
1dee0 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1def0 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
1df00 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
1df10 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
1df20 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
1df30 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
1df40 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1df50 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
1df60 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
1df70 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
1df80 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
1df90 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
1dfa0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1dfb0 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
1dfc0 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a  ated for each.**
1dfd0 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1dfe0 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1dff0 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1e000 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1e010 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1e020 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1e030 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1e040 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1e050 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1e060 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1e070 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1e080 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1e090 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1e0a0 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1e0b0 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1e0c0 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1e0d0 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1e0e0 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1e0f0 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1e100 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1e110 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1e120 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1e130 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1e140 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1e150 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1e160 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1e170 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1e180 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1e190 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1e1a0 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1e1b0 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1e1c0 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1e1d0 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1e1e0 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1e1f0 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1e200 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1e210 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1e220 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1e230 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1e240 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1e250 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1e260 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1e270 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a  sult of INSERT.*
1e280 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1e290 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1e2a0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1e2b0 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1e2c0 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1e2d0 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1e2e0 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1e2f0 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1e300 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1e310 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1e320 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1e330 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1e340 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1e350 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1e360 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1e370 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1e380 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1e390 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1e3a0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1e3b0 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1e3c0 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1e3d0 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1e3e0 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1e3f0 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1e400 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1e410 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1e420 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1e430 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1e440 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1e450 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1e460 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1e470 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1e480 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1e490 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1e4a0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1e4b0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1e4c0 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1e4d0 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1e4e0 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1e4f0 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1e500 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1e510 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1e520 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1e530 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1e540 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1e550 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1e560 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1e570 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1e580 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1e590 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1e5a0 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1e5b0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1e5c0 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1e5d0 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1e5e0 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1e5f0 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1e600 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1e610 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1e620 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1e630 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1e640 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1e650 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1e660 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1e670 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1e680 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1e690 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1e6a0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1e6b0 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1e6c0 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1e6d0 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1e6e0 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1e6f0 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1e700 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1e710 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1e720 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1e730 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1e740 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1e750 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1e760 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1e770 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1e780 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1e790 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1e7a0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1e7b0 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1e7c0 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1e7d0 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1e7e0 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1e7f0 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1e800 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1e810 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1e820 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1e830 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1e840 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1e850 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1e860 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1e870 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1e880 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1e890 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1e8a0 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1e8b0 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1e8c0 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1e8d0 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1e8e0 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1e8f0 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1e900 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1e910 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1e920 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65  cache.** feature
1e930 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1e940 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1e950 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1e960 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1e970 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1e980 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1e990 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
1e9a0 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
1e9b0 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
1e9c0 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
1e9d0 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
1e9e0 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
1e9f0 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
1ea00 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
1ea10 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
1ea20 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1ea30 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
1ea40 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
1ea50 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
1ea60 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
1ea70 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
1ea80 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
1ea90 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
1eaa0 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
1eab0 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
1eac0 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
1ead0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1eae0 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1eaf0 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
1eb00 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
1eb10 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
1eb20 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
1eb30 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
1eb40 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
1eb50 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
1eb60 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
1eb70 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
1eb80 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
1eb90 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
1eba0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1ebb0 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
1ebc0 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
1ebd0 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
1ebe0 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
1ebf0 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
1ec00 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
1ec10 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
1ec20 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
1ec30 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
1ec40 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1ec50 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
1ec60 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
1ec70 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
1ec80 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
1ec90 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1eca0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
1ecb0 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1ecc0 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
1ecd0 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
1ece0 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
1ecf0 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
1ed00 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1ed10 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
1ed20 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
1ed30 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
1ed40 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
1ed50 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b    u8 disableLook
1ed60 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72  aside; /* Number
1ed70 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73   of times lookas
1ed80 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  ide has been dis
1ed90 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43  abled */.  u8 nC
1eda0 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  olCache;        
1edb0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
1edc0 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68  ries in aColCach
1edd0 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  e[] */.  int nRa
1ede0 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1edf0 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
1ee00 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1ee10 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
1ee20 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1ee30 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1ee40 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
1ee50 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1ee60 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1ee70 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1ee80 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
1ee90 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
1eea0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1eeb0 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
1eec0 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
1eed0 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
1eee0 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
1eef0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ef00 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
1ef10 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1ef20 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
1ef30 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1ef40 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
1ef50 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1ef60 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c  */.  int szOpAll
1ef70 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74  oc;       /* Byt
1ef80 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  es of memory spa
1ef90 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
1efa0 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1efb0 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
1efc0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1efd0 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
1efe0 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
1eff0 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
1f000 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20   iSelfTab;      
1f010 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e    /* Table of an
1f020 20 69 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70   index whose exp
1f030 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1f040 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  ed */.  int iCac
1f050 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
1f060 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
1f070 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
1f080 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
1f090 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
1f0a0 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
1f0b0 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
1f0c0 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
1f0d0 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
1f0e0 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
1f0f0 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
1f100 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
1f110 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
1f120 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
1f130 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
1f140 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45  he labels */.  E
1f150 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45  xprList *pConstE
1f160 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20  xpr;/* Constant 
1f170 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
1f180 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e   Token constrain
1f190 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66  tName;/* Name of
1f1a0 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74 20   the constraint 
1f1b0 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
1f1c0 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d  parsed */.  yDbM
1f1d0 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20 20  ask writeMask;  
1f1e0 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69 74   /* Start a writ
1f1f0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e  e transaction on
1f200 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65 73   these databases
1f210 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f   */.  yDbMask co
1f220 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69  okieMask;  /* Bi
1f230 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61 20  tmask of schema 
1f240 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61 73  verified databas
1f250 65 73 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52  es */.  int regR
1f260 6f 77 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20  owid;        /* 
1f270 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1f280 20 72 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45   rowid of CREATE
1f290 20 54 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a   TABLE entry */.
1f2a0 20 20 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20    int regRoot;  
1f2b0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1f2c0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20  er holding root 
1f2d0 70 61 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20  page number for 
1f2e0 6e 65 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20  new objects */. 
1f2f0 20 69 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20   int nMaxArg;   
1f300 20 20 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67        /* Max arg
1f310 73 20 70 61 73 73 65 64 20 74 6f 20 75 73 65 72  s passed to user
1f320 20 66 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62   function by sub
1f330 2d 70 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20  -program */.#if 
1f340 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
1f350 4c 45 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63  LED.  int nSelec
1f360 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  t;         /* Nu
1f370 6d 62 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73  mber of SELECT s
1f380 74 61 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a  tatements seen *
1f390 2f 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49  /.  int nSelectI
1f3a0 6e 64 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20  ndent;   /* How 
1f3b0 66 61 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45  far to indent SE
1f3c0 4c 45 43 54 54 52 41 43 45 28 29 20 6f 75 74 70  LECTTRACE() outp
1f3d0 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  ut */.#endif.#if
1f3e0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
1f3f0 5f 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20  _SHARED_CACHE.  
1f400 69 6e 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20  int nTableLock; 
1f410 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1f420 20 6f 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61   of locks in aTa
1f430 62 6c 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62  bleLock */.  Tab
1f440 6c 65 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f  leLock *aTableLo
1f450 63 6b 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20  ck; /* Required 
1f460 74 61 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20  table locks for 
1f470 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64  shared-cache mod
1f480 65 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75  e */.#endif.  Au
1f490 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63  toincInfo *pAinc
1f4a0 3b 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  ;  /* Informatio
1f4b0 6e 20 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52  n about AUTOINCR
1f4c0 45 4d 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a  EMENT counters *
1f4d0 2f 0a 20 20 50 61 72 73 65 20 2a 70 54 6f 70 6c  /.  Parse *pTopl
1f4e0 65 76 65 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73  evel;    /* Pars
1f4f0 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72 20  e structure for 
1f500 6d 61 69 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72  main program (or
1f510 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c   NULL) */.  Tabl
1f520 65 20 2a 70 54 72 69 67 67 65 72 54 61 62 3b 20  e *pTriggerTab; 
1f530 20 2f 2a 20 54 61 62 6c 65 20 74 72 69 67 67 65   /* Table trigge
1f540 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1f550 65 64 20 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20  ed for */.  int 
1f560 61 64 64 72 43 72 54 61 62 3b 20 20 20 20 20 20  addrCrTab;      
1f570 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 4f   /* Address of O
1f580 50 5f 43 72 65 61 74 65 54 61 62 6c 65 20 6f 70  P_CreateTable op
1f590 63 6f 64 65 20 6f 6e 20 43 52 45 41 54 45 20 54  code on CREATE T
1f5a0 41 42 4c 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51  ABLE */.  u32 nQ
1f5b0 75 65 72 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f  ueryLoop;      /
1f5c0 2a 20 45 73 74 20 6e 75 6d 62 65 72 20 6f 66 20  * Est number of 
1f5d0 69 74 65 72 61 74 69 6f 6e 73 20 6f 66 20 61 20  iterations of a 
1f5e0 71 75 65 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e  query (10*log2(N
1f5f0 29 29 20 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d  )) */.  u32 oldm
1f600 61 73 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ask;         /* 
1f610 4d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  Mask of old.* co
1f620 6c 75 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64  lumns referenced
1f630 20 2a 2f 0a 20 20 75 33 32 20 6e 65 77 6d 61 73   */.  u32 newmas
1f640 6b 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  k;         /* Ma
1f650 73 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75  sk of new.* colu
1f660 6d 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a  mns referenced *
1f670 2f 0a 20 20 75 38 20 65 54 72 69 67 67 65 72 4f  /.  u8 eTriggerO
1f680 70 3b 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55  p;       /* TK_U
1f690 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
1f6a0 20 6f 72 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f   or TK_DELETE */
1f6b0 0a 20 20 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20  .  u8 eOrconf;  
1f6c0 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75          /* Defau
1f6d0 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70  lt ON CONFLICT p
1f6e0 6f 6c 69 63 79 20 66 6f 72 20 74 72 69 67 67 65  olicy for trigge
1f6f0 72 20 73 74 65 70 73 20 2a 2f 0a 20 20 75 38 20  r steps */.  u8 
1f700 64 69 73 61 62 6c 65 54 72 69 67 67 65 72 73 3b  disableTriggers;
1f710 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 64 69 73    /* True to dis
1f720 61 62 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f  able triggers */
1f730 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  /***********
1f740 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f750 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f760 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f770 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a  ***************.
1f780 20 20 2a 2a 20 46 69 65 6c 64 73 20 61 62 6f 76    ** Fields abov
1f790 65 20 6d 75 73 74 20 62 65 20 69 6e 69 74 69 61  e must be initia
1f7a0 6c 69 7a 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20  lized to zero.  
1f7b0 54 68 65 20 66 69 65 6c 64 73 20 74 68 61 74 20  The fields that 
1f7c0 66 6f 6c 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77  follow,.  ** dow
1f7d0 6e 20 74 6f 20 74 68 65 20 62 65 67 69 6e 6e 69  n to the beginni
1f7e0 6e 67 20 6f 66 20 74 68 65 20 72 65 63 75 72 73  ng of the recurs
1f7f0 69 76 65 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20  ive section, do 
1f800 6e 6f 74 20 6e 65 65 64 20 74 6f 20 62 65 0a 20  not need to be. 
1f810 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   ** initialized 
1f820 61 73 20 74 68 65 79 20 77 69 6c 6c 20 62 65 20  as they will be 
1f830 73 65 74 20 62 65 66 6f 72 65 20 62 65 69 6e 67  set before being
1f840 20 75 73 65 64 2e 20 20 54 68 65 20 62 6f 75 6e   used.  The boun
1f850 64 61 72 79 20 69 73 0a 20 20 2a 2a 20 64 65 74  dary is.  ** det
1f860 65 72 6d 69 6e 65 64 20 62 79 20 6f 66 66 73 65  ermined by offse
1f870 74 6f 66 28 50 61 72 73 65 2c 61 43 6f 6c 43 61  tof(Parse,aColCa
1f880 63 68 65 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a  che)..  ********
1f890 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f8d0 2a 2a 2f 0a 0a 20 20 73 74 72 75 63 74 20 79 43  **/..  struct yC
1f8e0 6f 6c 43 61 63 68 65 20 7b 0a 20 20 20 20 69 6e  olCache {.    in
1f8f0 74 20 69 54 61 62 6c 65 3b 20 20 20 20 20 20 20  t iTable;       
1f900 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 75 72      /* Table cur
1f910 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20  sor number */.  
1f920 20 20 69 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20    i16 iColumn;  
1f930 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65          /* Table
1f940 20 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a   column number *
1f950 2f 0a 20 20 20 20 75 38 20 74 65 6d 70 52 65 67  /.    u8 tempReg
1f960 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 69  ;           /* i
1f970 52 65 67 20 69 73 20 61 20 74 65 6d 70 20 72 65  Reg is a temp re
1f980 67 69 73 74 65 72 20 74 68 61 74 20 6e 65 65 64  gister that need
1f990 73 20 74 6f 20 62 65 20 66 72 65 65 64 20 2a 2f  s to be freed */
1f9a0 0a 20 20 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b  .    int iLevel;
1f9b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65             /* Ne
1f9c0 73 74 69 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20  sting level */. 
1f9d0 20 20 20 69 6e 74 20 69 52 65 67 3b 20 20 20 20     int iReg;    
1f9e0 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 20           /* Reg 
1f9f0 77 69 74 68 20 76 61 6c 75 65 20 6f 66 20 74 68  with value of th
1fa00 69 73 20 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61  is column. 0 mea
1fa10 6e 73 20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20  ns none. */.    
1fa20 69 6e 74 20 6c 72 75 3b 20 20 20 20 20 20 20 20  int lru;        
1fa30 20 20 20 20 20 20 2f 2a 20 4c 65 61 73 74 20 72        /* Least r
1fa40 65 63 65 6e 74 6c 79 20 75 73 65 64 20 65 6e 74  ecently used ent
1fa50 72 79 20 68 61 73 20 74 68 65 20 73 6d 61 6c 6c  ry has the small
1fa60 65 73 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d  est value */.  }
1fa70 20 61 43 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54   aColCache[SQLIT
1fa80 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20  E_N_COLCACHE];  
1fa90 2f 2a 20 4f 6e 65 20 66 6f 72 20 65 61 63 68 20  /* One for each 
1faa0 63 6f 6c 75 6d 6e 20 63 61 63 68 65 20 65 6e 74  column cache ent
1fab0 72 79 20 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d  ry */.  int aTem
1fac0 70 52 65 67 5b 38 5d 3b 20 20 20 20 20 20 20 20  pReg[8];        
1fad0 2f 2a 20 48 6f 6c 64 69 6e 67 20 61 72 65 61 20  /* Holding area 
1fae0 66 6f 72 20 74 65 6d 70 6f 72 61 72 79 20 72 65  for temporary re
1faf0 67 69 73 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b  gisters */.  Tok
1fb00 65 6e 20 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20  en sNameToken;  
1fb10 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69       /* Token wi
1fb20 74 68 20 75 6e 71 75 61 6c 69 66 69 65 64 20 73  th unqualified s
1fb30 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d  chema object nam
1fb40 65 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a  e */..  /*******
1fb50 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fb90 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20 69 73 20  *.  ** Above is 
1fba0 63 6f 6e 73 74 61 6e 74 20 62 65 74 77 65 65 6e  constant between
1fbb0 20 72 65 63 75 72 73 69 6f 6e 73 2e 20 20 42 65   recursions.  Be
1fbc0 6c 6f 77 20 69 73 20 72 65 73 65 74 20 62 65 66  low is reset bef
1fbd0 6f 72 65 20 61 6e 64 20 61 66 74 65 72 0a 20 20  ore and after.  
1fbe0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1fbf0 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79  n.  The boundary
1fc00 20 62 65 74 77 65 65 6e 20 74 68 65 73 65 20 74   between these t
1fc10 77 6f 20 72 65 67 69 6f 6e 73 20 69 73 20 64 65  wo regions is de
1fc20 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73  termined.  ** us
1fc30 69 6e 67 20 6f 66 66 73 65 74 6f 66 28 50 61 72  ing offsetof(Par
1fc40 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73  se,sLastToken) s
1fc50 6f 20 74 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e  o the sLastToken
1fc60 20 66 69 65 6c 64 20 6d 75 73 74 20 62 65 20 74   field must be t
1fc70 68 65 0a 20 20 2a 2a 20 66 69 72 73 74 20 66 69  he.  ** first fi
1fc80 65 6c 64 20 69 6e 20 74 68 65 20 72 65 63 75 72  eld in the recur
1fc90 73 69 76 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a  sive region..  *
1fca0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fcb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fcc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fcd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fce0 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65  *******/..  Toke
1fcf0 6e 20 73 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20  n sLastToken;   
1fd00 20 20 20 20 2f 2a 20 54 68 65 20 6c 61 73 74 20      /* The last 
1fd10 74 6f 6b 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a  token parsed */.
1fd20 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20 20    ynVar nVar;   
1fd30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
1fd40 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61 72  umber of '?' var
1fd50 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20 74  iables seen in t
1fd60 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f  he SQL so far */
1fd70 0a 20 20 75 38 20 69 50 6b 53 6f 72 74 4f 72 64  .  u8 iPkSortOrd
1fd80 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
1fd90 41 53 43 20 6f 72 20 44 45 53 43 20 66 6f 72 20  ASC or DESC for 
1fda0 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59 20  INTEGER PRIMARY 
1fdb0 4b 45 59 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c  KEY */.  u8 expl
1fdc0 61 69 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  ain;            
1fdd0 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68     /* True if th
1fde0 65 20 45 58 50 4c 41 49 4e 20 66 6c 61 67 20 69  e EXPLAIN flag i
1fdf0 73 20 66 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71  s found on the q
1fe00 75 65 72 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  uery */.#ifndef 
1fe10 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1fe20 55 41 4c 54 41 42 4c 45 0a 20 20 75 38 20 64 65  UALTABLE.  u8 de
1fe30 63 6c 61 72 65 56 74 61 62 3b 20 20 20 20 20 20  clareVtab;      
1fe40 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1fe50 69 6e 73 69 64 65 20 73 71 6c 69 74 65 33 5f 64  inside sqlite3_d
1fe60 65 63 6c 61 72 65 5f 76 74 61 62 28 29 20 2a 2f  eclare_vtab() */
1fe70 0a 20 20 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b  .  int nVtabLock
1fe80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1fe90 4e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  Number of virtua
1fea0 6c 20 74 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b  l tables to lock
1feb0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1fec0 20 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20   nHeight;       
1fed0 20 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73         /* Expres
1fee0 73 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74  sion tree height
1fef0 20 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d   of current sub-
1ff00 73 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65  select */.#ifnde
1ff10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1ff20 50 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c  PLAIN.  int iSel
1ff30 65 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20  ectId;          
1ff40 20 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65    /* ID of curre
1ff50 6e 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58  nt select for EX
1ff60 50 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a  PLAIN output */.
1ff70 20 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63    int iNextSelec
1ff80 74 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  tId;        /* N
1ff90 65 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65  ext available se
1ffa0 6c 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c  lect ID for EXPL
1ffb0 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65  AIN output */.#e
1ffc0 6e 64 69 66 0a 20 20 56 4c 69 73 74 20 2a 70 56  ndif.  VList *pV
1ffd0 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20 20  List;           
1ffe0 20 2f 2a 20 4d 61 70 70 69 6e 67 20 62 65 74 77   /* Mapping betw
1fff0 65 65 6e 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  een variable nam
20000 65 73 20 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a  es and numbers *
20010 2f 0a 20 20 56 64 62 65 20 2a 70 52 65 70 72 65  /.  Vdbe *pRepre
20020 70 61 72 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  pare;         /*
20030 20 56 4d 20 62 65 69 6e 67 20 72 65 70 72 65 70   VM being reprep
20040 61 72 65 64 20 28 73 71 6c 69 74 65 33 52 65 70  ared (sqlite3Rep
20050 72 65 70 61 72 65 28 29 29 20 2a 2f 0a 20 20 63  repare()) */.  c
20060 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54 61 69 6c  onst char *zTail
20070 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20  ;        /* All 
20080 53 51 4c 20 74 65 78 74 20 70 61 73 74 20 74 68  SQL text past th
20090 65 20 6c 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e  e last semicolon
200a0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 54 61 62   parsed */.  Tab
200b0 6c 65 20 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20  le *pNewTable;  
200c0 20 20 20 20 20 20 20 2f 2a 20 41 20 74 61 62 6c         /* A tabl
200d0 65 20 62 65 69 6e 67 20 63 6f 6e 73 74 72 75 63  e being construc
200e0 74 65 64 20 62 79 20 43 52 45 41 54 45 20 54 41  ted by CREATE TA
200f0 42 4c 45 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  BLE */.  Trigger
20100 20 2a 70 4e 65 77 54 72 69 67 67 65 72 3b 20 20   *pNewTrigger;  
20110 20 20 20 2f 2a 20 54 72 69 67 67 65 72 20 75 6e     /* Trigger un
20120 64 65 72 20 63 6f 6e 73 74 72 75 63 74 20 62 79  der construct by
20130 20 61 20 43 52 45 41 54 45 20 54 52 49 47 47 45   a CREATE TRIGGE
20140 52 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  R */.  const cha
20150 72 20 2a 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b  r *zAuthContext;
20160 20 2f 2a 20 54 68 65 20 36 74 68 20 70 61 72 61   /* The 6th para
20170 6d 65 74 65 72 20 74 6f 20 64 62 2d 3e 78 41 75  meter to db->xAu
20180 74 68 20 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a  th callbacks */.
20190 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
201a0 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
201b0 0a 20 20 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20  .  Token sArg;  
201c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
201d0 43 6f 6d 70 6c 65 74 65 20 74 65 78 74 20 6f 66  Complete text of
201e0 20 61 20 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65   a module argume
201f0 6e 74 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a  nt */.  Table **
20200 61 70 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20  apVtabLock;     
20210 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20    /* Pointer to 
20220 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20 6e  virtual tables n
20230 65 65 64 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a  eeding locking *
20240 2f 0a 23 65 6e 64 69 66 0a 20 20 54 61 62 6c 65  /.#endif.  Table
20250 20 2a 70 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20   *pZombieTab;   
20260 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
20270 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f  Table objects to
20280 20 64 65 6c 65 74 65 20 61 66 74 65 72 20 63 6f   delete after co
20290 64 65 20 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67  de gen */.  Trig
202a0 67 65 72 50 72 67 20 2a 70 54 72 69 67 67 65 72  gerPrg *pTrigger
202b0 50 72 67 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20  Prg;  /* Linked 
202c0 6c 69 73 74 20 6f 66 20 63 6f 64 65 64 20 74 72  list of coded tr
202d0 69 67 67 65 72 73 20 2a 2f 0a 20 20 57 69 74 68  iggers */.  With
202e0 20 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20   *pWith;        
202f0 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
20300 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
20310 20 4e 55 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20   NULL */.  With 
20320 2a 70 57 69 74 68 54 6f 46 72 65 65 3b 20 20 20  *pWithToFree;   
20330 20 20 20 20 20 2f 2a 20 46 72 65 65 20 74 68 69       /* Free thi
20340 73 20 57 49 54 48 20 6f 62 6a 65 63 74 20 61 74  s WITH object at
20350 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
20360 70 61 72 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  parse */.};../*.
20370 2a 2a 20 53 69 7a 65 73 20 61 6e 64 20 70 6f 69  ** Sizes and poi
20380 6e 74 65 72 73 20 6f 66 20 76 61 72 69 6f 75 73  nters of various
20390 20 70 61 72 74 73 20 6f 66 20 74 68 65 20 50 61   parts of the Pa
203a0 72 73 65 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23  rse object..*/.#
203b0 64 65 66 69 6e 65 20 50 41 52 53 45 5f 48 44 52  define PARSE_HDR
203c0 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72  _SZ offsetof(Par
203d0 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 20 2f 2a  se,aColCache) /*
203e0 20 52 65 63 75 72 73 69 76 65 20 70 61 72 74 20   Recursive part 
203f0 77 2f 6f 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a  w/o aColCache*/.
20400 23 64 65 66 69 6e 65 20 50 41 52 53 45 5f 52 45  #define PARSE_RE
20410 43 55 52 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f  CURSE_SZ offseto
20420 66 28 50 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b  f(Parse,sLastTok
20430 65 6e 29 20 20 20 20 2f 2a 20 52 65 63 75 72 73  en)    /* Recurs
20440 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
20450 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 5f 53  ine PARSE_TAIL_S
20460 5a 20 28 73 69 7a 65 6f 66 28 50 61 72 73 65 29  Z (sizeof(Parse)
20470 2d 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53  -PARSE_RECURSE_S
20480 5a 29 20 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73  Z) /* Non-recurs
20490 69 76 65 20 70 61 72 74 20 2a 2f 0a 23 64 65 66  ive part */.#def
204a0 69 6e 65 20 50 41 52 53 45 5f 54 41 49 4c 28 58  ine PARSE_TAIL(X
204b0 29 20 28 28 28 63 68 61 72 2a 29 28 58 29 29 2b  ) (((char*)(X))+
204c0 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a  PARSE_RECURSE_SZ
204d0 29 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f  )  /* Pointer to
204e0 20 74 61 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20   tail */../*.** 
204f0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 63  Return true if c
20500 75 72 72 65 6e 74 6c 79 20 69 6e 73 69 64 65 20  urrently inside 
20510 61 6e 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  an sqlite3_decla
20520 72 65 5f 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a  re_vtab() call..
20530 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
20540 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
20550 4c 45 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f  LE.  #define IN_
20560 44 45 43 4c 41 52 45 5f 56 54 41 42 20 30 0a 23  DECLARE_VTAB 0.#
20570 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 49  else.  #define I
20580 4e 5f 44 45 43 4c 41 52 45 5f 56 54 41 42 20 28  N_DECLARE_VTAB (
20590 70 50 61 72 73 65 2d 3e 64 65 63 6c 61 72 65 56  pParse->declareV
205a0 74 61 62 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  tab).#endif../*.
205b0 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
205c0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
205d0 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 62 65  structure can be
205e0 20 64 65 63 6c 61 72 65 64 20 6f 6e 20 61 20 73   declared on a s
205f0 74 61 63 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a  tack and used.**
20600 20 74 6f 20 73 61 76 65 20 74 68 65 20 50 61 72   to save the Par
20610 73 65 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20  se.zAuthContext 
20620 76 61 6c 75 65 20 73 6f 20 74 68 61 74 20 69 74  value so that it
20630 20 63 61 6e 20 62 65 20 72 65 73 74 6f 72 65 64   can be restored
20640 20 6c 61 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63   later..*/.struc
20650 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a  t AuthContext {.
20660 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41    const char *zA
20670 75 74 68 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a  uthContext;   /*
20680 20 50 75 74 20 73 61 76 65 64 20 50 61 72 73 65   Put saved Parse
20690 2e 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 68 65  .zAuthContext he
206a0 72 65 20 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70  re */.  Parse *p
206b0 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
206c0 20 20 20 20 2f 2a 20 54 68 65 20 50 61 72 73 65      /* The Parse
206d0 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b   structure */.};
206e0 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64  ../*.** Bitfield
206f0 20 66 6c 61 67 73 20 66 6f 72 20 50 35 20 76 61   flags for P5 va
20700 6c 75 65 20 69 6e 20 76 61 72 69 6f 75 73 20 6f  lue in various o
20710 70 63 6f 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  pcodes..**.** Va
20720 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
20730 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
20740 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f  sert()):.**    O
20750 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20  PFLAG_LENGTHARG 
20760 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
20770 43 5f 4c 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f  C_LENGTH.**    O
20780 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 20  PFLAG_TYPEOFARG 
20790 20 20 20 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e     == SQLITE_FUN
207a0 43 5f 54 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f  C_TYPEOF.**    O
207b0 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20 20  PFLAG_BULKCSR   
207c0 20 20 20 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b     == BTREE_BULK
207d0 4c 4f 41 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41  LOAD.**    OPFLA
207e0 47 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 3d  G_SEEKEQ       =
207f0 3d 20 42 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a  = BTREE_SEEK_EQ.
20800 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52  **    OPFLAG_FOR
20810 44 45 4c 45 54 45 20 20 20 20 3d 3d 20 42 54 52  DELETE    == BTR
20820 45 45 5f 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20  EE_FORDELETE.** 
20830 20 20 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f     OPFLAG_SAVEPO
20840 53 49 54 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f  SITION == BTREE_
20850 53 41 56 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20  SAVEPOSITION.** 
20860 20 20 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c     OPFLAG_AUXDEL
20870 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
20880 41 55 58 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65  AUXDELETE.*/.#de
20890 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41  fine OPFLAG_NCHA
208a0 4e 47 45 20 20 20 20 20 20 20 30 78 30 31 20 20  NGE       0x01  
208b0 20 20 2f 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20    /* OP_Insert: 
208c0 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
208d0 2d 3e 6e 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20  ->nChange */.   
208e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
208f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20900 20 20 2f 2a 20 41 6c 73 6f 20 75 73 65 64 20 69    /* Also used i
20910 6e 20 50 32 20 28 6e 6f 74 20 50 35 29 20 6f 66  n P2 (not P5) of
20920 20 4f 50 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64   OP_Delete */.#d
20930 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48  efine OPFLAG_EPH
20940 45 4d 20 20 20 20 20 20 20 20 20 30 78 30 31 20  EM         0x01 
20950 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a     /* OP_Column:
20960 20 45 70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75   Ephemeral outpu
20970 74 20 69 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69  t is ok */.#defi
20980 6e 65 20 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f  ne OPFLAG_LASTRO
20990 57 49 44 20 20 20 20 20 30 78 32 30 20 20 20 20  WID     0x20    
209a0 2f 2a 20 53 65 74 20 74 6f 20 75 70 64 61 74 65  /* Set to update
209b0 20 64 62 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a   db->lastRowid *
209c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
209d0 5f 49 53 55 50 44 41 54 45 20 20 20 20 20 20 30  _ISUPDATE      0
209e0 78 30 34 20 20 20 20 2f 2a 20 54 68 69 73 20 4f  x04    /* This O
209f0 50 5f 49 6e 73 65 72 74 20 69 73 20 61 6e 20 73  P_Insert is an s
20a00 71 6c 20 55 50 44 41 54 45 20 2a 2f 0a 23 64 65  ql UPDATE */.#de
20a10 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 50 50 45  fine OPFLAG_APPE
20a20 4e 44 20 20 20 20 20 20 20 20 30 78 30 38 20 20  ND        0x08  
20a30 20 20 2f 2a 20 54 68 69 73 20 69 73 20 6c 69 6b    /* This is lik
20a40 65 6c 79 20 74 6f 20 62 65 20 61 6e 20 61 70 70  ely to be an app
20a50 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  end */.#define O
20a60 50 46 4c 41 47 5f 55 53 45 53 45 45 4b 52 45 53  PFLAG_USESEEKRES
20a70 55 4c 54 20 30 78 31 30 20 20 20 20 2f 2a 20 54  ULT 0x10    /* T
20a80 72 79 20 74 6f 20 61 76 6f 69 64 20 61 20 73 65  ry to avoid a se
20a90 65 6b 20 69 6e 20 42 74 72 65 65 49 6e 73 65 72  ek in BtreeInser
20aa0 74 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  t() */.#define O
20ab0 50 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20  PFLAG_ISNOOP    
20ac0 20 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f      0x40    /* O
20ad0 50 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72  P_Delete does pr
20ae0 65 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e  e-update-hook on
20af0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ly */.#define OP
20b00 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20  FLAG_LENGTHARG  
20b10 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
20b20 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65  _Column only use
20b30 64 20 66 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a  d for length() *
20b40 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
20b50 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 20 30  _TYPEOFARG     0
20b60 78 38 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c  x80    /* OP_Col
20b70 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f  umn only used fo
20b80 72 20 74 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64  r typeof() */.#d
20b90 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c  efine OPFLAG_BUL
20ba0 4b 43 53 52 20 20 20 20 20 20 20 30 78 30 31 20  KCSR       0x01 
20bb0 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20     /* OP_Open** 
20bc0 75 73 65 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c  used to open bul
20bd0 6b 20 63 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66  k cursor */.#def
20be0 69 6e 65 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45  ine OPFLAG_SEEKE
20bf0 51 20 20 20 20 20 20 20 20 30 78 30 32 20 20 20  Q        0x02   
20c00 20 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75   /* OP_Open** cu
20c10 72 73 6f 72 20 75 73 65 73 20 45 51 20 73 65 65  rsor uses EQ see
20c20 6b 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  k only */.#defin
20c30 65 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45  e OPFLAG_FORDELE
20c40 54 45 20 20 20 20 20 30 78 30 38 20 20 20 20 2f  TE     0x08    /
20c50 2a 20 4f 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64  * OP_Open should
20c60 20 75 73 65 20 42 54 52 45 45 5f 46 4f 52 44 45   use BTREE_FORDE
20c70 4c 45 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE */.#define 
20c80 4f 50 46 4c 41 47 5f 50 32 49 53 52 45 47 20 20  OPFLAG_P2ISREG  
20c90 20 20 20 20 20 30 78 31 30 20 20 20 20 2f 2a 20       0x10    /* 
20ca0 50 32 20 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20  P2 to OP_Open** 
20cb0 69 73 20 61 20 72 65 67 69 73 74 65 72 20 6e 75  is a register nu
20cc0 6d 62 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  mber */.#define 
20cd0 4f 50 46 4c 41 47 5f 50 45 52 4d 55 54 45 20 20  OPFLAG_PERMUTE  
20ce0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
20cf0 4f 50 5f 43 6f 6d 70 61 72 65 3a 20 75 73 65 20  OP_Compare: use 
20d00 74 68 65 20 70 65 72 6d 75 74 61 74 69 6f 6e 20  the permutation 
20d10 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20d20 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e 20 20  G_SAVEPOSITION  
20d30 30 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65  0x02    /* OP_De
20d40 6c 65 74 65 2f 49 6e 73 65 72 74 3a 20 73 61 76  lete/Insert: sav
20d50 65 20 63 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a  e cursor pos */.
20d60 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41  #define OPFLAG_A
20d70 55 58 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  UXDELETE     0x0
20d80 34 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  4    /* OP_Delet
20d90 65 3a 20 69 6e 64 65 78 20 69 6e 20 61 20 44 45  e: index in a DE
20da0 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20  LETE op */../*. 
20db0 2a 20 45 61 63 68 20 74 72 69 67 67 65 72 20 70  * Each trigger p
20dc0 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61  resent in the da
20dd0 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
20de0 20 73 74 6f 72 65 64 20 61 73 20 61 6e 20 69 6e   stored as an in
20df0 73 74 61 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72  stance of. * str
20e00 75 63 74 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a  uct Trigger.. *.
20e10 20 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 69   * Pointers to i
20e20 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
20e30 63 74 20 54 72 69 67 67 65 72 20 61 72 65 20 73  ct Trigger are s
20e40 74 6f 72 65 64 20 69 6e 20 74 77 6f 20 77 61 79  tored in two way
20e50 73 2e 0a 20 2a 20 31 2e 20 49 6e 20 74 68 65 20  s.. * 1. In the 
20e60 22 74 72 69 67 48 61 73 68 22 20 68 61 73 68 20  "trigHash" hash 
20e70 74 61 62 6c 65 20 28 70 61 72 74 20 6f 66 20 74  table (part of t
20e80 68 65 20 73 71 6c 69 74 65 33 2a 20 74 68 61 74  he sqlite3* that
20e90 20 72 65 70 72 65 73 65 6e 74 73 20 74 68 65 0a   represents the.
20ea0 20 2a 20 20 20 20 64 61 74 61 62 61 73 65 29 2e   *    database).
20eb0 20 54 68 69 73 20 61 6c 6c 6f 77 73 20 54 72 69   This allows Tri
20ec0 67 67 65 72 20 73 74 72 75 63 74 75 72 65 73 20  gger structures 
20ed0 74 6f 20 62 65 20 72 65 74 72 69 65 76 65 64 20  to be retrieved 
20ee0 62 79 20 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41  by name.. * 2. A
20ef0 6c 6c 20 74 72 69 67 67 65 72 73 20 61 73 73 6f  ll triggers asso
20f00 63 69 61 74 65 64 20 77 69 74 68 20 61 20 73 69  ciated with a si
20f10 6e 67 6c 65 20 74 61 62 6c 65 20 66 6f 72 6d 20  ngle table form 
20f20 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75  a linked list, u
20f30 73 69 6e 67 20 74 68 65 0a 20 2a 20 20 20 20 70  sing the. *    p
20f40 4e 65 78 74 20 6d 65 6d 62 65 72 20 6f 66 20 73  Next member of s
20f50 74 72 75 63 74 20 54 72 69 67 67 65 72 2e 20 41  truct Trigger. A
20f60 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
20f70 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66  first element of
20f80 20 74 68 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65   the. *    linke
20f90 64 20 6c 69 73 74 20 69 73 20 73 74 6f 72 65 64  d list is stored
20fa0 20 61 73 20 74 68 65 20 22 70 54 72 69 67 67 65   as the "pTrigge
20fb0 72 22 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65  r" member of the
20fc0 20 61 73 73 6f 63 69 61 74 65 64 0a 20 2a 20 20   associated. *  
20fd0 20 20 73 74 72 75 63 74 20 54 61 62 6c 65 2e 0a    struct Table..
20fe0 20 2a 0a 20 2a 20 54 68 65 20 22 73 74 65 70 5f   *. * The "step_
20ff0 6c 69 73 74 22 20 6d 65 6d 62 65 72 20 70 6f 69  list" member poi
21000 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73 74  nts to the first
21010 20 65 6c 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69   element of a li
21020 6e 6b 65 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e  nked list. * con
21030 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c 20  taining the SQL 
21040 73 74 61 74 65 6d 65 6e 74 73 20 73 70 65 63 69  statements speci
21050 66 69 65 64 20 61 73 20 74 68 65 20 74 72 69 67  fied as the trig
21060 67 65 72 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f  ger program.. */
21070 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20  .struct Trigger 
21080 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b  {.  char *zName;
21090 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
210a0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  he name of the t
210b0 72 69 67 67 65 72 20 20 20 20 20 20 20 20 20 20  rigger          
210c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2f                */
210d0 0a 20 20 63 68 61 72 20 2a 74 61 62 6c 65 3b 20  .  char *table; 
210e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
210f0 65 20 74 61 62 6c 65 20 6f 72 20 76 69 65 77 20  e table or view 
21100 74 6f 20 77 68 69 63 68 20 74 68 65 20 74 72 69  to which the tri
21110 67 67 65 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a  gger applies */.
21120 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
21130 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
21140 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
21150 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
21160 45 52 54 20 20 20 20 20 20 20 20 20 2a 2f 0a 20  ERT         */. 
21170 20 75 38 20 74 72 5f 74 6d 3b 20 20 20 20 20 20   u8 tr_tm;      
21180 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20           /* One 
21190 6f 66 20 54 52 49 47 47 45 52 5f 42 45 46 4f 52  of TRIGGER_BEFOR
211a0 45 2c 20 54 52 49 47 47 45 52 5f 41 46 54 45 52  E, TRIGGER_AFTER
211b0 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65   */.  Expr *pWhe
211c0 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
211d0 20 54 68 65 20 57 48 45 4e 20 63 6c 61 75 73 65   The WHEN clause
211e0 20 6f 66 20 74 68 65 20 65 78 70 72 65 73 73 69   of the expressi
211f0 6f 6e 20 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29  on (may be NULL)
21200 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 43   */.  IdList *pC
21210 6f 6c 75 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a  olumns;       /*
21220 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 55   If this is an U
21230 50 44 41 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e  PDATE OF <column
21240 2d 6c 69 73 74 3e 20 74 72 69 67 67 65 72 2c 0a  -list> trigger,.
21250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21260 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
21270 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69   <column-list> i
21280 73 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  s stored here */
21290 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
212a0 6d 61 3b 20 20 20 20 20 20 20 20 2f 2a 20 53 63  ma;        /* Sc
212b0 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20  hema containing 
212c0 74 68 65 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  the trigger */. 
212d0 20 53 63 68 65 6d 61 20 2a 70 54 61 62 53 63 68   Schema *pTabSch
212e0 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65  ema;     /* Sche
212f0 6d 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ma containing th
21300 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69  e table */.  Tri
21310 67 67 65 72 53 74 65 70 20 2a 73 74 65 70 5f 6c  ggerStep *step_l
21320 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73  ist; /* Link lis
21330 74 20 6f 66 20 74 72 69 67 67 65 72 20 70 72 6f  t of trigger pro
21340 67 72 61 6d 20 73 74 65 70 73 20 20 20 20 20 20  gram steps      
21350 20 20 20 20 20 20 20 2a 2f 0a 20 20 54 72 69 67         */.  Trig
21360 67 65 72 20 2a 70 4e 65 78 74 3b 20 20 20 20 20  ger *pNext;     
21370 20 20 20 20 2f 2a 20 4e 65 78 74 20 74 72 69 67      /* Next trig
21380 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77  ger associated w
21390 69 74 68 20 74 68 65 20 74 61 62 6c 65 20 2a 2f  ith the table */
213a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69  .};../*.** A tri
213b0 67 67 65 72 20 69 73 20 65 69 74 68 65 72 20 61  gger is either a
213c0 20 42 45 46 4f 52 45 20 6f 72 20 61 6e 20 41 46   BEFORE or an AF
213d0 54 45 52 20 74 72 69 67 67 65 72 2e 20 20 54 68  TER trigger.  Th
213e0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73  e following cons
213f0 74 61 6e 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69  tants.** determi
21400 6e 65 20 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20  ne which..**.** 
21410 49 66 20 74 68 65 72 65 20 61 72 65 20 6d 75 6c  If there are mul
21420 74 69 70 6c 65 20 74 72 69 67 67 65 72 73 2c 20  tiple triggers, 
21430 79 6f 75 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d  you might of som
21440 65 20 42 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d  e BEFORE and som
21450 65 20 41 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74  e AFTER..** In t
21460 68 61 74 20 63 61 73 65 73 2c 20 74 68 65 20 63  hat cases, the c
21470 6f 6e 73 74 61 6e 74 73 20 62 65 6c 6f 77 20 63  onstants below c
21480 61 6e 20 62 65 20 4f 52 65 64 20 74 6f 67 65 74  an be ORed toget
21490 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  her..*/.#define 
214a0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 20 20  TRIGGER_BEFORE  
214b0 31 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  1.#define TRIGGE
214c0 52 5f 41 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a  R_AFTER   2../*.
214d0 20 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f   * An instance o
214e0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
214f0 53 74 65 70 20 69 73 20 75 73 65 64 20 74 6f 20  Step is used to 
21500 73 74 6f 72 65 20 61 20 73 69 6e 67 6c 65 20 53  store a single S
21510 51 4c 20 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20  QL statement. * 
21520 74 68 61 74 20 69 73 20 61 20 70 61 72 74 20 6f  that is a part o
21530 66 20 61 20 74 72 69 67 67 65 72 2d 70 72 6f 67  f a trigger-prog
21540 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61  ram.. *. * Insta
21550 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20 54  nces of struct T
21560 72 69 67 67 65 72 53 74 65 70 20 61 72 65 20 73  riggerStep are s
21570 74 6f 72 65 64 20 69 6e 20 61 20 73 69 6e 67 6c  tored in a singl
21580 79 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c  y linked list (l
21590 69 6e 6b 65 64 0a 20 2a 20 75 73 69 6e 67 20 74  inked. * using t
215a0 68 65 20 22 70 4e 65 78 74 22 20 6d 65 6d 62 65  he "pNext" membe
215b0 72 29 20 72 65 66 65 72 65 6e 63 65 64 20 62 79  r) referenced by
215c0 20 74 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22   the "step_list"
215d0 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 0a 20   member of the. 
215e0 2a 20 61 73 73 6f 63 69 61 74 65 64 20 73 74 72  * associated str
215f0 75 63 74 20 54 72 69 67 67 65 72 20 69 6e 73 74  uct Trigger inst
21600 61 6e 63 65 2e 20 54 68 65 20 66 69 72 73 74 20  ance. The first 
21610 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c  element of the l
21620 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 0a 20 2a  inked list is. *
21630 20 74 68 65 20 66 69 72 73 74 20 73 74 65 70 20   the first step 
21640 6f 66 20 74 68 65 20 74 72 69 67 67 65 72 2d 70  of the trigger-p
21650 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68  rogram.. *. * Th
21660 65 20 22 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e  e "op" member in
21670 64 69 63 61 74 65 73 20 77 68 65 74 68 65 72 20  dicates whether 
21680 74 68 69 73 20 69 73 20 61 20 22 44 45 4c 45 54  this is a "DELET
21690 45 22 2c 20 22 49 4e 53 45 52 54 22 2c 20 22 55  E", "INSERT", "U
216a0 50 44 41 54 45 22 20 6f 72 0a 20 2a 20 22 53 45  PDATE" or. * "SE
216b0 4c 45 43 54 22 20 73 74 61 74 65 6d 65 6e 74 2e  LECT" statement.
216c0 20 54 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66   The meanings of
216d0 20 74 68 65 20 6f 74 68 65 72 20 6d 65 6d 62 65   the other membe
216e0 72 73 20 69 73 20 64 65 74 65 72 6d 69 6e 65 64  rs is determined
216f0 20 62 79 20 74 68 65 0a 20 2a 20 76 61 6c 75 65   by the. * value
21700 20 6f 66 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c   of "op" as foll
21710 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d  ows:. *. * (op =
21720 3d 20 54 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20  = TK_INSERT). * 
21730 6f 72 63 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f  orconf    -> sto
21740 72 65 73 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c  res the ON CONFL
21750 49 43 54 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a  ICT algorithm. *
21760 20 70 53 65 6c 65 63 74 20 20 20 2d 3e 20 49 66   pSelect   -> If
21770 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
21780 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45  RT INTO ... SELE
21790 43 54 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  CT ... statement
217a0 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
217b0 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
217c0 65 73 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  es a pointer to 
217d0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
217e0 6d 65 6e 74 2e 20 4f 74 68 65 72 77 69 73 65 20  ment. Otherwise 
217f0 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74  NULL.. * zTarget
21800 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
21810 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
21820 20 74 6f 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e   to insert into.
21830 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e  . * pExprList ->
21840 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
21850 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56  NSERT INTO ... V
21860 41 4c 55 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d  ALUES ... statem
21870 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20  ent, then. *    
21880 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20 73            this s
21890 74 6f 72 65 73 20 76 61 6c 75 65 73 20 74 6f 20  tores values to 
218a0 62 65 20 69 6e 73 65 72 74 65 64 2e 20 4f 74 68  be inserted. Oth
218b0 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20  erwise NULL.. * 
218c0 70 49 64 4c 69 73 74 20 20 20 2d 3e 20 49 66 20  pIdList   -> If 
218d0 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52  this is an INSER
218e0 54 20 49 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c  T INTO ... (<col
218f0 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55  umn-names>) VALU
21900 45 53 20 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20  ES .... *       
21910 20 20 20 20 20 20 20 73 74 61 74 65 6d 65 6e 74         statement
21920 2c 20 74 68 65 6e 20 74 68 69 73 20 73 74 6f 72  , then this stor
21930 65 73 20 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61  es the column-na
21940 6d 65 73 20 74 6f 20 62 65 0a 20 2a 20 20 20 20  mes to be. *    
21950 20 20 20 20 20 20 20 20 20 20 69 6e 73 65 72 74            insert
21960 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28  ed into.. *. * (
21970 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29  op == TK_DELETE)
21980 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e  . * zTarget   ->
21990 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f   Dequoted name o
219a0 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 64  f the table to d
219b0 65 6c 65 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70  elete from.. * p
219c0 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
219d0 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
219e0 74 68 65 20 44 45 4c 45 54 45 20 73 74 61 74 65  the DELETE state
219f0 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
21a00 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
21a10 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
21a20 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20  ise NULL.. *. * 
21a30 28 6f 70 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45  (op == TK_UPDATE
21a40 29 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d  ). * zTarget   -
21a50 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20  > Dequoted name 
21a60 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20  of the table to 
21a70 75 70 64 61 74 65 2e 0a 20 2a 20 70 57 68 65 72  update.. * pWher
21a80 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52  e    -> The WHER
21a90 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20  E clause of the 
21aa0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
21ab0 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69   if one is speci
21ac0 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20  fied.. *        
21ad0 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65 20        Otherwise 
21ae0 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69  NULL.. * pExprLi
21af0 73 74 20 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20  st -> A list of 
21b00 74 68 65 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75  the columns to u
21b10 70 64 61 74 65 20 61 6e 64 20 74 68 65 20 65 78  pdate and the ex
21b20 70 72 65 73 73 69 6f 6e 73 20 74 6f 20 75 70 64  pressions to upd
21b30 61 74 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ate. *          
21b40 20 20 20 20 74 68 65 6d 20 74 6f 2e 20 53 65 65      them to. See
21b50 20 73 71 6c 69 74 65 33 55 70 64 61 74 65 28 29   sqlite3Update()
21b60 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f   documentation o
21b70 66 20 22 70 43 68 61 6e 67 65 73 22 0a 20 2a 20  f "pChanges". * 
21b80 20 20 20 20 20 20 20 20 20 20 20 20 20 61 72 67               arg
21b90 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74  ument.. *. */.st
21ba0 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65 70  ruct TriggerStep
21bb0 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
21bc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
21bd0 20 6f 66 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54   of TK_DELETE, T
21be0 4b 5f 55 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53  K_UPDATE, TK_INS
21bf0 45 52 54 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a  ERT, TK_SELECT *
21c00 2f 0a 20 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20  /.  u8 orconf;  
21c10 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52           /* OE_R
21c20 6f 6c 6c 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a  ollback etc. */.
21c30 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
21c40 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74 72  ;      /* The tr
21c50 69 67 67 65 72 20 74 68 61 74 20 74 68 69 73 20  igger that this 
21c60 73 74 65 70 20 69 73 20 61 20 70 61 72 74 20 6f  step is a part o
21c70 66 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  f */.  Select *p
21c80 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a 20 53  Select;     /* S
21c90 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
21ca0 6f 72 20 52 48 53 20 6f 66 20 49 4e 53 45 52 54  or RHS of INSERT
21cb0 20 49 4e 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e   INTO SELECT ...
21cc0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54 61 72   */.  char *zTar
21cd0 67 65 74 3b 20 20 20 20 20 20 20 2f 2a 20 54 61  get;       /* Ta
21ce0 72 67 65 74 20 74 61 62 6c 65 20 66 6f 72 20 44  rget table for D
21cf0 45 4c 45 54 45 2c 20 55 50 44 41 54 45 2c 20 49  ELETE, UPDATE, I
21d00 4e 53 45 52 54 20 2a 2f 0a 20 20 45 78 70 72 20  NSERT */.  Expr 
21d10 2a 70 57 68 65 72 65 3b 20 20 20 20 20 20 20 20  *pWhere;        
21d20 2f 2a 20 54 68 65 20 57 48 45 52 45 20 63 6c 61  /* The WHERE cla
21d30 75 73 65 20 66 6f 72 20 44 45 4c 45 54 45 20 6f  use for DELETE o
21d40 72 20 55 50 44 41 54 45 20 73 74 65 70 73 20 2a  r UPDATE steps *
21d50 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 45  /.  ExprList *pE
21d60 78 70 72 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20  xprList; /* SET 
21d70 63 6c 61 75 73 65 20 66 6f 72 20 55 50 44 41 54  clause for UPDAT
21d80 45 2e 20 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a  E. */.  IdList *
21d90 70 49 64 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20  pIdList;     /* 
21da0 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72  Column names for
21db0 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 54 72 69   INSERT */.  Tri
21dc0 67 67 65 72 53 74 65 70 20 2a 70 4e 65 78 74 3b  ggerStep *pNext;
21dd0 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 74 68 65    /* Next in the
21de0 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20   link-list */.  
21df0 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4c 61  TriggerStep *pLa
21e00 73 74 3b 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65  st;  /* Last ele
21e10 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73  ment in link-lis
21e20 74 2e 20 56 61 6c 69 64 20 66 6f 72 20 31 73 74  t. Valid for 1st
21e30 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b   elem only */.};
21e40 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ../*.** The foll
21e50 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20  owing structure 
21e60 63 6f 6e 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61  contains informa
21e70 74 69 6f 6e 20 75 73 65 64 20 62 79 20 74 68 65  tion used by the
21e80 20 73 71 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a   sqliteFix....**
21e90 20 72 6f 75 74 69 6e 65 73 20 61 73 20 74 68 65   routines as the
21ea0 79 20 77 61 6c 6b 20 74 68 65 20 70 61 72 73 65  y walk the parse
21eb0 20 74 72 65 65 20 74 6f 20 6d 61 6b 65 20 64 61   tree to make da
21ec0 74 61 62 61 73 65 20 72 65 66 65 72 65 6e 63 65  tabase reference
21ed0 73 0a 2a 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a  s.** explicit..*
21ee0 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  /.typedef struct
21ef0 20 44 62 46 69 78 65 72 20 44 62 46 69 78 65 72   DbFixer DbFixer
21f00 3b 0a 73 74 72 75 63 74 20 44 62 46 69 78 65 72  ;.struct DbFixer
21f10 20 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72   {.  Parse *pPar
21f20 73 65 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  se;      /* The 
21f30 70 61 72 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e  parsing context.
21f40 20 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 73    Error messages
21f50 20 77 72 69 74 74 65 6e 20 68 65 72 65 20 2a 2f   written here */
21f60 0a 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65  .  Schema *pSche
21f70 6d 61 3b 20 20 20 20 2f 2a 20 46 69 78 20 69 74  ma;    /* Fix it
21f80 65 6d 73 20 74 6f 20 74 68 69 73 20 73 63 68 65  ems to this sche
21f90 6d 61 20 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72  ma */.  int bVar
21fa0 4f 6e 6c 79 3b 20 20 20 20 20 20 20 2f 2a 20 43  Only;       /* C
21fb0 68 65 63 6b 20 66 6f 72 20 76 61 72 69 61 62 6c  heck for variabl
21fc0 65 20 72 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c  e references onl
21fd0 79 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61  y */.  const cha
21fe0 72 20 2a 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61  r *zDb;    /* Ma
21ff0 6b 65 20 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65  ke sure all obje
22000 63 74 73 20 61 72 65 20 63 6f 6e 74 61 69 6e 65  cts are containe
22010 64 20 69 6e 20 74 68 69 73 20 64 61 74 61 62 61  d in this databa
22020 73 65 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68  se */.  const ch
22030 61 72 20 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54  ar *zType;  /* T
22040 79 70 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ype of the conta
22050 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
22060 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
22070 2f 0a 20 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20  /.  const Token 
22080 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20  *pName; /* Name 
22090 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72  of the container
220a0 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f   - used for erro
220b0 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b  r messages */.};
220c0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63  ../*.** An objec
220d0 74 65 64 20 75 73 65 64 20 74 6f 20 61 63 63 75  ted used to accu
220e0 6d 75 6c 61 74 65 20 74 68 65 20 74 65 78 74 20  mulate the text 
220f0 6f 66 20 61 20 73 74 72 69 6e 67 20 77 68 65 72  of a string wher
22100 65 20 77 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e  e we.** do not n
22110 65 63 65 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20  ecessarily know 
22120 68 6f 77 20 62 69 67 20 74 68 65 20 73 74 72 69  how big the stri
22130 6e 67 20 77 69 6c 6c 20 62 65 20 69 6e 20 74 68  ng will be in th
22140 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  e end..*/.struct
22150 20 53 74 72 41 63 63 75 6d 20 7b 0a 20 20 73 71   StrAccum {.  sq
22160 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20  lite3 *db;      
22170 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64     /* Optional d
22180 61 74 61 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b  atabase for look
22190 61 73 69 64 65 2e 20 20 43 61 6e 20 62 65 20 4e  aside.  Can be N
221a0 55 4c 4c 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  ULL */.  char *z
221b0 42 61 73 65 3b 20 20 20 20 20 20 20 20 20 2f 2a  Base;         /*
221c0 20 41 20 62 61 73 65 20 61 6c 6c 6f 63 61 74 69   A base allocati
221d0 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61  on.  Not from ma
221e0 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20  lloc. */.  char 
221f0 2a 7a 54 65 78 74 3b 20 20 20 20 20 20 20 20 20  *zText;         
22200 2f 2a 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  /* The string co
22210 6c 6c 65 63 74 65 64 20 73 6f 20 66 61 72 20 2a  llected so far *
22220 2f 0a 20 20 75 33 32 20 20 6e 43 68 61 72 3b 20  /.  u32  nChar; 
22230 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67           /* Leng
22240 74 68 20 6f 66 20 74 68 65 20 73 74 72 69 6e 67  th of the string
22250 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32   so far */.  u32
22260 20 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20    nAlloc;       
22270 20 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73    /* Amount of s
22280 70 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69  pace allocated i
22290 6e 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32  n zText */.  u32
222a0 20 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20    mxAlloc;      
222b0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c    /* Maximum all
222c0 6f 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  owed allocation.
222d0 20 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f    0 for no mallo
222e0 63 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 38 20  c usage */.  u8 
222f0 20 20 61 63 63 45 72 72 6f 72 3b 20 20 20 20 20    accError;     
22300 20 20 2f 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f    /* STRACCUM_NO
22310 4d 45 4d 20 6f 72 20 53 54 52 41 43 43 55 4d 5f  MEM or STRACCUM_
22320 54 4f 4f 42 49 47 20 2a 2f 0a 20 20 75 38 20 20  TOOBIG */.  u8  
22330 20 70 72 69 6e 74 66 46 6c 61 67 73 3b 20 20 20   printfFlags;   
22340 20 2f 2a 20 53 51 4c 49 54 45 5f 50 52 49 4e 54   /* SQLITE_PRINT
22350 46 20 66 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f  F flags below */
22360 0a 7d 3b 0a 23 64 65 66 69 6e 65 20 53 54 52 41  .};.#define STRA
22370 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23  CCUM_NOMEM   1.#
22380 64 65 66 69 6e 65 20 53 54 52 41 43 43 55 4d 5f  define STRACCUM_
22390 54 4f 4f 42 49 47 20 20 32 0a 23 64 65 66 69 6e  TOOBIG  2.#defin
223a0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
223b0 49 4e 54 45 52 4e 41 4c 20 30 78 30 31 20 20 2f  INTERNAL 0x01  /
223c0 2a 20 49 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f  * Internal-use-o
223d0 6e 6c 79 20 63 6f 6e 76 65 72 74 65 72 73 20 61  nly converters a
223e0 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e  llowed */.#defin
223f0 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f  e SQLITE_PRINTF_
22400 53 51 4c 46 55 4e 43 20 20 30 78 30 32 20 20 2f  SQLFUNC  0x02  /
22410 2a 20 53 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61  * SQL function a
22420 72 67 75 6d 65 6e 74 73 20 74 6f 20 56 58 50 72  rguments to VXPr
22430 69 6e 74 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20  intf */.#define 
22440 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41  SQLITE_PRINTF_MA
22450 4c 4c 4f 43 45 44 20 30 78 30 34 20 20 2f 2a 20  LLOCED 0x04  /* 
22460 54 72 75 65 20 69 66 20 78 54 65 78 74 20 69 73  True if xText is
22470 20 61 6c 6c 6f 63 61 74 65 64 20 73 70 61 63 65   allocated space
22480 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d   */..#define isM
22490 61 6c 6c 6f 63 65 64 28 58 29 20 20 28 28 28 58  alloced(X)  (((X
224a0 29 2d 3e 70 72 69 6e 74 66 46 6c 61 67 73 20 26  )->printfFlags &
224b0 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d   SQLITE_PRINTF_M
224c0 41 4c 4c 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f  ALLOCED)!=0).../
224d0 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74 65 72 20 74  *.** A pointer t
224e0 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  o this structure
224f0 20 69 73 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d   is used to comm
22500 75 6e 69 63 61 74 65 20 69 6e 66 6f 72 6d 61 74  unicate informat
22510 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69  ion.** from sqli
22520 74 65 33 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50  te3Init and OP_P
22530 61 72 73 65 53 63 68 65 6d 61 20 69 6e 74 6f 20  arseSchema into 
22540 74 68 65 20 73 71 6c 69 74 65 33 49 6e 69 74 43  the sqlite3InitC
22550 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65  allback..*/.type
22560 64 65 66 20 73 74 72 75 63 74 20 7b 0a 20 20 73  def struct {.  s
22570 71 6c 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20  qlite3 *db;     
22580 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
22590 73 65 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c  se being initial
225a0 69 7a 65 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a  ized */.  char *
225b0 2a 70 7a 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a  *pzErrMsg;    /*
225c0 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 73   Error message s
225d0 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
225e0 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
225f0 20 20 20 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69      /* 0 for mai
22600 6e 20 64 61 74 61 62 61 73 65 2e 20 20 31 20 66  n database.  1 f
22610 6f 72 20 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72  or TEMP, 2.. for
22620 20 41 54 54 41 43 48 65 64 20 2a 2f 0a 20 20 69   ATTACHed */.  i
22630 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20 20 20  nt rc;          
22640 20 20 20 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64     /* Result cod
22650 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a 2f  e stored here */
22660 0a 7d 20 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a  .} InitData;../*
22670 0a 2a 2a 20 53 74 72 75 63 74 75 72 65 20 63 6f  .** Structure co
22680 6e 74 61 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20  ntaining global 
22690 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 64 61  configuration da
226a0 74 61 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  ta for the SQLit
226b0 65 20 6c 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a  e library..**.**
226c0 20 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20   This structure 
226d0 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f  also contains so
226e0 6d 65 20 73 74 61 74 65 20 69 6e 66 6f 72 6d 61  me state informa
226f0 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
22700 53 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a  Sqlite3Config {.
22710 20 20 69 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20    int bMemstat; 
22720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22730 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65      /* True to e
22740 6e 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61  nable memory sta
22750 74 75 73 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f  tus */.  int bCo
22760 72 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20  reMutex;        
22770 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
22780 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72  ue to enable cor
22790 65 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20  e mutexing */.  
227a0 69 6e 74 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20  int bFullMutex; 
227b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
227c0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61    /* True to ena
227d0 62 6c 65 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e  ble full mutexin
227e0 67 20 2a 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e  g */.  int bOpen
227f0 55 72 69 3b 20 20 20 20 20 20 20 20 20 20 20 20  Uri;            
22800 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
22810 20 74 6f 20 69 6e 74 65 72 70 72 65 74 20 66 69   to interpret fi
22820 6c 65 6e 61 6d 65 73 20 61 73 20 55 52 49 73 20  lenames as URIs 
22830 2a 2f 0a 20 20 69 6e 74 20 62 55 73 65 43 69 73  */.  int bUseCis
22840 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22850 20 20 20 20 20 20 20 2f 2a 20 55 73 65 20 63 6f         /* Use co
22860 76 65 72 69 6e 67 20 69 6e 64 69 63 65 73 20 66  vering indices f
22870 6f 72 20 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f  or full-scans */
22880 0a 20 20 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b  .  int mxStrlen;
22890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
228a0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
228b0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f  string length */
228c0 0a 20 20 69 6e 74 20 6e 65 76 65 72 43 6f 72 72  .  int neverCorr
228d0 75 70 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  upt;            
228e0 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61 73 65       /* Database
228f0 20 69 73 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d   is always well-
22900 66 6f 72 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20  formed */.  int 
22910 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20  szLookaside;    
22920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22930 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69   Default lookasi
22940 64 65 20 62 75 66 66 65 72 20 73 69 7a 65 20 2a  de buffer size *
22950 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69  /.  int nLookasi
22960 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
22970 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74        /* Default
22980 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66 65   lookaside buffe
22990 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74  r count */.  int
229a0 20 6e 53 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20   nStmtSpill;    
229b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
229c0 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73  * Stmt-journal s
229d0 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72  pill-to-disk thr
229e0 65 73 68 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69  eshold */.  sqli
229f0 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20  te3_mem_methods 
22a00 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  m;            /*
22a10 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72   Low-level memor
22a20 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74  y allocation int
22a30 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69  erface */.  sqli
22a40 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64  te3_mutex_method
22a50 73 20 6d 75 74 65 78 3b 20 20 20 20 20 20 2f 2a  s mutex;      /*
22a60 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78   Low-level mutex
22a70 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
22a80 73 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d  sqlite3_pcache_m
22a90 65 74 68 6f 64 73 32 20 70 63 61 63 68 65 32 3b  ethods2 pcache2;
22aa0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70    /* Low-level p
22ab0 61 67 65 2d 63 61 63 68 65 20 69 6e 74 65 72 66  age-cache interf
22ac0 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
22ad0 48 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Heap;           
22ae0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 65             /* He
22af0 61 70 20 73 74 6f 72 61 67 65 20 73 70 61 63 65  ap storage space
22b00 20 2a 2f 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b   */.  int nHeap;
22b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
22b30 6f 66 20 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20  of pHeap[] */.  
22b40 69 6e 74 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71  int mnReq, mxReq
22b50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22b60 20 20 2f 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78    /* Min and max
22b70 20 68 65 61 70 20 72 65 71 75 65 73 74 73 20 73   heap requests s
22b80 69 7a 65 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65  izes */.  sqlite
22b90 33 5f 69 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20  3_int64 szMmap; 
22ba0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
22bb0 6d 61 70 28 29 20 73 70 61 63 65 20 70 65 72 20  map() space per 
22bc0 6f 70 65 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73  open file */.  s
22bd0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d  qlite3_int64 mxM
22be0 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  map;            
22bf0 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75   /* Maximum valu
22c00 65 20 66 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a  e for szMmap */.
22c10 20 20 76 6f 69 64 20 2a 70 53 63 72 61 74 63 68    void *pScratch
22c20 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22c30 20 20 20 20 2f 2a 20 53 63 72 61 74 63 68 20 6d      /* Scratch m
22c40 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73  emory */.  int s
22c50 7a 53 63 72 61 74 63 68 3b 20 20 20 20 20 20 20  zScratch;       
22c60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22c70 53 69 7a 65 20 6f 66 20 65 61 63 68 20 73 63 72  Size of each scr
22c80 61 74 63 68 20 62 75 66 66 65 72 20 2a 2f 0a 20  atch buffer */. 
22c90 20 69 6e 74 20 6e 53 63 72 61 74 63 68 3b 20 20   int nScratch;  
22ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cb0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
22cc0 73 63 72 61 74 63 68 20 62 75 66 66 65 72 73 20  scratch buffers 
22cd0 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 61 67 65  */.  void *pPage
22ce0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22cf0 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 20 63         /* Page c
22d00 61 63 68 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20  ache memory */. 
22d10 20 69 6e 74 20 73 7a 50 61 67 65 3b 20 20 20 20   int szPage;    
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61     /* Size of ea
22d40 63 68 20 70 61 67 65 20 69 6e 20 70 50 61 67 65  ch page in pPage
22d50 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67  [] */.  int nPag
22d60 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
22d70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
22d80 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
22d90 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pPage[] */.  int
22da0 20 6d 78 50 61 72 73 65 72 53 74 61 63 6b 3b 20   mxParserStack; 
22db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22dc0 2a 20 6d 61 78 69 6d 75 6d 20 64 65 70 74 68 20  * maximum depth 
22dd0 6f 66 20 74 68 65 20 70 61 72 73 65 72 20 73 74  of the parser st
22de0 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61  ack */.  int sha
22df0 72 65 64 43 61 63 68 65 45 6e 61 62 6c 65 64 3b  redCacheEnabled;
22e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 74 72             /* tr
22e10 75 65 20 69 66 20 73 68 61 72 65 64 2d 63 61 63  ue if shared-cac
22e20 68 65 20 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20  he mode enabled 
22e30 2a 2f 0a 20 20 75 33 32 20 73 7a 50 6d 61 3b 20  */.  u32 szPma; 
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75         /* Maximu
22e60 6d 20 53 6f 72 74 65 72 20 50 4d 41 20 73 69 7a  m Sorter PMA siz
22e70 65 20 2a 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62  e */.  /* The ab
22e80 6f 76 65 20 6d 69 67 68 74 20 62 65 20 69 6e 69  ove might be ini
22e90 74 69 61 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d  tialized to non-
22ea0 7a 65 72 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f  zero.  The follo
22eb0 77 69 6e 67 20 6e 65 65 64 20 74 6f 20 61 6c 77  wing need to alw
22ec0 61 79 73 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c  ays.  ** initial
22ed0 6c 79 20 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65  ly be zero, howe
22ee0 76 65 72 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73  ver. */.  int is
22ef0 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20  Init;           
22f00 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22f10 72 75 65 20 61 66 74 65 72 20 69 6e 69 74 69 61  rue after initia
22f20 6c 69 7a 61 74 69 6f 6e 20 68 61 73 20 66 69 6e  lization has fin
22f30 69 73 68 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69  ished */.  int i
22f40 6e 50 72 6f 67 72 65 73 73 3b 20 20 20 20 20 20  nProgress;      
22f50 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22f60 54 72 75 65 20 77 68 69 6c 65 20 69 6e 69 74 69  True while initi
22f70 61 6c 69 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f  alization in pro
22f80 67 72 65 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69  gress */.  int i
22f90 73 4d 75 74 65 78 49 6e 69 74 3b 20 20 20 20 20  sMutexInit;     
22fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22fb0 54 72 75 65 20 61 66 74 65 72 20 6d 75 74 65 78  True after mutex
22fc0 65 73 20 61 72 65 20 69 6e 69 74 69 61 6c 69 7a  es are initializ
22fd0 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61  ed */.  int isMa
22fe0 6c 6c 6f 63 49 6e 69 74 3b 20 20 20 20 20 20 20  llocInit;       
22ff0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
23000 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69  e after malloc i
23010 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f  s initialized */
23020 0a 20 20 69 6e 74 20 69 73 50 43 61 63 68 65 49  .  int isPCacheI
23030 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  nit;            
23040 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74       /* True aft
23050 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69  er malloc is ini
23060 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
23070 74 20 6e 52 65 66 49 6e 69 74 4d 75 74 65 78 3b  t nRefInitMutex;
23080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23090 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73 65  /* Number of use
230a0 72 73 20 6f 66 20 70 49 6e 69 74 4d 75 74 65 78  rs of pInitMutex
230b0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75   */.  sqlite3_mu
230c0 74 65 78 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b  tex *pInitMutex;
230d0 20 20 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78          /* Mutex
230e0 20 75 73 65 64 20 62 79 20 73 71 6c 69 74 65 33   used by sqlite3
230f0 5f 69 6e 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f  _initialize() */
23100 0a 20 20 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28  .  void (*xLog)(
23110 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  void*,int,const 
23120 63 68 61 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74  char*); /* Funct
23130 69 6f 6e 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20  ion for logging 
23140 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41  */.  void *pLogA
23150 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
23160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
23170 73 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78  st argument to x
23180 4c 6f 67 28 29 20 2a 2f 0a 23 69 66 64 65 66 20  Log() */.#ifdef 
23190 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51  SQLITE_ENABLE_SQ
231a0 4c 4c 4f 47 0a 20 20 76 6f 69 64 28 2a 78 53 71  LLOG.  void(*xSq
231b0 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69  llog)(void*,sqli
231c0 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
231d0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a  , int);.  void *
231e0 70 53 71 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64  pSqllogArg;.#end
231f0 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
23200 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 0a 20  _VDBE_COVERAGE. 
23210 20 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e   /* The followin
23220 67 20 63 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e  g callback (if n
23230 6f 74 20 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f  ot NULL) is invo
23240 6b 65 64 20 6f 6e 20 65 76 65 72 79 20 56 44 42  ked on every VDB
23250 45 20 62 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70  E branch.  ** op
23260 65 72 61 74 69 6f 6e 2e 20 20 53 65 74 20 74 68  eration.  Set th
23270 65 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67  e callback using
23280 20 53 51 4c 49 54 45 5f 54 45 53 54 43 54 52 4c   SQLITE_TESTCTRL
23290 5f 56 44 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a  _VDBE_COVERAGE..
232a0 20 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56    */.  void (*xV
232b0 64 62 65 42 72 61 6e 63 68 29 28 76 6f 69 64 2a  dbeBranch)(void*
232c0 2c 69 6e 74 20 69 53 72 63 4c 69 6e 65 2c 75 38  ,int iSrcLine,u8
232d0 20 65 54 68 69 73 2c 75 38 20 65 4d 78 29 3b 20   eThis,u8 eMx); 
232e0 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a   /* Callback */.
232f0 20 20 76 6f 69 64 20 2a 70 56 64 62 65 42 72 61    void *pVdbeBra
23300 6e 63 68 41 72 67 3b 20 20 20 20 20 20 20 20 20  nchArg;         
23310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23320 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
23330 73 74 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23  st argument */.#
23340 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
23350 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a  LITE_UNTESTABLE.
23360 20 20 69 6e 74 20 28 2a 78 54 65 73 74 43 61 6c    int (*xTestCal
23370 6c 62 61 63 6b 29 28 69 6e 74 29 3b 20 20 20 20  lback)(int);    
23380 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62      /* Invoked b
23390 79 20 73 71 6c 69 74 65 33 46 61 75 6c 74 53 69  y sqlite3FaultSi
233a0 6d 28 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20  m() */.#endif.  
233b0 69 6e 74 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61  int bLocaltimeFa
233c0 75 6c 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  ult;            
233d0 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 66 61 69    /* True to fai
233e0 6c 20 6c 6f 63 61 6c 74 69 6d 65 28 29 20 63 61  l localtime() ca
233f0 6c 6c 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e  lls */.  int iOn
23400 63 65 52 65 73 65 74 54 68 72 65 73 68 6f 6c 64  ceResetThreshold
23410 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68  ;          /* Wh
23420 65 6e 20 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f  en to reset OP_O
23430 6e 63 65 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  nce counters */.
23440 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d  };../*.** This m
23450 61 63 72 6f 20 69 73 20 75 73 65 64 20 69 6e 73  acro is used ins
23460 69 64 65 20 6f 66 20 61 73 73 65 72 74 28 29 20  ide of assert() 
23470 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e  statements to in
23480 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a 20 74  dicate that.** t
23490 68 65 20 61 73 73 65 72 74 20 69 73 20 6f 6e 6c  he assert is onl
234a0 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c  y valid on a wel
234b0 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73  l-formed databas
234c0 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a  e.  Instead of:.
234d0 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74  **.**     assert
234e0 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65  ( X );.**.** One
234f0 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20   writes:.**.**  
23500 20 20 20 61 73 73 65 72 74 28 20 58 20 7c 7c 20     assert( X || 
23510 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a  CORRUPT_DB );.**
23520 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42 20 69  .** CORRUPT_DB i
23530 73 20 74 72 75 65 20 64 75 72 69 6e 67 20 6e 6f  s true during no
23540 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20  rmal operation. 
23550 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f 65 73   CORRUPT_DB does
23560 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a   not indicate.**
23570 20 74 68 61 74 20 74 68 65 20 64 61 74 61 62 61   that the databa
23580 73 65 20 69 73 20 64 65 66 69 6e 69 74 65 6c 79  se is definitely
23590 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74   corrupt, only t
235a0 68 61 74 20 69 74 20 6d 69 67 68 74 20 62 65 20  hat it might be 
235b0 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20  corrupt..** For 
235c0 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65 73 2c  most test cases,
235d0 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 73   CORRUPT_DB is s
235e0 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73 69 6e  et to false usin
235f0 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73  g a special.** s
23600 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74  qlite3_test_cont
23610 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65 6e 61  rol().  This ena
23620 62 6c 65 73 20 61 73 73 65 72 74 28 29 20 73 74  bles assert() st
23630 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76  atements to prov
23640 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68 61 74  e.** things that
23650 20 61 72 65 20 61 6c 77 61 79 73 20 74 72 75 65   are always true
23660 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64   for well-formed
23670 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23   databases..*/.#
23680 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54 5f 44  define CORRUPT_D
23690 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e 66 69  B  (sqlite3Confi
236a0 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74 3d 3d  g.neverCorrupt==
236b0 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78  0)../*.** Contex
236c0 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73 65 64  t pointer passed
236d0 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20 74 68   down through th
236e0 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a  e tree-walk..*/.
236f0 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a  struct Walker {.
23700 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23720 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
23730 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20 20  arser context.  
23740 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78 70 72  */.  int (*xExpr
23750 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72  Callback)(Walker
23760 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20 20 2f  *, Expr*);     /
23770 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65  * Callback for e
23780 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20  xpressions */.  
23790 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43 61 6c  int (*xSelectCal
237a0 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53  lback)(Walker*,S
237b0 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c  elect*);  /* Cal
237c0 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
237d0 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53  s */.  void (*xS
237e0 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32 29 28  electCallback2)(
237f0 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29  Walker*,Select*)
23800 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62  ;/* Second callb
23810 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20  ack for SELECTs 
23820 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65 72 44  */.  int walkerD
23830 65 70 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  epth;           
23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
23850 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75 62 71  * Number of subq
23860 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38 20 65  ueries */.  u8 e
23870 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  Code;           
23880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23890 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c        /* A small
238a0 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f 64 65   processing code
238b0 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20   */.  union {   
238c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238e0 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20 66 6f  /* Extra data fo
238f0 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  r callback */.  
23900 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70    NameContext *p
23910 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  NC;             
23920 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23930 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74 20 2a  Naming context *
23940 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20 20 20  /.    int n;    
23950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23970 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20 2a 2f   /* A counter */
23980 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b 20 20  .    int iCur;  
23990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239b0 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75 6d 62  /* A cursor numb
239c0 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c 69 73  er */.    SrcLis
239d0 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 20  t *pSrcList;    
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
239f0 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63 6c 61       /* FROM cla
23a00 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  use */.    struc
23a10 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53 72 63  t SrcCount *pSrc
23a20 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20 20 20  Count;          
23a30 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69 6e        /* Countin
23a40 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65 6e  g column referen
23a50 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75 63  ces */.    struc
23a60 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43 75  t CCurHint *pCCu
23a70 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20  rHint;          
23a80 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
23a90 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28   codeCursorHint(
23aa0 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69  ) */.    int *ai
23ab0 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ad0 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20      /* array of 
23ae0 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a  column indexes *
23af0 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78  /.    struct Idx
23b00 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65 72  Cover *pIdxCover
23b10 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23b20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e   /* Check for in
23b30 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a  dex coverage */.
23b40 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f    } u;.};../* Fo
23b50 72 77 61 72 64 20 64 65 63 6c 61 72 61 74 69 6f  rward declaratio
23b60 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65  ns */.int sqlite
23b70 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b 65 72  3WalkExpr(Walker
23b80 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  *, Expr*);.int s
23b90 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 4c 69  qlite3WalkExprLi
23ba0 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  st(Walker*, Expr
23bb0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
23bc0 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28 57 61  te3WalkSelect(Wa
23bd0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
23be0 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
23bf0 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c 6b 65  SelectExpr(Walke
23c00 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
23c10 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c  t sqlite3WalkSel
23c20 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72 2a 2c  ectFrom(Walker*,
23c30 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73   Select*);.int s
23c40 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b 4e 6f  qlite3ExprWalkNo
23c50 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72  op(Walker*, Expr
23c60 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  *);../*.** Retur
23c70 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68 65 20  n code from the 
23c80 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c 6b 69  parse-tree walki
23c90 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20 61 6e  ng primitives an
23ca0 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62  d their.** callb
23cb0 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  acks..*/.#define
23cc0 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20   WRC_Continue   
23cd0 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65   0   /* Continue
23ce0 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64   down into child
23cf0 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ren */.#define W
23d00 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20 20 31  RC_Prune       1
23d10 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64     /* Omit child
23d20 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e 75 65  ren but continue
23d30 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67   walking sibling
23d40 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43  s */.#define WRC
23d50 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32 20 20  _Abort       2  
23d60 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68 65 20   /* Abandon the 
23d70 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a  tree walk */../*
23d80 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
23d90 6f 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72  of this structur
23da0 65 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73  e represents a s
23db0 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72  et of one or mor
23dc0 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f  e CTEs.** (commo
23dd0 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73 73 69  n table expressi
23de0 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62 79 20  ons) created by 
23df0 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20 63 6c  a single WITH cl
23e00 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ause..*/.struct 
23e10 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74  With {.  int nCt
23e20 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
23e30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
23e40 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20 74 68  er of CTEs in th
23e50 65 20 57 49 54 48 20 63 6c 61 75 73 65 20 2a 2f  e WITH clause */
23e60 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65 72 3b  .  With *pOuter;
23e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e80 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67     /* Containing
23e90 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20 6f 72   WITH clause, or
23ea0 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63   NULL */.  struc
23eb0 74 20 43 74 65 20 7b 20 20 20 20 20 20 20 20 20  t Cte {         
23ec0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f             /* Fo
23ed0 72 20 65 61 63 68 20 43 54 45 20 69 6e 20 74 68  r each CTE in th
23ee0 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e  e WITH clause...
23ef0 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  . */.    char *z
23f00 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20  Name;           
23f10 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65           /* Name
23f20 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a 2f 0a   of this CTE */.
23f30 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70 43      ExprList *pC
23f40 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ols;            
23f50 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65      /* List of e
23f60 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e  xplicit column n
23f70 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ames, or NULL */
23f80 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
23f90 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lect;           
23fa0 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65 66 69       /* The defi
23fb0 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73 20 43  nition of this C
23fc0 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20  TE */.    const 
23fd0 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b 20 20  char *zCteErr;  
23fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 72 72            /* Err
23ff0 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20 63  or message for c
24000 69 72 63 75 6c 61 72 20 72 65 66 65 72 65 6e 63  ircular referenc
24010 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a  es */.  } a[1];.
24020 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  };..#ifdef SQLIT
24030 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e  E_DEBUG./*.** An
24040 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
24050 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65 63 74   TreeView object
24060 20 69 73 20 75 73 65 64 20 66 6f 72 20 70 72 69   is used for pri
24070 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e  nting the conten
24080 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73 74 72  t of.** data str
24090 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c 69 74  uctures on sqlit
240a0 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 29 20  e3DebugPrintf() 
240b0 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b  using a tree-lik
240c0 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63  e view..*/.struc
240d0 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20 20 69  t TreeView {.  i
240e0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
240f0 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20         /* Which 
24100 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74 72 65  level of the tre
24110 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20  e we are on */. 
24120 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b   u8  bLine[100];
24130 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72 61 77           /* Draw
24140 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c   vertical in col
24150 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65 5b 69  umn i if bLine[i
24160 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a  ] is true */.};.
24170 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
24180 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  _DEBUG */../*.**
24190 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f   Assuming zIn po
241a0 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69 72 73  ints to the firs
241b0 74 20 62 79 74 65 20 6f 66 20 61 20 55 54 46 2d  t byte of a UTF-
241c0 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20  8 character,.** 
241d0 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70  advance zIn to p
241e0 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69 72 73  oint to the firs
241f0 74 20 62 79 74 65 20 6f 66 20 74 68 65 20 6e 65  t byte of the ne
24200 78 74 20 55 54 46 2d 38 20 63 68 61 72 61 63 74  xt UTF-8 charact
24210 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  er..*/.#define S
24220 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46 38 28  QLITE_SKIP_UTF8(
24230 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20 20 20  zIn) {          
24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a                \.
24250 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29    if( (*(zIn++))
24260 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20 20 20  >=0xc0 ){       
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24280 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77 68 69         \.    whi
24290 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78 63 30  le( (*zIn & 0xc0
242a0 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b  )==0x80 ){ zIn++
242b0 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20  ; }             
242c0 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20 20 20  \.  }           
242d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
242f0 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a           \.}../*
24300 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 2a  .** The SQLITE_*
24310 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61 72 65  _BKPT macros are
24320 20 73 75 62 73 74 69 74 75 74 65 73 20 66 6f 72   substitutes for
24330 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64 65 73   the error codes
24340 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d   with.** the sam
24350 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74 68 6f  e name but witho
24360 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73 75 66  ut the _BKPT suf
24370 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61 63 72  fix.  These macr
24380 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75  os invoke.** rou
24390 74 69 6e 65 73 20 74 68 61 74 20 72 65 70 6f 72  tines that repor
243a0 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65  t the line-numbe
243b0 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65 20 65  r on which the e
243c0 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65 64 0a  rror originated.
243d0 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  ** using sqlite3
243e0 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72 6f 75  _log().  The rou
243f0 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f 76 69  tines also provi
24400 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20  de a convenient 
24410 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20  place.** to set 
24420 61 20 64 65 62 75 67 67 65 72 20 62 72 65 61 6b  a debugger break
24430 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71  point..*/.int sq
24440 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
24450 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  r(int);.int sqli
24460 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 69  te3MisuseError(i
24470 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24480 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e  CantopenError(in
24490 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  t);.#define SQLI
244a0 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50 54 20  TE_CORRUPT_BKPT 
244b0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
244c0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64  ror(__LINE__).#d
244d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53  efine SQLITE_MIS
244e0 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74 65 33  USE_BKPT sqlite3
244f0 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49  MisuseError(__LI
24500 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20 53 51  NE__).#define SQ
24510 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b  LITE_CANTOPEN_BK
24520 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74 6f 70  PT sqlite3Cantop
24530 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  enError(__LINE__
24540 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ).#ifdef SQLITE_
24550 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71 6c 69  DEBUG.  int sqli
24560 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e  te3NomemError(in
24570 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
24580 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72  3IoerrnomemError
24590 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  (int);.# define 
245a0 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50  SQLITE_NOMEM_BKP
245b0 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72  T sqlite3NomemEr
245c0 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20  ror(__LINE__).# 
245d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
245e0 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ERR_NOMEM_BKPT s
245f0 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d  qlite3Ioerrnomem
24600 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
24610 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
24620 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  QLITE_NOMEM_BKPT
24630 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20   SQLITE_NOMEM.# 
24640 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f  define SQLITE_IO
24650 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53  ERR_NOMEM_BKPT S
24660 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45  QLITE_IOERR_NOME
24670 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  M.#endif../*.** 
24680 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62 6f  FTS3 and FTS4 bo
24690 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74 75  th require virtu
246a0 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  al table support
246b0 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
246c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
246d0 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64 65  UALTABLE).# unde
246e0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
246f0 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51 4c  FTS3.# undef SQL
24700 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 0a  ITE_ENABLE_FTS4.
24710 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54  #endif../*.** FT
24720 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e 20  S4 is really an 
24730 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46 54  extension for FT
24740 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62 6c  S3.  It is enabl
24750 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20  ed using the.** 
24760 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24770 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20 74  S3 macro.  But t
24780 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69 6f  o avoid confusio
24790 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a 2a  n we also call.*
247a0 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e 41  * the SQLITE_ENA
247b0 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20 74  BLE_FTS4 macro t
247c0 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61 6c  o serve as an al
247d0 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f 45  ias for SQLITE_E
247e0 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a 23  NABLE_FTS3..*/.#
247f0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
24800 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20 26  E_ENABLE_FTS4) &
24810 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
24820 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a 23  E_ENABLE_FTS3).#
24830 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
24840 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65 6e  NABLE_FTS3 1.#en
24850 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63  dif../*.** The c
24860 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69 73  type.h header is
24870 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e 2d   needed for non-
24880 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20 20  ASCII systems.  
24890 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e 65  It is also.** ne
248a0 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68 65  eded by FTS3 whe
248b0 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75 64  n FTS3 is includ
248c0 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67 61  ed in the amalga
248d0 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20 21  mation..*/.#if !
248e0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
248f0 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20 28  SCII) || \.    (
24900 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
24910 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20 64  NABLE_FTS3) && d
24920 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41 4d  efined(SQLITE_AM
24930 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20 69  ALGAMATION)).# i
24940 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68 3e  nclude <ctype.h>
24950 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
24960 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
24970 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73 74  ros mimic the st
24980 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20 66  andard library f
24990 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65 72  unctions toupper
249a0 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28 29  (),.** isspace()
249b0 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73 64  , isalnum(), isd
249c0 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64 69  igit() and isxdi
249d0 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69 76  git(), respectiv
249e0 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c 69  ely. The.** sqli
249f0 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c 79  te versions only
24a00 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49 20   work for ASCII 
24a10 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67 61  characters, rega
24a20 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c 65  rdless of locale
24a30 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
24a40 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69 6e  TE_ASCII.# defin
24a50 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65 72  e sqlite3Toupper
24a60 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c 69  (x)  ((x)&~(sqli
24a70 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e 73  te3CtypeMap[(uns
24a80 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 26  igned char)(x)]&
24a90 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65 20  0x20)).# define 
24aa0 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
24ab0 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
24ac0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
24ad0 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a 23  har)(x)]&0x01).#
24ae0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24af0 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71 6c  salnum(x)   (sql
24b00 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
24b10 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
24b20 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65 20  &0x06).# define 
24b30 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28 78  sqlite3Isalpha(x
24b40 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
24b50 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
24b60 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a 23  har)(x)]&0x02).#
24b70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24b80 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71 6c  sdigit(x)   (sql
24b90 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
24ba0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
24bb0 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65 20  &0x04).# define 
24bc0 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74 28  sqlite3Isxdigit(
24bd0 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  x)  (sqlite3Ctyp
24be0 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
24bf0 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a 23  har)(x)]&0x08).#
24c00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
24c10 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71 6c  olower(x)   (sql
24c20 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65 72  ite3UpperToLower
24c30 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  [(unsigned char)
24c40 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20 73  (x)]).# define s
24c50 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
24c60 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70 65     (sqlite3Ctype
24c70 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63 68  Map[(unsigned ch
24c80 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23 65  ar)(x)]&0x80).#e
24c90 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
24ca0 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20  ite3Toupper(x)  
24cb0 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67 6e   toupper((unsign
24cc0 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
24cd0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 73  efine sqlite3Iss
24ce0 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61 63  pace(x)   isspac
24cf0 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  e((unsigned char
24d00 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
24d10 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78 29  qlite3Isalnum(x)
24d20 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73 69     isalnum((unsi
24d30 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
24d40 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24d50 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61 6c  salpha(x)   isal
24d60 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63 68  pha((unsigned ch
24d70 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
24d80 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
24d90 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75 6e  x)   isdigit((un
24da0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
24db0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24dc0 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69 73  3Isxdigit(x)  is
24dd0 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  xdigit((unsigned
24de0 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
24df0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  ine sqlite3Tolow
24e00 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72 28  er(x)   tolower(
24e10 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28  (unsigned char)(
24e20 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  x)).# define sql
24e30 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20 20  ite3Isquote(x)  
24e40 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29 3d   ((x)=='"'||(x)=
24e50 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27 7c  ='\''||(x)=='['|
24e60 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64 69  |(x)=='`').#endi
24e70 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  f.#ifndef SQLITE
24e80 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
24e90 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73 71  ION_DIAGS.int sq
24ea0 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75 38  lite3IsIdChar(u8
24eb0 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  );.#endif../*.**
24ec0 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74 69   Internal functi
24ed0 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a 2f  on prototypes.*/
24ee0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 49  .int sqlite3StrI
24ef0 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Cmp(const char*,
24f00 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
24f10 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  t sqlite3Strlen3
24f20 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  0(const char*);.
24f30 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f 6c  char *sqlite3Col
24f40 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a 2c  umnType(Column*,
24f50 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20  char*);.#define 
24f60 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 20  sqlite3StrNICmp 
24f70 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d 70  sqlite3_strnicmp
24f80 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c  ..int sqlite3Mal
24f90 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a 76  locInit(void);.v
24fa0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  oid sqlite3Mallo
24fb0 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69 64  cEnd(void);.void
24fc0 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 28   *sqlite3Malloc(
24fd0 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
24fe0 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75 36  te3MallocZero(u6
24ff0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
25000 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73 71  3DbMallocZero(sq
25010 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76 6f  lite3*, u64);.vo
25020 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
25030 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a 2c  locRaw(sqlite3*,
25040 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   u64);.void *sql
25050 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 4e  ite3DbMallocRawN
25060 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29  N(sqlite3*, u64)
25070 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44  ;.char *sqlite3D
25080 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33 2a  bStrDup(sqlite3*
25090 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63  ,const char*);.c
250a0 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53 74  har *sqlite3DbSt
250b0 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 63  rNDup(sqlite3*,c
250c0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34 29  onst char*, u64)
250d0 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 52  ;.void *sqlite3R
250e0 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75 36  ealloc(void*, u6
250f0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
25100 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65 65  3DbReallocOrFree
25110 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
25120 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a   *, u64);.void *
25130 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
25140 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69 64  (sqlite3 *, void
25150 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 73   *, u64);.void s
25160 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71 6c  qlite3DbFree(sql
25170 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 69  ite3*, void*);.i
25180 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  nt sqlite3Malloc
25190 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e 74  Size(void*);.int
251a0 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
251b0 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20 76  Size(sqlite3*, v
251c0 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  oid*);.void *sql
251d0 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c 6c 6f  ite3ScratchMallo
251e0 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
251f0 69 74 65 33 53 63 72 61 74 63 68 46 72 65 65 28  ite3ScratchFree(
25200 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
25210 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
25220 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25230 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
25240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
25250 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
25260 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d);.#ifndef SQLI
25270 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
25280 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
25290 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
252a0 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
252b0 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e   (*)(void));.#en
252c0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48  dif.int sqlite3H
252d0 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f  eapNearlyFull(vo
252e0 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73  id);../*.** On s
252f0 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c  ystems with ampl
25300 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e  e stack space an
25310 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61  d that support a
25320 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a  lloca(), make.**
25330 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29   use of alloca()
25340 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65   to obtain space
25350 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d   for large autom
25360 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42  atic objects.  B
25370 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62  y default,.** ob
25380 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20  tain space from 
25390 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20  malloc()..**.** 
253a0 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75  The alloca() rou
253b0 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72  tine never retur
253c0 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77  ns NULL.  This w
253d0 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70  ill cause code p
253e0 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61  aths.** that dea
253f0 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74  l with sqlite3St
25400 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75  ackAlloc() failu
25410 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63  res to be unreac
25420 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  hable..*/.#ifdef
25430 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f   SQLITE_USE_ALLO
25440 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  CA.# define sqli
25450 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
25460 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e  (D,N)   alloca(N
25470 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25480 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
25490 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c  (D,N)  memset(al
254a0 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23  loca(N), 0, N).#
254b0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
254c0 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65  tackFree(D,P).#e
254d0 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
254e0 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
254f0 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
25500 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
25510 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25520 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
25530 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
25540 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
25550 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
25560 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
25570 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
25580 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(D,P).#endif../
25590 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  * Do not allow b
255a0 6f 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20  oth MEMSYS5 and 
255b0 4d 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65  MEMSYS3 to be de
255c0 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20  fined together. 
255d0 20 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c   If they.** are,
255e0 20 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33   disable MEMSYS3
255f0 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
25600 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
25610 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
25620 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
25630 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
25640 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53  (void);.#undef S
25650 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
25660 53 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64  SYS3.#endif.#ifd
25670 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25680 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
25690 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
256a0 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
256b0 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
256c0 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
256d0 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
256e0 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
256f0 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
25700 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
25710 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
25720 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
25730 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
25740 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
25750 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
25760 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
25770 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
25780 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
25790 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
257a0 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
257b0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
257c0 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
257d0 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26  TE_MUTEX_OMIT) &
257e0 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
257f0 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20  E_MUTEX_NOOP).  
25800 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f  void sqlite3Memo
25810 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b  ryBarrier(void);
25820 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
25830 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
25840 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73  rier().#endif..s
25850 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
25860 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28  ite3StatusValue(
25870 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25880 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20  e3StatusUp(int, 
25890 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
258a0 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74  e3StatusDown(int
258b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
258c0 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77 61  ite3StatusHighwa
258d0 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a  ter(int, int);..
258e0 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74  /* Access to mut
258f0 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c  exes used by sql
25900 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f  ite3_status() */
25910 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
25920 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75  sqlite3Pcache1Mu
25930 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74  tex(void);.sqlit
25940 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
25950 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69  3MallocMutex(voi
25960 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  d);..#ifndef SQL
25970 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
25980 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71  G_POINT.  int sq
25990 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c  lite3IsNaN(doubl
259a0 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
259b0 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ne sqlite3IsNaN(
259c0 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  X)  0.#endif../*
259d0 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
259e0 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
259f0 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
25a00 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
25a10 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69  ut SQL.** functi
25a20 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68  ons arguments th
25a30 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d  at are the param
25a40 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69  eters to the pri
25a50 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  ntf() function..
25a60 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66  */.struct Printf
25a70 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e  Arguments {.  in
25a80 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  t nArg;         
25a90 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20         /* Total 
25aa0 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
25ab0 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73  nts */.  int nUs
25ac0 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
25ad0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
25ae0 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f  rguments used so
25af0 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65   far */.  sqlite
25b00 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b  3_value **apArg;
25b10 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65     /* The argume
25b20 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a  nt values */.};.
25b30 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
25b40 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
25b50 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61   const char*, va
25b60 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c  _list);.void sql
25b70 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41  ite3XPrintf(StrA
25b80 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
25b90 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
25ba0 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
25bb0 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
25bc0 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
25bd0 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
25be0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
25bf0 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
25c00 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
25c10 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
25c20 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
25c30 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f  E_OS_TRACE).  vo
25c40 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
25c50 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
25c60 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
25c70 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
25c80 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
25c90 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
25ca0 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
25cb0 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
25cc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
25cd0 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
25ce0 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
25cf0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
25d00 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
25d10 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
25d20 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74  ViewBareExprList
25d30 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
25d40 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  t ExprList*, con
25d50 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
25d60 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
25d70 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
25d80 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
25d90 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
25da0 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
25db0 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
25dc0 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20  lect(TreeView*, 
25dd0 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75  const Select*, u
25de0 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
25df0 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54  e3TreeViewWith(T
25e00 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
25e10 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  With*, u8);.#end
25e20 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
25e30 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
25e40 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
25e50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
25e60 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
25e70 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
25e80 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
25e90 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
25ea0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
25eb0 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f  ite3TokenInit(To
25ec0 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74  ken*,char*);.int
25ed0 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
25ee0 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
25ef0 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
25f00 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
25f10 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
25f20 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
25f30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25f40 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
25f50 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
25f60 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
25f70 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
25f80 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
25f90 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
25fa0 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
25fb0 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
25fc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
25fd0 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
25fe0 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
25ff0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
26000 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
26010 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  rse*);.#ifdef SQ
26020 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
26030 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52  qlite3NoTempsInR
26040 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
26050 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70  int);.#endif.Exp
26060 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
26070 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
26080 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
26090 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
260a0 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
260b0 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
260c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
260d0 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
260e0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
260f0 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
26100 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
26110 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
26120 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
26130 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64   sqlite3PExprAdd
26140 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  Select(Parse*, E
26150 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xpr*, Select*);.
26160 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
26170 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
26180 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
26190 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
261a0 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
261b0 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
261c0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
261d0 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
261e0 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
261f0 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
26200 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
26210 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
26220 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
26230 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
26240 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
26250 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73  ,Expr*);.ExprLis
26260 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
26270 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50  stAppendVector(P
26280 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
26290 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  IdList*,Expr*);.
262a0 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
262b0 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
262c0 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  (ExprList*,int);
262d0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
262e0 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
262f0 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
26300 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
26310 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
26320 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
26330 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
26340 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26350 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
26360 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
26370 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  t*);.u32 sqlite3
26380 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f  ExprListFlags(co
26390 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nst ExprList*);.
263a0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
263b0 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
263c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
263d0 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
263e0 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
263f0 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
26400 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
26410 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
26420 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66  Token*,int);.#if
26430 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26440 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f  _VIRTUALTABLE.Mo
26450 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61  dule *sqlite3Pra
26460 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28  gmaVtabRegister(
26470 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
26480 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e  har *zName);.#en
26490 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
264a0 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
264b0 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
264c0 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
264d0 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
264e0 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
264f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
26500 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
26510 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
26520 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
26530 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
26540 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
26550 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c  sqlite3DeleteCol
26560 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33  umnNames(sqlite3
26570 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  *,Table*);.int s
26580 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f  qlite3ColumnsFro
26590 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
265a0 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c  ,ExprList*,i16*,
265b0 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20  Column**);.void 
265c0 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64  sqlite3SelectAdd
265d0 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c  ColumnTypeAndCol
265e0 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  lation(Parse*,Ta
265f0 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54  ble*,Select*);.T
26600 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
26610 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
26620 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
26630 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
26640 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
26650 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
26660 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
26670 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
26680 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
26690 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
266a0 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
266b0 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
266c0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
266d0 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
266e0 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54  ,int);.#if SQLIT
266f0 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
26700 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73  COLUMNS.  void s
26710 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
26720 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
26730 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  able*, Column*);
26740 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26750 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
26760 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
26770 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  T,C) /* no-op */
26780 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
26790 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
267a0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
267b0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
267c0 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
267d0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
267e0 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
267f0 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
26800 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
26810 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26820 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
26830 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
26840 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
26850 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
26860 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
26870 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26880 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
26890 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
268a0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
268b0 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
268c0 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
268d0 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
268e0 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
268f0 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
26900 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
26910 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
26920 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
26930 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
26940 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
26950 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
26960 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
26970 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66   char*);..#ifdef
26980 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
26990 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  LE.# define sqli
269a0 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53  te3FaultSim(X) S
269b0 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20  QLITE_OK.#else. 
269c0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c   int sqlite3Faul
269d0 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69  tSim(int);.#endi
269e0 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  f..Bitvec *sqlit
269f0 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
26a00 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
26a10 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
26a20 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
26a30 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e  lite3BitvecTestN
26a40 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20  otNull(Bitvec*, 
26a50 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
26a60 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
26a70 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
26a80 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
26a90 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
26aa0 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
26ab0 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
26ac0 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
26ad0 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
26ae0 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e  e(Bitvec*);.#ifn
26af0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
26b00 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65  TABLE.int sqlite
26b10 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
26b20 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
26b30 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
26b40 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
26b50 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
26b60 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
26b70 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
26b80 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
26b90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
26ba0 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
26bb0 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
26bc0 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
26bd0 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
26be0 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
26bf0 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
26c00 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
26c10 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
26c20 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
26c30 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
26c40 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
26c50 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
26c60 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
26c70 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
26c80 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
26c90 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
26ca0 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
26cb0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
26cc0 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
26cd0 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
26ce0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
26cf0 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
26d00 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
26d10 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
26d20 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
26d30 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
26d40 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
26d50 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
26d60 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
26d70 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
26d80 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26d90 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
26da0 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
26db0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
26dc0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
26dd0 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
26de0 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Table*);.#ifndef
26df0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
26e00 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
26e10 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
26e20 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
26e30 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
26e40 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
26e50 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
26e60 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
26e70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
26e80 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
26e90 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
26ea0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
26eb0 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
26ec0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
26ed0 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
26ee0 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
26ef0 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
26f00 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
26f10 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
26f20 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
26f30 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
26f40 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
26f50 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49  pend(sqlite3*, I
26f60 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
26f70 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
26f80 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
26f90 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
26fa0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
26fb0 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c  cListEnlarge(sql
26fc0 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
26fd0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
26fe0 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
26ff0 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
27000 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  3*, SrcList*, To
27010 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
27020 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
27030 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
27040 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
27050 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
27060 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
27070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27080 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
27090 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
270a0 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
270b0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
270c0 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
270d0 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
270e0 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
270f0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e  qlite3SrcListFun
27100 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72  cArgs(Parse*, Sr
27110 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
27120 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
27130 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
27140 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
27150 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
27160 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
27170 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
27180 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
27190 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
271a0 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
271b0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
271c0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
271d0 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
271e0 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
271f0 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
27200 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
27210 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
27220 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61  x *sqlite3Alloca
27230 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71  teIndexObject(sq
27240 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63  lite3*,i16,int,c
27250 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
27260 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
27270 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
27280 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
27290 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
272a0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
272b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
272c0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  pr*, int, int, u
272d0 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
272e0 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
272f0 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
27300 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
27310 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
27320 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
27330 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
27340 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
27350 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
27360 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
27370 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
27380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27390 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
273a0 75 33 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u32,Expr*,Expr*)
273b0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
273c0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
273d0 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
273e0 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
273f0 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
27400 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
27410 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
27420 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
27430 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
27440 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
27450 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
27460 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
27470 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
27480 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
27490 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
274a0 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
274b0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
274c0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
274d0 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
274e0 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
274f0 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
27500 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
27510 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
27520 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
27530 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
27540 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
27550 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
27560 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
27570 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
27580 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
27590 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
275a0 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
275b0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
275c0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
275d0 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
275e0 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
275f0 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f  (WhereInfo*);.Lo
27600 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72  gEst sqlite3Wher
27610 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
27620 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
27630 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
27640 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
27650 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
27660 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
27670 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
27680 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65  sqlite3WhereOrde
27690 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65  redInnerLoop(Whe
276a0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
276b0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
276c0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
276d0 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
276e0 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
276f0 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
27700 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
27710 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
27720 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27730 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
27740 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
27750 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
27760 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20  OFF      0      
27770 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50    /* Use of ONEP
27780 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  ASS not allowed 
27790 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
277a0 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20  SS_SINGLE   1   
277b0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
277c0 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67  valid for a sing
277d0 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f  le row update */
277e0 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
277f0 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20  _MULTI    2     
27800 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73     /* ONEPASS is
27810 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69   valid for multi
27820 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64  ple rows */.void
27830 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27840 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
27850 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
27860 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
27870 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
27880 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
27890 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
278a0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
278b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
278c0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f  rCodeGetColumnTo
278d0 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  Reg(Parse*, Tabl
278e0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
278f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27900 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
27910 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
27920 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
27930 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27940 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
27950 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
27960 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27970 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
27980 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
27990 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
279a0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
279b0 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
279c0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
279d0 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b  achePop(Parse*);
279e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
279f0 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
27a00 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
27a10 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27a20 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
27a30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27a40 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
27a50 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
27a60 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27a70 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
27a80 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
27a90 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27aa0 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61  3ExprCodeCopy(Pa
27ab0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
27ac0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27ad0 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
27ae0 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
27af0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
27b00 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74  e3ExprCodeAtInit
27b10 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
27b20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
27b30 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
27b40 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
27b50 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
27b60 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
27b70 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
27b80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27b90 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28  xprCodeAndCache(
27ba0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
27bb0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
27bc0 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
27bd0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
27be0 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  t*, int, int, u8
27bf0 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
27c00 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20  E_ECEL_DUP      
27c10 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e  0x01  /* Deep, n
27c20 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65  ot shallow copie
27c30 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
27c40 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20  ITE_ECEL_FACTOR 
27c50 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f    0x02  /* Facto
27c60 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74  r out constant t
27c70 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
27c80 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20  SQLITE_ECEL_REF 
27c90 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73       0x04  /* Us
27ca0 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  e ExprList.u.x.i
27cb0 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64  OrderByCol */.#d
27cc0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
27cd0 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20  L_OMITREF  0x08 
27ce0 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72   /* Omit if Expr
27cf0 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
27d00 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  yCol */.void sql
27d10 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
27d20 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
27d30 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27d40 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
27d50 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
27d60 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
27d70 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
27d80 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78  seDup(Parse*, Ex
27d90 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
27da0 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
27db0 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
27dc0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
27dd0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
27de0 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20  ine LOCATE_VIEW 
27df0 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20     0x01.#define 
27e00 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30  LOCATE_NOERR   0
27e10 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  x02.Table *sqlit
27e20 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
27e30 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63  rse*,u32 flags,c
27e40 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
27e50 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
27e60 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
27e70 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75  bleItem(Parse*,u
27e80 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20  32 flags,struct 
27e90 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
27ea0 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46  .Index *sqlite3F
27eb0 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33  indIndex(sqlite3
27ec0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
27ed0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
27ee0 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
27ef0 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  ndDeleteTable(sq
27f00 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
27f10 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
27f20 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
27f30 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65  leteIndex(sqlite
27f40 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
27f50 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
27f60 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54  3Vacuum(Parse*,T
27f70 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
27f80 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
27f90 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69  r**, sqlite3*, i
27fa0 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
27fb0 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
27fc0 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
27fd0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
27fe0 70 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c  prCompare(Expr*,
27ff0 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
28000 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d  t sqlite3ExprCom
28010 70 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20  pareSkip(Expr*, 
28020 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
28030 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
28040 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74  Compare(ExprList
28050 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
28060 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
28070 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45  xprImpliesExpr(E
28080 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
28090 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
280a0 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67  xprAnalyzeAggreg
280b0 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ates(NameContext
280c0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
280d0 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
280e0 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f  zeAggList(NameCo
280f0 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a  ntext*,ExprList*
28100 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28110 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78  prCoveredByIndex
28120 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72  (Expr*, int iCur
28130 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a  , Index *pIdx);.
28140 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
28150 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
28160 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
28170 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
28180 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23  tVdbe(Parse*);.#
28190 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e  ifndef SQLITE_UN
281a0 54 45 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71  TESTABLE.void sq
281b0 6c 69 74 65 33 50 72 6e 67 53 61 76 65 53 74 61  lite3PrngSaveSta
281c0 74 65 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73  te(void);.void s
281d0 71 6c 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72  qlite3PrngRestor
281e0 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65  eState(void);.#e
281f0 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
28200 33 52 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c  3RollbackAll(sql
28210 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ite3*,int);.void
28220 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
28230 66 79 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  fySchema(Parse*,
28240 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
28250 74 65 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d  te3CodeVerifyNam
28260 65 64 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c  edSchema(Parse*,
28270 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
28280 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
28290 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
282a0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
282b0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
282c0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
282d0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
282e0 33 52 6f 6c 6c 62 61 63 6b 54 72 61 6e 73 61 63  3RollbackTransac
282f0 74 69 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f  tion(Parse*);.vo
28300 69 64 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f  id sqlite3Savepo
28310 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
28320 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
28330 71 6c 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70  qlite3CloseSavep
28340 6f 69 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29  oints(sqlite3 *)
28350 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65  ;.void sqlite3Le
28360 61 76 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65  aveMutexAndClose
28370 5a 6f 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29  Zombie(sqlite3*)
28380 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
28390 72 49 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  rIsConstant(Expr
283a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
283b0 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74  xprIsConstantNot
283c0 4a 6f 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74  Join(Expr*);.int
283d0 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f   sqlite3ExprIsCo
283e0 6e 73 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e  nstantOrFunction
283f0 28 45 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74  (Expr*, u8);.int
28400 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 54 61   sqlite3ExprIsTa
28410 62 6c 65 43 6f 6e 73 74 61 6e 74 28 45 78 70 72  bleConstant(Expr
28420 2a 2c 69 6e 74 29 3b 0a 23 69 66 64 65 66 20 53  *,int);.#ifdef S
28430 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 55 52  QLITE_ENABLE_CUR
28440 53 4f 52 5f 48 49 4e 54 53 0a 69 6e 74 20 73 71  SOR_HINTS.int sq
28450 6c 69 74 65 33 45 78 70 72 43 6f 6e 74 61 69 6e  lite3ExprContain
28460 73 53 75 62 71 75 65 72 79 28 45 78 70 72 2a 29  sSubquery(Expr*)
28470 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c  ;.#endif.int sql
28480 69 74 65 33 45 78 70 72 49 73 49 6e 74 65 67 65  ite3ExprIsIntege
28490 72 28 45 78 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a  r(Expr*, int*);.
284a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
284b0 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e 73 74 20 45  anBeNull(const E
284c0 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
284d0 65 33 45 78 70 72 4e 65 65 64 73 4e 6f 41 66 66  e3ExprNeedsNoAff
284e0 69 6e 69 74 79 43 68 61 6e 67 65 28 63 6f 6e 73  inityChange(cons
284f0 74 20 45 78 70 72 2a 2c 20 63 68 61 72 29 3b 0a  t Expr*, char);.
28500 69 6e 74 20 73 71 6c 69 74 65 33 49 73 52 6f 77  int sqlite3IsRow
28510 69 64 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  id(const char*);
28520 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
28530 65 72 61 74 65 52 6f 77 44 65 6c 65 74 65 28 0a  erateRowDelete(.
28540 20 20 20 20 50 61 72 73 65 2a 2c 54 61 62 6c 65      Parse*,Table
28550 2a 2c 54 72 69 67 67 65 72 2a 2c 69 6e 74 2c 69  *,Trigger*,int,i
28560 6e 74 2c 69 6e 74 2c 69 31 36 2c 75 38 2c 75 38  nt,int,i16,u8,u8
28570 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  ,u8,int);.void s
28580 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f  qlite3GenerateRo
28590 77 49 6e 64 65 78 44 65 6c 65 74 65 28 50 61 72  wIndexDelete(Par
285a0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
285b0 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74  , int, int*, int
285c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47 65  );.int sqlite3Ge
285d0 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 50  nerateIndexKey(P
285e0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20 69  arse*, Index*, i
285f0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  nt, int, int, in
28600 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a  t*,Index*,int);.
28610 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
28620 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65 6c 28  lvePartIdxLabel(
28630 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69  Parse*,int);.voi
28640 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
28650 65 43 6f 6e 73 74 72 61 69 6e 74 43 68 65 63 6b  eConstraintCheck
28660 73 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c  s(Parse*,Table*,
28670 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
28680 2c 69 6e 74 2c 0a 20 20 20 20 20 20 20 20 20 20  ,int,.          
28690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
286a0 20 20 20 20 20 20 20 20 20 20 20 75 38 2c 75 38             u8,u8
286b0 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
286c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
286d0 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a  NABLE_NULL_TRIM.
286e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65    void sqlite3Se
286f0 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 56 64  tMakeRecordP5(Vd
28700 62 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23 65 6c  be*,Table*);.#el
28710 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
28720 74 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64  te3SetMakeRecord
28730 50 35 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  P5(A,B).#endif.v
28740 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 70 6c  oid sqlite3Compl
28750 65 74 65 49 6e 73 65 72 74 69 6f 6e 28 50 61 72  eteInsertion(Par
28760 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2c 69  se*,Table*,int,i
28770 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c  nt,int,int*,int,
28780 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e 74 20 73 71  int,int);.int sq
28790 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
287a0 64 49 6e 64 69 63 65 73 28 50 61 72 73 65 2a 2c  dIndices(Parse*,
287b0 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38   Table*, int, u8
287c0 2c 20 69 6e 74 2c 20 75 38 2a 2c 20 69 6e 74 2a  , int, u8*, int*
287d0 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71  , int*);.void sq
287e0 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65 4f  lite3BeginWriteO
287f0 70 65 72 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c  peration(Parse*,
28800 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28810 20 73 71 6c 69 74 65 33 4d 75 6c 74 69 57 72 69   sqlite3MultiWri
28820 74 65 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  te(Parse*);.void
28830 20 73 71 6c 69 74 65 33 4d 61 79 41 62 6f 72 74   sqlite3MayAbort
28840 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73  (Parse*);.void s
28850 71 6c 69 74 65 33 48 61 6c 74 43 6f 6e 73 74 72  qlite3HaltConstr
28860 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74  aint(Parse*, int
28870 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2c 20 69 38  , int, char*, i8
28880 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69  , u8);.void sqli
28890 74 65 33 55 6e 69 71 75 65 43 6f 6e 73 74 72 61  te3UniqueConstra
288a0 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  int(Parse*, int,
288b0 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73   Index*);.void s
288c0 71 6c 69 74 65 33 52 6f 77 69 64 43 6f 6e 73 74  qlite3RowidConst
288d0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 69 6e  raint(Parse*, in
288e0 74 2c 20 54 61 62 6c 65 2a 29 3b 0a 45 78 70 72  t, Table*);.Expr
288f0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 44 75 70   *sqlite3ExprDup
28900 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
28910 69 6e 74 29 3b 0a 45 78 70 72 4c 69 73 74 20 2a  int);.ExprList *
28920 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 44  sqlite3ExprListD
28930 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72  up(sqlite3*,Expr
28940 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c  List*,int);.SrcL
28950 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
28960 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
28970 53 72 63 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 49  SrcList*,int);.I
28980 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 49 64  dList *sqlite3Id
28990 4c 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a  ListDup(sqlite3*
289a0 2c 49 64 4c 69 73 74 2a 29 3b 0a 53 65 6c 65 63  ,IdList*);.Selec
289b0 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
289c0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  Dup(sqlite3*,Sel
289d0 65 63 74 2a 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ect*,int);.#if S
289e0 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
289f0 45 44 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  ED.void sqlite3S
28a00 65 6c 65 63 74 53 65 74 4e 61 6d 65 28 53 65 6c  electSetName(Sel
28a10 65 63 74 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ect*,const char*
28a20 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
28a30 65 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53  e sqlite3SelectS
28a40 65 74 4e 61 6d 65 28 41 2c 42 29 0a 23 65 6e 64  etName(A,B).#end
28a50 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49  if.void sqlite3I
28a60 6e 73 65 72 74 42 75 69 6c 74 69 6e 46 75 6e 63  nsertBuiltinFunc
28a70 73 28 46 75 6e 63 44 65 66 2a 2c 69 6e 74 29 3b  s(FuncDef*,int);
28a80 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c 69 74 65  .FuncDef *sqlite
28a90 33 46 69 6e 64 46 75 6e 63 74 69 6f 6e 28 73 71  3FindFunction(sq
28aa0 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61  lite3*,const cha
28ab0 72 2a 2c 69 6e 74 2c 75 38 2c 75 38 29 3b 0a 76  r*,int,u8,u8);.v
28ac0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
28ad0 74 65 72 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  terBuiltinFuncti
28ae0 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20  ons(void);.void 
28af0 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 44  sqlite3RegisterD
28b00 61 74 65 54 69 6d 65 46 75 6e 63 74 69 6f 6e 73  ateTimeFunctions
28b10 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
28b20 69 74 65 33 52 65 67 69 73 74 65 72 50 65 72 43  ite3RegisterPerC
28b30 6f 6e 6e 65 63 74 69 6f 6e 42 75 69 6c 74 69 6e  onnectionBuiltin
28b40 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
28b50 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
28b60 53 61 66 65 74 79 43 68 65 63 6b 4f 6b 28 73 71  SafetyCheckOk(sq
28b70 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
28b80 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 53  ite3SafetyCheckS
28b90 69 63 6b 4f 72 4f 6b 28 73 71 6c 69 74 65 33 2a  ickOrOk(sqlite3*
28ba0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
28bb0 68 61 6e 67 65 43 6f 6f 6b 69 65 28 50 61 72 73  hangeCookie(Pars
28bc0 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23 69 66 20 21  e*, int);..#if !
28bd0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
28be0 4d 49 54 5f 56 49 45 57 29 20 26 26 20 21 64 65  MIT_VIEW) && !de
28bf0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
28c00 54 5f 54 52 49 47 47 45 52 29 0a 76 6f 69 64 20  T_TRIGGER).void 
28c10 73 71 6c 69 74 65 33 4d 61 74 65 72 69 61 6c 69  sqlite3Materiali
28c20 7a 65 56 69 65 77 28 50 61 72 73 65 2a 2c 20 54  zeView(Parse*, T
28c30 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  able*, Expr*, in
28c40 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  t);.#endif..#ifn
28c50 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
28c60 54 52 49 47 47 45 52 0a 20 20 76 6f 69 64 20 73  TRIGGER.  void s
28c70 71 6c 69 74 65 33 42 65 67 69 6e 54 72 69 67 67  qlite3BeginTrigg
28c80 65 72 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e  er(Parse*, Token
28c90 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
28ca0 2c 49 64 4c 69 73 74 2a 2c 53 72 63 4c 69 73 74  ,IdList*,SrcList
28cb0 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
28cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
28cd0 70 72 2a 2c 69 6e 74 2c 20 69 6e 74 29 3b 0a 20  pr*,int, int);. 
28ce0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69 6e   void sqlite3Fin
28cf0 69 73 68 54 72 69 67 67 65 72 28 50 61 72 73 65  ishTrigger(Parse
28d00 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a 2c  *, TriggerStep*,
28d10 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20 76 6f 69 64   Token*);.  void
28d20 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67   sqlite3DropTrig
28d30 67 65 72 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ger(Parse*, SrcL
28d40 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  ist*, int);.  vo
28d50 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72  id sqlite3DropTr
28d60 69 67 67 65 72 50 74 72 28 50 61 72 73 65 2a 2c  iggerPtr(Parse*,
28d70 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 54 72   Trigger*);.  Tr
28d80 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72  igger *sqlite3Tr
28d90 69 67 67 65 72 73 45 78 69 73 74 28 50 61 72 73  iggersExist(Pars
28da0 65 20 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  e *, Table*, int
28db0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
28dc0 20 2a 70 4d 61 73 6b 29 3b 0a 20 20 54 72 69 67   *pMask);.  Trig
28dd0 67 65 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67  ger *sqlite3Trig
28de0 67 65 72 4c 69 73 74 28 50 61 72 73 65 20 2a 2c  gerList(Parse *,
28df0 20 54 61 62 6c 65 20 2a 29 3b 0a 20 20 76 6f 69   Table *);.  voi
28e00 64 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77  d sqlite3CodeRow
28e10 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
28e20 54 72 69 67 67 65 72 20 2a 2c 20 69 6e 74 2c 20  Trigger *, int, 
28e30 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
28e40 54 61 62 6c 65 20 2a 2c 0a 20 20 20 20 20 20 20  Table *,.       
28e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e60 20 20 20 20 20 69 6e 74 2c 20 69 6e 74 2c 20 69       int, int, i
28e70 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
28e80 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
28e90 72 44 69 72 65 63 74 28 50 61 72 73 65 20 2a 2c  rDirect(Parse *,
28ea0 20 54 72 69 67 67 65 72 20 2a 2c 20 54 61 62 6c   Trigger *, Tabl
28eb0 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  e *, int, int, i
28ec0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
28ed0 74 65 56 69 65 77 54 72 69 67 67 65 72 73 28 50  teViewTriggers(P
28ee0 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
28ef0 78 70 72 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  xpr*, int, ExprL
28f00 69 73 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ist*);.  void sq
28f10 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67  lite3DeleteTrigg
28f20 65 72 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  erStep(sqlite3*,
28f30 20 54 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a   TriggerStep*);.
28f40 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73    TriggerStep *s
28f50 71 6c 69 74 65 33 54 72 69 67 67 65 72 53 65 6c  qlite3TriggerSel
28f60 65 63 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a  ectStep(sqlite3*
28f70 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 54 72 69  ,Select*);.  Tri
28f80 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
28f90 33 54 72 69 67 67 65 72 49 6e 73 65 72 74 53 74  3TriggerInsertSt
28fa0 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
28fb0 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c 0a 20 20 20  n*, IdList*,.   
28fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28fe0 20 20 20 20 20 53 65 6c 65 63 74 2a 2c 75 38 29       Select*,u8)
28ff0 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  ;.  TriggerStep 
29000 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 55  *sqlite3TriggerU
29010 70 64 61 74 65 53 74 65 70 28 73 71 6c 69 74 65  pdateStep(sqlite
29020 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69  3*,Token*,ExprLi
29030 73 74 2a 2c 20 45 78 70 72 2a 2c 20 75 38 29 3b  st*, Expr*, u8);
29040 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20 2a  .  TriggerStep *
29050 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 44 65  sqlite3TriggerDe
29060 6c 65 74 65 53 74 65 70 28 73 71 6c 69 74 65 33  leteStep(sqlite3
29070 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 2a 29  *,Token*, Expr*)
29080 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29090 44 65 6c 65 74 65 54 72 69 67 67 65 72 28 73 71  DeleteTrigger(sq
290a0 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65 72 2a  lite3*, Trigger*
290b0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
290c0 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
290d0 54 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a  Trigger(sqlite3*
290e0 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
290f0 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
29100 54 72 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 50  TriggerColmask(P
29110 61 72 73 65 2a 2c 54 72 69 67 67 65 72 2a 2c 45  arse*,Trigger*,E
29120 78 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 69 6e 74  xprList*,int,int
29130 2c 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20  ,Table*,int);.# 
29140 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 50 61  define sqlite3Pa
29150 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29 20 28  rseToplevel(p) (
29160 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3f  (p)->pToplevel ?
29170 20 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 20   (p)->pToplevel 
29180 3a 20 28 70 29 29 0a 23 20 64 65 66 69 6e 65 20  : (p)).# define 
29190 73 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65  sqlite3IsTopleve
291a0 6c 28 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c  l(p) ((p)->pTopl
291b0 65 76 65 6c 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  evel==0).#else.#
291c0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
291d0 72 69 67 67 65 72 73 45 78 69 73 74 28 42 2c 43  riggersExist(B,C
291e0 2c 44 2c 45 2c 46 29 20 30 0a 23 20 64 65 66 69  ,D,E,F) 0.# defi
291f0 6e 65 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  ne sqlite3Delete
29200 54 72 69 67 67 65 72 28 41 2c 42 29 0a 23 20 64  Trigger(A,B).# d
29210 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 72 6f  efine sqlite3Dro
29220 70 54 72 69 67 67 65 72 50 74 72 28 41 2c 42 29  pTriggerPtr(A,B)
29230 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
29240 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
29250 54 72 69 67 67 65 72 28 41 2c 42 2c 43 29 0a 23  Trigger(A,B,C).#
29260 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
29270 6f 64 65 52 6f 77 54 72 69 67 67 65 72 28 41 2c  odeRowTrigger(A,
29280 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c 48 2c 49 29  B,C,D,E,F,G,H,I)
29290 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
292a0 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44  3CodeRowTriggerD
292b0 69 72 65 63 74 28 41 2c 42 2c 43 2c 44 2c 45 2c  irect(A,B,C,D,E,
292c0 46 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  F).# define sqli
292d0 74 65 33 54 72 69 67 67 65 72 4c 69 73 74 28 58  te3TriggerList(X
292e0 2c 20 59 29 20 30 0a 23 20 64 65 66 69 6e 65 20  , Y) 0.# define 
292f0 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
29300 65 76 65 6c 28 70 29 20 70 0a 23 20 64 65 66 69  evel(p) p.# defi
29310 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70 6c  ne sqlite3IsTopl
29320 65 76 65 6c 28 70 29 20 31 0a 23 20 64 65 66 69  evel(p) 1.# defi
29330 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67 65  ne sqlite3Trigge
29340 72 43 6f 6c 6d 61 73 6b 28 41 2c 42 2c 43 2c 44  rColmask(A,B,C,D
29350 2c 45 2c 46 2c 47 29 20 30 0a 23 65 6e 64 69 66  ,E,F,G) 0.#endif
29360 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 69  ..int sqlite3Joi
29370 6e 54 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f  nType(Parse*, To
29380 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ken*, Token*, To
29390 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
293a0 74 65 33 43 72 65 61 74 65 46 6f 72 65 69 67 6e  te3CreateForeign
293b0 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
293c0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45  List*, Token*, E
293d0 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  xprList*, int);.
293e0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66 65  void sqlite3Defe
293f0 72 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72 73  rForeignKey(Pars
29400 65 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 6e 64 65  e*, int);.#ifnde
29410 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
29420 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 76 6f  THORIZATION.  vo
29430 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 52 65  id sqlite3AuthRe
29440 61 64 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c  ad(Parse*,Expr*,
29450 53 63 68 65 6d 61 2a 2c 53 72 63 4c 69 73 74 2a  Schema*,SrcList*
29460 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
29470 41 75 74 68 43 68 65 63 6b 28 50 61 72 73 65 2a  AuthCheck(Parse*
29480 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72  ,int, const char
29490 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  *, const char*, 
294a0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20  const char*);.  
294b0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74 68  void sqlite3Auth
294c0 43 6f 6e 74 65 78 74 50 75 73 68 28 50 61 72 73  ContextPush(Pars
294d0 65 2a 2c 20 41 75 74 68 43 6f 6e 74 65 78 74 2a  e*, AuthContext*
294e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
294f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
29500 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 41 75 74  thContextPop(Aut
29510 68 43 6f 6e 74 65 78 74 2a 29 3b 0a 20 20 69 6e  hContext*);.  in
29520 74 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  t sqlite3AuthRea
29530 64 43 6f 6c 28 50 61 72 73 65 2a 2c 20 63 6f 6e  dCol(Parse*, con
29540 73 74 20 63 68 61 72 20 2a 2c 20 63 6f 6e 73 74  st char *, const
29550 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 23   char *, int);.#
29560 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
29570 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 61 2c  lite3AuthRead(a,
29580 62 2c 63 2c 64 29 0a 23 20 64 65 66 69 6e 65 20  b,c,d).# define 
29590 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63 6b  sqlite3AuthCheck
295a0 28 61 2c 62 2c 63 2c 64 2c 65 29 20 20 20 20 53  (a,b,c,d,e)    S
295b0 51 4c 49 54 45 5f 4f 4b 0a 23 20 64 65 66 69 6e  QLITE_OK.# defin
295c0 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
295d0 74 65 78 74 50 75 73 68 28 61 2c 62 2c 63 29 0a  textPush(a,b,c).
295e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
295f0 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70 28 61  AuthContextPop(a
29600 29 20 20 28 28 76 6f 69 64 29 28 61 29 29 0a 23  )  ((void)(a)).#
29610 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
29620 65 33 41 74 74 61 63 68 28 50 61 72 73 65 2a 2c  e3Attach(Parse*,
29630 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 45   Expr*, Expr*, E
29640 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  xpr*);.void sqli
29650 74 65 33 44 65 74 61 63 68 28 50 61 72 73 65 2a  te3Detach(Parse*
29660 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
29670 71 6c 69 74 65 33 46 69 78 49 6e 69 74 28 44 62  qlite3FixInit(Db
29680 46 69 78 65 72 2a 2c 20 50 61 72 73 65 2a 2c 20  Fixer*, Parse*, 
29690 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  int, const char*
296a0 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b  , const Token*);
296b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53  .int sqlite3FixS
296c0 72 63 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c  rcList(DbFixer*,
296d0 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e 74 20   SrcList*);.int 
296e0 73 71 6c 69 74 65 33 46 69 78 53 65 6c 65 63 74  sqlite3FixSelect
296f0 28 44 62 46 69 78 65 72 2a 2c 20 53 65 6c 65 63  (DbFixer*, Selec
29700 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
29710 46 69 78 45 78 70 72 28 44 62 46 69 78 65 72 2a  FixExpr(DbFixer*
29720 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  , Expr*);.int sq
29730 6c 69 74 65 33 46 69 78 45 78 70 72 4c 69 73 74  lite3FixExprList
29740 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 4c  (DbFixer*, ExprL
29750 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
29760 65 33 46 69 78 54 72 69 67 67 65 72 53 74 65 70  e3FixTriggerStep
29770 28 44 62 46 69 78 65 72 2a 2c 20 54 72 69 67 67  (DbFixer*, Trigg
29780 65 72 53 74 65 70 2a 29 3b 0a 69 6e 74 20 73 71  erStep*);.int sq
29790 6c 69 74 65 33 41 74 6f 46 28 63 6f 6e 73 74 20  lite3AtoF(const 
297a0 63 68 61 72 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a  char *z, double*
297b0 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20  , int, u8);.int 
297c0 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
297d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e  const char *, in
297e0 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
297f0 41 74 6f 69 28 63 6f 6e 73 74 20 63 68 61 72 2a  Atoi(const char*
29800 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
29810 66 31 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74  f16ByteLen(const
29820 20 76 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e   void *pData, in
29830 74 20 6e 43 68 61 72 29 3b 0a 69 6e 74 20 73 71  t nChar);.int sq
29840 6c 69 74 65 33 55 74 66 38 43 68 61 72 4c 65 6e  lite3Utf8CharLen
29850 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 70 44 61  (const char *pDa
29860 74 61 2c 20 69 6e 74 20 6e 42 79 74 65 29 3b 0a  ta, int nByte);.
29870 75 33 32 20 73 71 6c 69 74 65 33 55 74 66 38 52  u32 sqlite3Utf8R
29880 65 61 64 28 63 6f 6e 73 74 20 75 38 2a 2a 29 3b  ead(const u8**);
29890 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
298a0 6f 67 45 73 74 28 75 36 34 29 3b 0a 4c 6f 67 45  ogEst(u64);.LogE
298b0 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  st sqlite3LogEst
298c0 41 64 64 28 4c 6f 67 45 73 74 2c 4c 6f 67 45 73  Add(LogEst,LogEs
298d0 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  t);.#ifndef SQLI
298e0 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
298f0 41 42 4c 45 0a 4c 6f 67 45 73 74 20 73 71 6c 69  ABLE.LogEst sqli
29900 74 65 33 4c 6f 67 45 73 74 46 72 6f 6d 44 6f 75  te3LogEstFromDou
29910 62 6c 65 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6e  ble(double);.#en
29920 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
29930 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
29940 4d 54 5f 53 43 41 4e 53 54 41 54 55 53 29 20 7c  MT_SCANSTATUS) |
29950 7c 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28  | \.    defined(
29960 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
29970 41 54 33 5f 4f 52 5f 53 54 41 54 34 29 20 7c 7c  AT3_OR_STAT4) ||
29980 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 53   \.    defined(S
29990 51 4c 49 54 45 5f 45 58 50 4c 41 49 4e 5f 45 53  QLITE_EXPLAIN_ES
299a0 54 49 4d 41 54 45 44 5f 52 4f 57 53 29 0a 75 36  TIMATED_ROWS).u6
299b0 34 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54  4 sqlite3LogEstT
299c0 6f 49 6e 74 28 4c 6f 67 45 73 74 29 3b 0a 23 65  oInt(LogEst);.#e
299d0 6e 64 69 66 0a 56 4c 69 73 74 20 2a 73 71 6c 69  ndif.VList *sqli
299e0 74 65 33 56 4c 69 73 74 41 64 64 28 73 71 6c 69  te3VListAdd(sqli
299f0 74 65 33 2a 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73  te3*,VList*,cons
29a00 74 20 63 68 61 72 2a 2c 69 6e 74 2c 69 6e 74 29  t char*,int,int)
29a10 3b 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71  ;.const char *sq
29a20 6c 69 74 65 33 56 4c 69 73 74 4e 75 6d 54 6f 4e  lite3VListNumToN
29a30 61 6d 65 28 56 4c 69 73 74 2a 2c 69 6e 74 29 3b  ame(VList*,int);
29a40 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 4c 69 73  .int sqlite3VLis
29a50 74 4e 61 6d 65 54 6f 4e 75 6d 28 56 4c 69 73 74  tNameToNum(VList
29a60 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e  *,const char*,in
29a70 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69  t);../*.** Routi
29a80 6e 65 73 20 74 6f 20 72 65 61 64 20 61 6e 64 20  nes to read and 
29a90 77 72 69 74 65 20 76 61 72 69 61 62 6c 65 2d 6c  write variable-l
29aa0 65 6e 67 74 68 20 69 6e 74 65 67 65 72 73 2e 20  ength integers. 
29ab0 20 54 68 65 73 65 20 75 73 65 64 20 74 6f 0a 2a   These used to.*
29ac0 2a 20 62 65 20 64 65 66 69 6e 65 64 20 6c 6f 63  * be defined loc
29ad0 61 6c 6c 79 2c 20 62 75 74 20 6e 6f 77 20 77 65  ally, but now we
29ae0 20 75 73 65 20 74 68 65 20 76 61 72 69 6e 74 20   use the varint 
29af0 72 6f 75 74 69 6e 65 73 20 69 6e 20 74 68 65 20  routines in the 
29b00 75 74 69 6c 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a  util.c.** file..
29b10 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 50 75  */.int sqlite3Pu
29b20 74 56 61 72 69 6e 74 28 75 6e 73 69 67 6e 65 64  tVarint(unsigned
29b30 20 63 68 61 72 2a 2c 20 75 36 34 29 3b 0a 75 38   char*, u64);.u8
29b40 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e   sqlite3GetVarin
29b50 74 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  t(const unsigned
29b60 20 63 68 61 72 20 2a 2c 20 75 36 34 20 2a 29 3b   char *, u64 *);
29b70 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74 56 61  .u8 sqlite3GetVa
29b80 72 69 6e 74 33 32 28 63 6f 6e 73 74 20 75 6e 73  rint32(const uns
29b90 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 33  igned char *, u3
29ba0 32 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  2 *);.int sqlite
29bb0 33 56 61 72 69 6e 74 4c 65 6e 28 75 36 34 20 76  3VarintLen(u64 v
29bc0 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f  );../*.** The co
29bd0 6d 6d 6f 6e 20 63 61 73 65 20 69 73 20 66 6f 72  mmon case is for
29be0 20 61 20 76 61 72 69 6e 74 20 74 6f 20 62 65 20   a varint to be 
29bf0 61 20 73 69 6e 67 6c 65 20 62 79 74 65 2e 20 20  a single byte.  
29c00 54 68 65 79 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a  They following.*
29c10 2a 20 6d 61 63 72 6f 73 20 68 61 6e 64 6c 65 20  * macros handle 
29c20 74 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20  the common case 
29c30 77 69 74 68 6f 75 74 20 61 20 70 72 6f 63 65 64  without a proced
29c40 75 72 65 20 63 61 6c 6c 2c 20 62 75 74 20 74 68  ure call, but th
29c50 65 6e 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20 70  en call.** the p
29c60 72 6f 63 65 64 75 72 65 20 66 6f 72 20 6c 61 72  rocedure for lar
29c70 67 65 72 20 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a  ger varints..*/.
29c80 23 64 65 66 69 6e 65 20 67 65 74 56 61 72 69 6e  #define getVarin
29c90 74 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75  t32(A,B)  \.  (u
29ca0 38 29 28 28 2a 28 41 29 3c 28 75 38 29 30 78 38  8)((*(A)<(u8)0x8
29cb0 30 29 3f 28 28 42 29 3d 28 75 33 32 29 2a 28 41  0)?((B)=(u32)*(A
29cc0 29 29 2c 31 3a 73 71 6c 69 74 65 33 47 65 74 56  )),1:sqlite3GetV
29cd0 61 72 69 6e 74 33 32 28 28 41 29 2c 28 75 33 32  arint32((A),(u32
29ce0 20 2a 29 26 28 42 29 29 29 0a 23 64 65 66 69 6e   *)&(B))).#defin
29cf0 65 20 70 75 74 56 61 72 69 6e 74 33 32 28 41 2c  e putVarint32(A,
29d00 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 28 75  B)  \.  (u8)(((u
29d10 33 32 29 28 42 29 3c 28 75 33 32 29 30 78 38 30  32)(B)<(u32)0x80
29d20 29 3f 28 2a 28 41 29 3d 28 75 6e 73 69 67 6e 65  )?(*(A)=(unsigne
29d30 64 20 63 68 61 72 29 28 42 29 29 2c 31 3a 5c 0a  d char)(B)),1:\.
29d40 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
29d50 6e 74 28 28 41 29 2c 28 42 29 29 29 0a 23 64 65  nt((A),(B))).#de
29d60 66 69 6e 65 20 67 65 74 56 61 72 69 6e 74 20 20  fine getVarint  
29d70 20 20 73 71 6c 69 74 65 33 47 65 74 56 61 72 69    sqlite3GetVari
29d80 6e 74 0a 23 64 65 66 69 6e 65 20 70 75 74 56 61  nt.#define putVa
29d90 72 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 50  rint    sqlite3P
29da0 75 74 56 61 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74  utVarint...const
29db0 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 49 6e   char *sqlite3In
29dc0 64 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 73  dexAffinityStr(s
29dd0 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 29  qlite3*, Index*)
29de0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 61  ;.void sqlite3Ta
29df0 62 6c 65 41 66 66 69 6e 69 74 79 28 56 64 62 65  bleAffinity(Vdbe
29e00 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  *, Table*, int);
29e10 0a 63 68 61 72 20 73 71 6c 69 74 65 33 43 6f 6d  .char sqlite3Com
29e20 70 61 72 65 41 66 66 69 6e 69 74 79 28 45 78 70  pareAffinity(Exp
29e30 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 61  r *pExpr, char a
29e40 66 66 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ff2);.int sqlite
29e50 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 4f 6b  3IndexAffinityOk
29e60 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63 68  (Expr *pExpr, ch
29e70 61 72 20 69 64 78 5f 61 66 66 69 6e 69 74 79 29  ar idx_affinity)
29e80 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33 54 61  ;.char sqlite3Ta
29e90 62 6c 65 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  bleColumnAffinit
29ea0 79 28 54 61 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63  y(Table*,int);.c
29eb0 68 61 72 20 73 71 6c 69 74 65 33 45 78 70 72 41  har sqlite3ExprA
29ec0 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45  ffinity(Expr *pE
29ed0 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
29ee0 33 41 74 6f 69 36 34 28 63 6f 6e 73 74 20 63 68  3Atoi64(const ch
29ef0 61 72 2a 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20  ar*, i64*, int, 
29f00 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
29f10 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 63 6f  DecOrHexToI64(co
29f20 6e 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 29  nst char*, i64*)
29f30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72  ;.void sqlite3Er
29f40 72 6f 72 57 69 74 68 4d 73 67 28 73 71 6c 69 74  rorWithMsg(sqlit
29f50 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
29f60 63 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64  char*,...);.void
29f70 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 73 71   sqlite3Error(sq
29f80 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69  lite3*,int);.voi
29f90 64 20 73 71 6c 69 74 65 33 53 79 73 74 65 6d 45  d sqlite3SystemE
29fa0 72 72 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e  rror(sqlite3*,in
29fb0 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  t);.void *sqlite
29fc0 33 48 65 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74  3HexToBlob(sqlit
29fd0 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  e3*, const char 
29fe0 2a 7a 2c 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73  *z, int n);.u8 s
29ff0 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74 28 69  qlite3HexToInt(i
2a000 6e 74 20 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74  nt h);.int sqlit
2a010 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 50 61  e3TwoPartName(Pa
2a020 72 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20  rse *, Token *, 
2a030 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a  Token *, Token *
2a040 2a 29 3b 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  *);..#if defined
2a050 28 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52  (SQLITE_NEED_ERR
2a060 5f 4e 41 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61  _NAME).const cha
2a070 72 20 2a 73 71 6c 69 74 65 33 45 72 72 4e 61 6d  r *sqlite3ErrNam
2a080 65 28 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  e(int);.#endif..
2a090 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2a0a0 74 65 33 45 72 72 53 74 72 28 69 6e 74 29 3b 0a  te3ErrStr(int);.
2a0b0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 61 64 53  int sqlite3ReadS
2a0c0 63 68 65 6d 61 28 50 61 72 73 65 20 2a 70 50 61  chema(Parse *pPa
2a0d0 72 73 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73  rse);.CollSeq *s
2a0e0 71 6c 69 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65  qlite3FindCollSe
2a0f0 71 28 73 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e  q(sqlite3*,u8 en
2a100 63 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  c, const char*,i
2a110 6e 74 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  nt);.CollSeq *sq
2a120 6c 69 74 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53  lite3LocateCollS
2a130 65 71 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  eq(Parse *pParse
2a140 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61  , const char*zNa
2a150 6d 65 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71  me);.CollSeq *sq
2a160 6c 69 74 65 33 45 78 70 72 43 6f 6c 6c 53 65 71  lite3ExprCollSeq
2a170 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
2a180 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78  Expr *pExpr);.Ex
2a190 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2a1a0 64 64 43 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50  ddCollateToken(P
2a1b0 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78  arse *pParse, Ex
2a1c0 70 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e  pr*, const Token
2a1d0 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
2a1e0 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f 6c  qlite3ExprAddCol
2a1f0 6c 61 74 65 53 74 72 69 6e 67 28 50 61 72 73 65  lateString(Parse
2a200 2a 2c 45 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68  *,Expr*,const ch
2a210 61 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  ar*);.Expr *sqli
2a220 74 65 33 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61  te3ExprSkipColla
2a230 74 65 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  te(Expr*);.int s
2a240 71 6c 69 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53  qlite3CheckCollS
2a250 65 71 28 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c  eq(Parse *, Coll
2a260 53 65 71 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Seq *);.int sqli
2a270 74 65 33 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61  te3CheckObjectNa
2a280 6d 65 28 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73  me(Parse *, cons
2a290 74 20 63 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20  t char *);.void 
2a2a0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 68  sqlite3VdbeSetCh
2a2b0 61 6e 67 65 73 28 73 71 6c 69 74 65 33 20 2a 2c  anges(sqlite3 *,
2a2c0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
2a2d0 65 33 41 64 64 49 6e 74 36 34 28 69 36 34 2a 2c  e3AddInt64(i64*,
2a2e0 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  i64);.int sqlite
2a2f0 33 53 75 62 49 6e 74 36 34 28 69 36 34 2a 2c 69  3SubInt64(i64*,i
2a300 36 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  64);.int sqlite3
2a310 4d 75 6c 49 6e 74 36 34 28 69 36 34 2a 2c 69 36  MulInt64(i64*,i6
2a320 34 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  4);.int sqlite3A
2a330 62 73 49 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69  bsInt32(int);.#i
2a340 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
2a350 4c 45 5f 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69  LE_8_3_NAMES.voi
2a360 64 20 73 71 6c 69 74 65 33 46 69 6c 65 53 75 66  d sqlite3FileSuf
2a370 66 69 78 33 28 63 6f 6e 73 74 20 63 68 61 72 2a  fix3(const char*
2a380 2c 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  , char*);.#else.
2a390 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2a3a0 46 69 6c 65 53 75 66 66 69 78 33 28 58 2c 59 29  FileSuffix3(X,Y)
2a3b0 0a 23 65 6e 64 69 66 0a 75 38 20 73 71 6c 69 74  .#endif.u8 sqlit
2a3c0 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
2a3d0 73 74 20 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a  st char *z,u8);.
2a3e0 0a 63 6f 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c  .const void *sql
2a3f0 69 74 65 33 56 61 6c 75 65 54 65 78 74 28 73 71  ite3ValueText(sq
2a400 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
2a410 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61  );.int sqlite3Va
2a420 6c 75 65 42 79 74 65 73 28 73 71 6c 69 74 65 33  lueBytes(sqlite3
2a430 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f  _value*, u8);.vo
2a440 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 53  id sqlite3ValueS
2a450 65 74 53 74 72 28 73 71 6c 69 74 65 33 5f 76 61  etStr(sqlite3_va
2a460 6c 75 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  lue*, int, const
2a470 20 76 6f 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20   void *,u8,.    
2a480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a490 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f 69 64      void(*)(void
2a4a0 2a 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  *));.void sqlite
2a4b0 33 56 61 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71  3ValueSetNull(sq
2a4c0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76  lite3_value*);.v
2a4d0 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65  oid sqlite3Value
2a4e0 46 72 65 65 28 73 71 6c 69 74 65 33 5f 76 61 6c  Free(sqlite3_val
2a4f0 75 65 2a 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61  ue*);.sqlite3_va
2a500 6c 75 65 20 2a 73 71 6c 69 74 65 33 56 61 6c 75  lue *sqlite3Valu
2a510 65 4e 65 77 28 73 71 6c 69 74 65 33 20 2a 29 3b  eNew(sqlite3 *);
2a520 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74  .char *sqlite3Ut
2a530 66 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a  f16to8(sqlite3 *
2a540 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69  , const void*, i
2a550 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c  nt, u8);.int sql
2a560 69 74 65 33 56 61 6c 75 65 46 72 6f 6d 45 78 70  ite3ValueFromExp
2a570 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 45 78 70  r(sqlite3 *, Exp
2a580 72 20 2a 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c  r *, u8, u8, sql
2a590 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a  ite3_value **);.
2a5a0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c 75  void sqlite3Valu
2a5b0 65 41 70 70 6c 79 41 66 66 69 6e 69 74 79 28 73  eApplyAffinity(s
2a5c0 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20  qlite3_value *, 
2a5d0 75 38 2c 20 75 38 29 3b 0a 23 69 66 6e 64 65 66  u8, u8);.#ifndef
2a5e0 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41   SQLITE_AMALGAMA
2a5f0 54 49 4f 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73  TION.extern cons
2a600 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2a610 73 71 6c 69 74 65 33 4f 70 63 6f 64 65 50 72 6f  sqlite3OpcodePro
2a620 70 65 72 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20  perty[];.extern 
2a630 63 6f 6e 73 74 20 63 68 61 72 20 73 71 6c 69 74  const char sqlit
2a640 65 33 53 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65  e3StrBINARY[];.e
2a650 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69  xtern const unsi
2a660 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65  gned char sqlite
2a670 33 55 70 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b  3UpperToLower[];
2a680 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2a690 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2a6a0 74 65 33 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65  te3CtypeMap[];.e
2a6b0 78 74 65 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65  xtern const Toke
2a6c0 6e 20 73 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65  n sqlite3IntToke
2a6d0 6e 73 5b 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c  ns[];.extern SQL
2a6e0 49 54 45 5f 57 53 44 20 73 74 72 75 63 74 20 53  ITE_WSD struct S
2a6f0 71 6c 69 74 65 33 43 6f 6e 66 69 67 20 73 71 6c  qlite3Config sql
2a700 69 74 65 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65  ite3Config;.exte
2a710 72 6e 20 46 75 6e 63 44 65 66 48 61 73 68 20 73  rn FuncDefHash s
2a720 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e  qlite3BuiltinFun
2a730 63 74 69 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20  ctions;.#ifndef 
2a740 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
2a750 65 78 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74  extern int sqlit
2a760 65 33 50 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23  e3PendingByte;.#
2a770 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69  endif.#endif.voi
2a780 64 20 73 71 6c 69 74 65 33 52 6f 6f 74 50 61 67  d sqlite3RootPag
2a790 65 4d 6f 76 65 64 28 73 71 6c 69 74 65 33 2a 2c  eMoved(sqlite3*,
2a7a0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
2a7b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 69  .void sqlite3Rei
2a7c0 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b  ndex(Parse*, Tok
2a7d0 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f  en*, Token*);.vo
2a7e0 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46  id sqlite3AlterF
2a7f0 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a  unctions(void);.
2a800 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2a810 72 52 65 6e 61 6d 65 54 61 62 6c 65 28 50 61 72  rRenameTable(Par
2a820 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
2a830 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2a840 74 65 33 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73  te3GetToken(cons
2a850 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2a860 2a 2c 20 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20  *, int *);.void 
2a870 73 71 6c 69 74 65 33 4e 65 73 74 65 64 50 61 72  sqlite3NestedPar
2a880 73 65 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74  se(Parse*, const
2a890 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f   char*, ...);.vo
2a8a0 69 64 20 73 71 6c 69 74 65 33 45 78 70 69 72 65  id sqlite3Expire
2a8b0 50 72 65 70 61 72 65 64 53 74 61 74 65 6d 65 6e  PreparedStatemen
2a8c0 74 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ts(sqlite3*);.in
2a8d0 74 20 73 71 6c 69 74 65 33 43 6f 64 65 53 75 62  t sqlite3CodeSub
2a8e0 73 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  select(Parse*, E
2a8f0 78 70 72 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  xpr *, int, int)
2a900 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2a910 6c 65 63 74 50 72 65 70 28 50 61 72 73 65 2a 2c  lectPrep(Parse*,
2a920 20 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f   Select*, NameCo
2a930 6e 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71  ntext*);.void sq
2a940 6c 69 74 65 33 53 65 6c 65 63 74 57 72 6f 6e 67  lite3SelectWrong
2a950 4e 75 6d 54 65 72 6d 73 45 72 72 6f 72 28 50 61  NumTermsError(Pa
2a960 72 73 65 20 2a 70 50 61 72 73 65 2c 20 53 65 6c  rse *pParse, Sel
2a970 65 63 74 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c  ect *p);.int sql
2a980 69 74 65 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d  ite3MatchSpanNam
2a990 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  e(const char*, c
2a9a0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
2a9b0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
2a9c0 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  har*);.int sqlit
2a9d0 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d  e3ResolveExprNam
2a9e0 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
2a9f0 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   Expr*);.int sql
2aa00 69 74 65 33 52 65 73 6f 6c 76 65 45 78 70 72 4c  ite3ResolveExprL
2aa10 69 73 74 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  istNames(NameCon
2aa20 74 65 78 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  text*, ExprList*
2aa30 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
2aa40 65 73 6f 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65  esolveSelectName
2aa50 73 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  s(Parse*, Select
2aa60 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29  *, NameContext*)
2aa70 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
2aa80 73 6f 6c 76 65 53 65 6c 66 52 65 66 65 72 65 6e  solveSelfReferen
2aa90 63 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  ce(Parse*,Table*
2aaa0 2c 69 6e 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c  ,int,Expr*,ExprL
2aab0 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  ist*);.int sqlit
2aac0 65 33 52 65 73 6f 6c 76 65 4f 72 64 65 72 47 72  e3ResolveOrderGr
2aad0 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 53 65  oupBy(Parse*, Se
2aae0 6c 65 63 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lect*, ExprList*
2aaf0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
2ab00 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75  void sqlite3Colu
2ab10 6d 6e 44 65 66 61 75 6c 74 28 56 64 62 65 20 2a  mnDefault(Vdbe *
2ab20 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20  , Table *, int, 
2ab30 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2ab40 65 33 41 6c 74 65 72 46 69 6e 69 73 68 41 64 64  e3AlterFinishAdd
2ab50 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
2ab60 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
2ab70 71 6c 69 74 65 33 41 6c 74 65 72 42 65 67 69 6e  qlite3AlterBegin
2ab80 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20  AddColumn(Parse 
2ab90 2a 2c 20 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43  *, SrcList *);.C
2aba0 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 47  ollSeq *sqlite3G
2abb0 65 74 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a  etCollSeq(Parse*
2abc0 2c 20 75 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c  , u8, CollSeq *,
2abd0 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63   const char*);.c
2abe0 68 61 72 20 73 71 6c 69 74 65 33 41 66 66 69 6e  har sqlite3Affin
2abf0 69 74 79 54 79 70 65 28 63 6f 6e 73 74 20 63 68  ityType(const ch
2ac00 61 72 2a 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20  ar*, u8*);.void 
2ac10 73 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 28 50  sqlite3Analyze(P
2ac20 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
2ac30 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
2ac40 74 65 33 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e  te3InvokeBusyHan
2ac50 64 6c 65 72 28 42 75 73 79 48 61 6e 64 6c 65 72  dler(BusyHandler
2ac60 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46  *);.int sqlite3F
2ac70 69 6e 64 44 62 28 73 71 6c 69 74 65 33 2a 2c 20  indDb(sqlite3*, 
2ac80 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2ac90 69 74 65 33 46 69 6e 64 44 62 4e 61 6d 65 28 73  ite3FindDbName(s
2aca0 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20  qlite3 *, const 
2acb0 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2acc0 69 74 65 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64  ite3AnalysisLoad
2acd0 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44  (sqlite3*,int iD
2ace0 42 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  B);.void sqlite3
2acf0 44 65 6c 65 74 65 49 6e 64 65 78 53 61 6d 70 6c  DeleteIndexSampl
2ad00 65 73 28 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65  es(sqlite3*,Inde
2ad10 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
2ad20 33 44 65 66 61 75 6c 74 52 6f 77 45 73 74 28 49  3DefaultRowEst(I
2ad30 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ndex*);.void sql
2ad40 69 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65  ite3RegisterLike
2ad50 46 75 6e 63 74 69 6f 6e 73 28 73 71 6c 69 74 65  Functions(sqlite
2ad60 33 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  3*, int);.int sq
2ad70 6c 69 74 65 33 49 73 4c 69 6b 65 46 75 6e 63 74  lite3IsLikeFunct
2ad80 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c 45 78 70  ion(sqlite3*,Exp
2ad90 72 2a 2c 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a  r*,int*,char*);.
2ada0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 68 65  void sqlite3Sche
2adb0 6d 61 43 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b  maClear(void *);
2adc0 0a 53 63 68 65 6d 61 20 2a 73 71 6c 69 74 65 33  .Schema *sqlite3
2add0 53 63 68 65 6d 61 47 65 74 28 73 71 6c 69 74 65  SchemaGet(sqlite
2ade0 33 20 2a 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69  3 *, Btree *);.i
2adf0 6e 74 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  nt sqlite3Schema
2ae00 54 6f 49 6e 64 65 78 28 73 71 6c 69 74 65 33 20  ToIndex(sqlite3 
2ae10 2a 64 62 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a  *db, Schema *);.
2ae20 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2ae30 4b 65 79 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c  KeyInfoAlloc(sql
2ae40 69 74 65 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  ite3*,int,int);.
2ae50 76 6f 69 64 20 73 71 6c 69 74 65 33 4b 65 79 49  void sqlite3KeyI
2ae60 6e 66 6f 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f  nfoUnref(KeyInfo
2ae70 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c  *);.KeyInfo *sql
2ae80 69 74 65 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b  ite3KeyInfoRef(K
2ae90 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2aea0 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2aeb0 6f 4f 66 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  oOfIndex(Parse*,
2aec0 20 49 6e 64 65 78 2a 29 3b 0a 23 69 66 64 65 66   Index*);.#ifdef
2aed0 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e   SQLITE_DEBUG.in
2aee0 74 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  t sqlite3KeyInfo
2aef0 49 73 57 72 69 74 65 61 62 6c 65 28 4b 65 79 49  IsWriteable(KeyI
2af00 6e 66 6f 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e  nfo*);.#endif.in
2af10 74 20 73 71 6c 69 74 65 33 43 72 65 61 74 65 46  t sqlite3CreateF
2af20 75 6e 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  unc(sqlite3 *, c
2af30 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
2af40 2c 20 69 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20  , int, void *,. 
2af50 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2af60 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2af70 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2af80 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28 73 71 6c  ,.  void (*)(sql
2af90 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e  ite3_context*,in
2afa0 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  t,sqlite3_value 
2afb0 2a 2a 29 2c 20 76 6f 69 64 20 28 2a 29 28 73 71  **), void (*)(sq
2afc0 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c  lite3_context*),
2afd0 0a 20 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f  .  FuncDestructo
2afe0 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 0a 29  r *pDestructor.)
2aff0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2b000 6d 46 61 75 6c 74 28 73 71 6c 69 74 65 33 2a 29  mFault(sqlite3*)
2b010 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f  ;.void sqlite3Oo
2b020 6d 43 6c 65 61 72 28 73 71 6c 69 74 65 33 2a 29  mClear(sqlite3*)
2b030 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 70 69  ;.int sqlite3Api
2b040 45 78 69 74 28 73 71 6c 69 74 65 33 20 2a 64 62  Exit(sqlite3 *db
2b050 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2b060 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
2b070 61 73 65 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76  ase(Parse *);..v
2b080 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2b090 63 75 6d 49 6e 69 74 28 53 74 72 41 63 63 75 6d  cumInit(StrAccum
2b0a0 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 68 61  *, sqlite3*, cha
2b0b0 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  r*, int, int);.v
2b0c0 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41 63  oid sqlite3StrAc
2b0d0 63 75 6d 41 70 70 65 6e 64 28 53 74 72 41 63 63  cumAppend(StrAcc
2b0e0 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  um*,const char*,
2b0f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b100 65 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64  e3StrAccumAppend
2b110 41 6c 6c 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f  All(StrAccum*,co
2b120 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2b130 20 73 71 6c 69 74 65 33 41 70 70 65 6e 64 43 68   sqlite3AppendCh
2b140 61 72 28 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74  ar(StrAccum*,int
2b150 2c 63 68 61 72 29 3b 0a 63 68 61 72 20 2a 73 71  ,char);.char *sq
2b160 6c 69 74 65 33 53 74 72 41 63 63 75 6d 46 69 6e  lite3StrAccumFin
2b170 69 73 68 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a  ish(StrAccum*);.
2b180 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 72 41  void sqlite3StrA
2b190 63 63 75 6d 52 65 73 65 74 28 53 74 72 41 63 63  ccumReset(StrAcc
2b1a0 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
2b1b0 65 33 53 65 6c 65 63 74 44 65 73 74 49 6e 69 74  e3SelectDestInit
2b1c0 28 53 65 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74  (SelectDest*,int
2b1d0 2c 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ,int);.Expr *sql
2b1e0 69 74 65 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e  ite3CreateColumn
2b1f0 45 78 70 72 28 73 71 6c 69 74 65 33 20 2a 2c 20  Expr(sqlite3 *, 
2b200 53 72 63 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20  SrcList *, int, 
2b210 69 6e 74 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69  int);..void sqli
2b220 74 65 33 42 61 63 6b 75 70 52 65 73 74 61 72 74  te3BackupRestart
2b230 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 20  (sqlite3_backup 
2b240 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b250 42 61 63 6b 75 70 55 70 64 61 74 65 28 73 71 6c  BackupUpdate(sql
2b260 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50  ite3_backup *, P
2b270 67 6e 6f 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29  gno, const u8 *)
2b280 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
2b290 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59 0a  E_OMIT_SUBQUERY.
2b2a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2b2b0 68 65 63 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45  heckIN(Parse*, E
2b2c0 78 70 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  xpr*);.#else.# d
2b2d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 78 70  efine sqlite3Exp
2b2e0 72 43 68 65 63 6b 49 4e 28 78 2c 79 29 20 53 51  rCheckIN(x,y) SQ
2b2f0 4c 49 54 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a  LITE_OK.#endif..
2b300 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
2b310 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
2b320 41 54 34 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  AT4.void sqlite3
2b330 41 6e 61 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73  AnalyzeFunctions
2b340 28 76 6f 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69  (void);.int sqli
2b350 74 65 33 53 74 61 74 34 50 72 6f 62 65 53 65 74  te3Stat4ProbeSet
2b360 56 61 6c 75 65 28 0a 20 20 20 20 50 61 72 73 65  Value(.    Parse
2b370 2a 2c 49 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65  *,Index*,Unpacke
2b380 64 52 65 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c  dRecord**,Expr*,
2b390 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69  int,int,int*);.i
2b3a0 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 56  nt sqlite3Stat4V
2b3b0 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 50 61 72  alueFromExpr(Par
2b3c0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20  se*, Expr*, u8, 
2b3d0 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2b3e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2b3f0 61 74 34 50 72 6f 62 65 46 72 65 65 28 55 6e 70  at4ProbeFree(Unp
2b400 61 63 6b 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69  ackedRecord*);.i
2b410 6e 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 43  nt sqlite3Stat4C
2b420 6f 6c 75 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20  olumn(sqlite3*, 
2b430 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74  const void*, int
2b440 2c 20 69 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76  , int, sqlite3_v
2b450 61 6c 75 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71  alue**);.char sq
2b460 6c 69 74 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e  lite3IndexColumn
2b470 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74 65 33  Affinity(sqlite3
2b480 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b  *, Index*, int);
2b490 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
2b4a0 68 65 20 69 6e 74 65 72 66 61 63 65 20 74 6f 20  he interface to 
2b4b0 74 68 65 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61  the LEMON-genera
2b4c0 74 65 64 20 70 61 72 73 65 72 0a 2a 2f 0a 23 69  ted parser.*/.#i
2b4d0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  fndef SQLITE_AMA
2b4e0 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 76 6f 69 64  LGAMATION.  void
2b4f0 20 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41   *sqlite3ParserA
2b500 6c 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36  lloc(void*(*)(u6
2b510 34 29 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  4));.  void sqli
2b520 74 65 33 50 61 72 73 65 72 46 72 65 65 28 76 6f  te3ParserFree(vo
2b530 69 64 2a 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69  id*, void(*)(voi
2b540 64 2a 29 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  d*));.#endif.voi
2b550 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 28  d sqlite3Parser(
2b560 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65  void*, int, Toke
2b570 6e 2c 20 50 61 72 73 65 2a 29 3b 0a 23 69 66 64  n, Parse*);.#ifd
2b580 65 66 20 59 59 54 52 41 43 4b 4d 41 58 53 54 41  ef YYTRACKMAXSTA
2b590 43 4b 44 45 50 54 48 0a 20 20 69 6e 74 20 73 71  CKDEPTH.  int sq
2b5a0 6c 69 74 65 33 50 61 72 73 65 72 53 74 61 63 6b  lite3ParserStack
2b5b0 50 65 61 6b 28 76 6f 69 64 2a 29 3b 0a 23 65 6e  Peak(void*);.#en
2b5c0 64 69 66 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  dif..void sqlite
2b5d0 33 41 75 74 6f 4c 6f 61 64 45 78 74 65 6e 73 69  3AutoLoadExtensi
2b5e0 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 23  ons(sqlite3*);.#
2b5f0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b600 49 54 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49 4f  IT_LOAD_EXTENSIO
2b610 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  N.  void sqlite3
2b620 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73 28  CloseExtensions(
2b630 73 71 6c 69 74 65 33 2a 29 3b 0a 23 65 6c 73 65  sqlite3*);.#else
2b640 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
2b650 33 43 6c 6f 73 65 45 78 74 65 6e 73 69 6f 6e 73  3CloseExtensions
2b660 28 58 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e  (X).#endif..#ifn
2b670 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
2b680 53 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 76  SHARED_CACHE.  v
2b690 6f 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65  oid sqlite3Table
2b6a0 4c 6f 63 6b 28 50 61 72 73 65 20 2a 2c 20 69 6e  Lock(Parse *, in
2b6b0 74 2c 20 69 6e 74 2c 20 75 38 2c 20 63 6f 6e 73  t, int, u8, cons
2b6c0 74 20 63 68 61 72 20 2a 29 3b 0a 23 65 6c 73 65  t char *);.#else
2b6d0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2b6e0 65 33 54 61 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c  e3TableLock(v,w,
2b6f0 78 2c 79 2c 7a 29 0a 23 65 6e 64 69 66 0a 0a 23  x,y,z).#endif..#
2b700 69 66 64 65 66 20 53 51 4c 49 54 45 5f 54 45 53  ifdef SQLITE_TES
2b710 54 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 55  T.  int sqlite3U
2b720 74 66 38 54 6f 38 28 75 6e 73 69 67 6e 65 64 20  tf8To8(unsigned 
2b730 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a  char*);.#endif..
2b740 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
2b750 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
2b760 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2b770 33 56 74 61 62 43 6c 65 61 72 28 59 29 0a 23 20  3VtabClear(Y).# 
2b780 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2b790 74 61 62 53 79 6e 63 28 58 2c 59 29 20 53 51 4c  tabSync(X,Y) SQL
2b7a0 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65  ITE_OK.#  define
2b7b0 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c 6c   sqlite3VtabRoll
2b7c0 62 61 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e  back(X).#  defin
2b7d0 65 20 73 71 6c 69 74 65 33 56 74 61 62 43 6f 6d  e sqlite3VtabCom
2b7e0 6d 69 74 28 58 29 0a 23 20 20 64 65 66 69 6e 65  mit(X).#  define
2b7f0 20 73 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79   sqlite3VtabInSy
2b800 6e 63 28 64 62 29 20 30 0a 23 20 20 64 65 66 69  nc(db) 0.#  defi
2b810 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  ne sqlite3VtabLo
2b820 63 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20  ck(X).#  define 
2b830 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2b840 6b 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73  k(X).#  define s
2b850 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2b860 4c 69 73 74 28 58 29 0a 23 20 20 64 65 66 69 6e  List(X).#  defin
2b870 65 20 73 71 6c 69 74 65 33 56 74 61 62 53 61 76  e sqlite3VtabSav
2b880 65 70 6f 69 6e 74 28 58 2c 20 59 2c 20 5a 29 20  epoint(X, Y, Z) 
2b890 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20 64 65 66  SQLITE_OK.#  def
2b8a0 69 6e 65 20 73 71 6c 69 74 65 33 47 65 74 56 54  ine sqlite3GetVT
2b8b0 61 62 6c 65 28 58 2c 59 29 20 20 28 28 56 54 61  able(X,Y)  ((VTa
2b8c0 62 6c 65 2a 29 30 29 0a 23 65 6c 73 65 0a 20 20  ble*)0).#else.  
2b8d0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2b8e0 62 43 6c 65 61 72 28 73 71 6c 69 74 65 33 20 2a  bClear(sqlite3 *
2b8f0 64 62 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 20  db, Table*);.   
2b900 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2b910 44 69 73 63 6f 6e 6e 65 63 74 28 73 71 6c 69 74  Disconnect(sqlit
2b920 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 20 2a 70  e3 *db, Table *p
2b930 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74 65  );.   int sqlite
2b940 33 56 74 61 62 53 79 6e 63 28 73 71 6c 69 74 65  3VtabSync(sqlite
2b950 33 20 2a 64 62 2c 20 56 64 62 65 2a 29 3b 0a 20  3 *db, Vdbe*);. 
2b960 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2b970 62 52 6f 6c 6c 62 61 63 6b 28 73 71 6c 69 74 65  bRollback(sqlite
2b980 33 20 2a 64 62 29 3b 0a 20 20 20 69 6e 74 20 73  3 *db);.   int s
2b990 71 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74  qlite3VtabCommit
2b9a0 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20  (sqlite3 *db);. 
2b9b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74    void sqlite3Vt
2b9c0 61 62 4c 6f 63 6b 28 56 54 61 62 6c 65 20 2a 29  abLock(VTable *)
2b9d0 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2b9e0 33 56 74 61 62 55 6e 6c 6f 63 6b 28 56 54 61 62  3VtabUnlock(VTab
2b9f0 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20 73  le *);.   void s
2ba00 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b  qlite3VtabUnlock
2ba10 4c 69 73 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a  List(sqlite3*);.
2ba20 20 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74     int sqlite3Vt
2ba30 61 62 53 61 76 65 70 6f 69 6e 74 28 73 71 6c 69  abSavepoint(sqli
2ba40 74 65 33 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  te3 *, int, int)
2ba50 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74 65  ;.   void sqlite
2ba60 33 56 74 61 62 49 6d 70 6f 72 74 45 72 72 6d 73  3VtabImportErrms
2ba70 67 28 56 64 62 65 2a 2c 20 73 71 6c 69 74 65 33  g(Vdbe*, sqlite3
2ba80 5f 76 74 61 62 2a 29 3b 0a 20 20 20 56 54 61 62  _vtab*);.   VTab
2ba90 6c 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56 54  le *sqlite3GetVT
2baa0 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20 54  able(sqlite3*, T
2bab0 61 62 6c 65 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c  able*);.   Modul
2bac0 65 20 2a 73 71 6c 69 74 65 33 56 74 61 62 43 72  e *sqlite3VtabCr
2bad0 65 61 74 65 4d 6f 64 75 6c 65 28 0a 20 20 20 20  eateModule(.    
2bae0 20 73 71 6c 69 74 65 33 2a 2c 0a 20 20 20 20 20   sqlite3*,.     
2baf0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20  const char*,.   
2bb00 20 20 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f    const sqlite3_
2bb10 6d 6f 64 75 6c 65 2a 2c 0a 20 20 20 20 20 76 6f  module*,.     vo
2bb20 69 64 2a 2c 0a 20 20 20 20 20 76 6f 69 64 28 2a  id*,.     void(*
2bb30 29 28 76 6f 69 64 2a 29 0a 20 20 20 29 3b 0a 23  )(void*).   );.#
2bb40 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2bb50 56 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28  VtabInSync(db) (
2bb60 28 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20  (db)->nVTrans>0 
2bb70 26 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73  && (db)->aVTrans
2bb80 3d 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20  ==0).#endif.int 
2bb90 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2bba0 6d 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61  mousTableInit(Pa
2bbb0 72 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76  rse*,Module*);.v
2bbc0 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45  oid sqlite3VtabE
2bbd0 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65  ponymousTableCle
2bbe0 61 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75  ar(sqlite3*,Modu
2bbf0 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  le*);.void sqlit
2bc00 65 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62  e3VtabMakeWritab
2bc10 6c 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a  le(Parse*,Table*
2bc20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2bc30 74 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61  tabBeginParse(Pa
2bc40 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  rse*, Token*, To
2bc50 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e  ken*, Token*, in
2bc60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
2bc70 56 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28  VtabFinishParse(
2bc80 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
2bc90 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2bca0 62 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29  bArgInit(Parse*)
2bcb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2bcc0 61 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73  abArgExtend(Pars
2bcd0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  e*, Token*);.int
2bce0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2bcf0 43 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c  Create(sqlite3*,
2bd00 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2bd10 20 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e   *, char **);.in
2bd20 74 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c  t sqlite3VtabCal
2bd30 6c 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c  lConnect(Parse*,
2bd40 20 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71   Table*);.int sq
2bd50 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73  lite3VtabCallDes
2bd60 74 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69  troy(sqlite3*, i
2bd70 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  nt, const char *
2bd80 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2bd90 61 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20  abBegin(sqlite3 
2bda0 2a 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75  *, VTable *);.Fu
2bdb0 6e 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74  ncDef *sqlite3Vt
2bdc0 61 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69  abOverloadFuncti
2bdd0 6f 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e  on(sqlite3 *,Fun
2bde0 63 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c  cDef*, int nArg,
2bdf0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
2be00 6c 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63  lite3InvalidFunc
2be10 74 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e  tion(sqlite3_con
2be20 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
2be30 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69  3_value**);.sqli
2be40 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65  te3_int64 sqlite
2be50 33 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65  3StmtCurrentTime
2be60 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2be70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2be80 64 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65  dbeParameterInde
2be90 78 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63  x(Vdbe*, const c
2bea0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  har*, int);.int 
2beb0 73 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42  sqlite3TransferB
2bec0 69 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f  indings(sqlite3_
2bed0 73 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f  stmt *, sqlite3_
2bee0 73 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71  stmt *);.void sq
2bef0 6c 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74  lite3ParserReset
2bf00 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71  (Parse*);.int sq
2bf10 6c 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56  lite3Reprepare(V
2bf20 64 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dbe*);.void sqli
2bf30 74 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b  te3ExprListCheck
2bf40 4c 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45  Length(Parse*, E
2bf50 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20  xprList*, const 
2bf60 63 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20  char*);.CollSeq 
2bf70 2a 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f  *sqlite3BinaryCo
2bf80 6d 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72  mpareCollSeq(Par
2bf90 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78  se *, Expr *, Ex
2bfa0 70 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  pr *);.int sqlit
2bfb0 65 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63  e3TempInMemory(c
2bfc0 6f 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a  onst sqlite3*);.
2bfd0 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2bfe0 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61  te3JournalModena
2bff0 6d 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66  me(int);.#ifndef
2c000 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
2c010 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68  .  int sqlite3Ch
2c020 65 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33  eckpoint(sqlite3
2c030 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
2c040 2a 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20  *, int*);.  int 
2c050 73 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c  sqlite3WalDefaul
2c060 74 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69  tHook(void*,sqli
2c070 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
2c080 2c 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69  ,int);.#endif.#i
2c090 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c0a0 54 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71  T_CTE.  With *sq
2c0b0 6c 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72  lite3WithAdd(Par
2c0c0 73 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a  se*,With*,Token*
2c0d0 2c 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63  ,ExprList*,Selec
2c0e0 74 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  t*);.  void sqli
2c0f0 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71  te3WithDelete(sq
2c100 6c 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20  lite3*,With*);. 
2c110 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74   void sqlite3Wit
2c120 68 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69  hPush(Parse*, Wi
2c130 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a  th*, u8);.#else.
2c140 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57  #define sqlite3W
2c150 69 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23  ithPush(x,y,z).#
2c160 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
2c170 74 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65  thDelete(x,y).#e
2c180 6e 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61  ndif../* Declara
2c190 74 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69  tions for functi
2c1a0 6f 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41  ons in fkey.c. A
2c1b0 6c 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20  ll of these are 
2c1c0 72 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e  replaced by.** n
2c1d0 6f 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f  o-op macros if O
2c1e0 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2c1f0 69 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74  is defined. In t
2c200 68 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65  his case no fore
2c210 69 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74  ign.** key funct
2c220 69 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69  ionality is avai
2c230 6c 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54  lable. If OMIT_T
2c240 52 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65  RIGGER is define
2c250 64 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f  d but.** OMIT_FO
2c260 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74  REIGN_KEY is not
2c270 2c 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74  , only some of t
2c280 68 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  he functions are
2c290 20 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20   no-oped. In.** 
2c2a0 74 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67  this case foreig
2c2b0 6e 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65  n keys are parse
2c2c0 64 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20  d, but no other 
2c2d0 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73  functionality is
2c2e0 0a 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e  .** provided (en
2c2f0 66 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20  forcement of FK 
2c300 63 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75  constraints requ
2c310 69 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72  ires the trigger
2c320 73 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a  s sub-system)..*
2c330 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2c340 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
2c350 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
2c360 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2c370 54 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20  TRIGGER).  void 
2c380 73 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50  sqlite3FkCheck(P
2c390 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69  arse*, Table*, i
2c3a0 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2c3b0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
2c3c0 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50  te3FkDropTable(P
2c3d0 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a  arse*, SrcList *
2c3e0 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69  , Table*);.  voi
2c3f0 64 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f  d sqlite3FkActio
2c400 6e 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ns(Parse*, Table
2c410 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
2c420 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  t, int*, int);. 
2c430 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65   int sqlite3FkRe
2c440 71 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54  quired(Parse*, T
2c450 61 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74  able*, int*, int
2c460 29 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33  );.  u32 sqlite3
2c470 46 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a  FkOldmask(Parse*
2c480 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65  , Table*);.  FKe
2c490 79 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65  y *sqlite3FkRefe
2c4a0 72 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b  rences(Table *);
2c4b0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2c4c0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
2c4d0 73 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20  s(a,b,c,d,e,f). 
2c4e0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2c4f0 46 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c  FkCheck(a,b,c,d,
2c500 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2c510 71 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c  qlite3FkDropTabl
2c520 65 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69  e(a,b,c).  #defi
2c530 6e 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d  ne sqlite3FkOldm
2c540 61 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20  ask(a,b)        
2c550 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2c560 69 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61  ite3FkRequired(a
2c570 2c 62 2c 63 2c 64 29 20 20 20 20 30 0a 20 20 23  ,b,c,d)    0.  #
2c580 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2c590 52 65 66 65 72 65 6e 63 65 73 28 61 29 20 20 20  References(a)   
2c5a0 20 20 20 20 20 30 0a 23 65 6e 64 69 66 0a 23 69       0.#endif.#i
2c5b0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2c5c0 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
2c5d0 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 44 65  void sqlite3FkDe
2c5e0 6c 65 74 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  lete(sqlite3 *, 
2c5f0 54 61 62 6c 65 2a 29 3b 0a 20 20 69 6e 74 20 73  Table*);.  int s
2c600 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
2c610 64 65 78 28 50 61 72 73 65 2a 2c 54 61 62 6c 65  dex(Parse*,Table
2c620 2a 2c 46 4b 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c  *,FKey*,Index**,
2c630 69 6e 74 2a 2a 29 3b 0a 23 65 6c 73 65 0a 20 20  int**);.#else.  
2c640 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2c650 6b 44 65 6c 65 74 65 28 61 2c 62 29 0a 20 20 23  kDelete(a,b).  #
2c660 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2c670 4c 6f 63 61 74 65 49 6e 64 65 78 28 61 2c 62 2c  LocateIndex(a,b,
2c680 63 2c 64 2c 65 29 0a 23 65 6e 64 69 66 0a 0a 0a  c,d,e).#endif...
2c690 2f 2a 0a 2a 2a 20 41 76 61 69 6c 61 62 6c 65 20  /*.** Available 
2c6a0 66 61 75 6c 74 20 69 6e 6a 65 63 74 6f 72 73 2e  fault injectors.
2c6b0 20 20 53 68 6f 75 6c 64 20 62 65 20 6e 75 6d 62    Should be numb
2c6c0 65 72 65 64 20 62 65 67 69 6e 6e 69 6e 67 20 77  ered beginning w
2c6d0 69 74 68 20 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e  ith 0..*/.#defin
2c6e0 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2c6f0 4a 45 43 54 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20  JECTOR_MALLOC   
2c700 20 20 30 0a 23 64 65 66 69 6e 65 20 53 51 4c 49    0.#define SQLI
2c710 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52  TE_FAULTINJECTOR
2c720 5f 43 4f 55 4e 54 20 20 20 20 20 20 31 0a 0a 2f  _COUNT      1../
2c730 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2c740 63 65 20 74 6f 20 74 68 65 20 63 6f 64 65 20 69  ce to the code i
2c750 6e 20 66 61 75 6c 74 2e 63 20 75 73 65 64 20 66  n fault.c used f
2c760 6f 72 20 69 64 65 6e 74 69 66 79 69 6e 67 20 22  or identifying "
2c770 62 65 6e 69 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f  benign".** mallo
2c780 63 20 66 61 69 6c 75 72 65 73 2e 20 54 68 69 73  c failures. This
2c790 20 69 73 20 6f 6e 6c 79 20 70 72 65 73 65 6e 74   is only present
2c7a0 20 69 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53   if SQLITE_UNTES
2c7b0 54 41 42 4c 45 0a 2a 2a 20 69 73 20 6e 6f 74 20  TABLE.** is not 
2c7c0 64 65 66 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e  defined..*/.#ifn
2c7d0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
2c7e0 54 41 42 4c 45 0a 20 20 76 6f 69 64 20 73 71 6c  TABLE.  void sql
2c7f0 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e 4d  ite3BeginBenignM
2c800 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 20 20 76  alloc(void);.  v
2c810 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64 42 65  oid sqlite3EndBe
2c820 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29  nignMalloc(void)
2c830 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e  ;.#else.  #defin
2c840 65 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65  e sqlite3BeginBe
2c850 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 20 20 23  nignMalloc().  #
2c860 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 45 6e  define sqlite3En
2c870 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  dBenignMalloc().
2c880 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c  #endif../*.** Al
2c890 6c 6f 77 65 64 20 72 65 74 75 72 6e 20 76 61 6c  lowed return val
2c8a0 75 65 73 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  ues from sqlite3
2c8b0 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 0a 2a 2f  FindInIndex().*/
2c8c0 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2c8d0 58 5f 52 4f 57 49 44 20 20 20 20 20 20 20 20 31  X_ROWID        1
2c8e0 20 20 20 2f 2a 20 53 65 61 72 63 68 20 74 68 65     /* Search the
2c8f0 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20 74 61   rowid of the ta
2c900 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ble */.#define I
2c910 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20 20 20 20  N_INDEX_EPH     
2c920 20 20 20 20 20 32 20 20 20 2f 2a 20 53 65 61 72       2   /* Sear
2c930 63 68 20 61 6e 20 65 70 68 65 6d 65 72 61 6c 20  ch an ephemeral 
2c940 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e  b-tree */.#defin
2c950 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58  e IN_INDEX_INDEX
2c960 5f 41 53 43 20 20 20 20 33 20 20 20 2f 2a 20 45  _ASC    3   /* E
2c970 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 41 53  xisting index AS
2c980 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69  CENDING */.#defi
2c990 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e 44 45  ne IN_INDEX_INDE
2c9a0 58 5f 44 45 53 43 20 20 20 34 20 20 20 2f 2a 20  X_DESC   4   /* 
2c9b0 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78 20 44  Existing index D
2c9c0 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64 65  ESCENDING */.#de
2c9d0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f  fine IN_INDEX_NO
2c9e0 4f 50 20 20 20 20 20 20 20 20 20 35 20 20 20 2f  OP         5   /
2c9f0 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76 61 69 6c  * No table avail
2ca00 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d 70 61 72  able. Use compar
2ca10 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41  isons */./*.** A
2ca20 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20 66 6f 72  llowed flags for
2ca30 20 74 68 65 20 33 72 64 20 70 61 72 61 6d 65 74   the 3rd paramet
2ca40 65 72 20 74 6f 20 73 71 6c 69 74 65 33 46 69 6e  er to sqlite3Fin
2ca50 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23  dInIndex()..*/.#
2ca60 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f  define IN_INDEX_
2ca70 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30 78 30 30  NOOP_OK     0x00
2ca80 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20 72 65 74  01  /* OK to ret
2ca90 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f  urn IN_INDEX_NOO
2caa0 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  P */.#define IN_
2cab0 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53 48 49 50  INDEX_MEMBERSHIP
2cac0 20 20 30 78 30 30 30 32 20 20 2f 2a 20 49 4e 20    0x0002  /* IN 
2cad0 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 66 6f  operator used fo
2cae0 72 20 6d 65 6d 62 65 72 73 68 69 70 20 74 65 73  r membership tes
2caf0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  t */.#define IN_
2cb00 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20 20 20 20  INDEX_LOOP      
2cb10 20 20 30 78 30 30 30 34 20 20 2f 2a 20 49 4e 20    0x0004  /* IN 
2cb20 6f 70 65 72 61 74 6f 72 20 75 73 65 64 20 61 73  operator used as
2cb30 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73   a loop */.int s
2cb40 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2cb50 78 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72 20  x(Parse *, Expr 
2cb60 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c 20 69 6e  *, u32, int*, in
2cb70 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c 69 74 65  t*);..int sqlite
2cb80 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c  3JournalOpen(sql
2cb90 69 74 65 33 5f 76 66 73 20 2a 2c 20 63 6f 6e 73  ite3_vfs *, cons
2cba0 74 20 63 68 61 72 20 2a 2c 20 73 71 6c 69 74 65  t char *, sqlite
2cbb0 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74 2c 20 69  3_file *, int, i
2cbc0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2cbd0 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73 71 6c 69  JournalSize(sqli
2cbe0 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23 69 66 64  te3_vfs *);.#ifd
2cbf0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2cc00 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 0a 20 20  _ATOMIC_WRITE.  
2cc10 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  int sqlite3Journ
2cc20 61 6c 43 72 65 61 74 65 28 73 71 6c 69 74 65 33  alCreate(sqlite3
2cc30 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e 64 69 66  _file *);.#endif
2cc40 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
2cc50 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72 79 28 73  rnalIsInMemory(s
2cc60 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 29 3b  qlite3_file *p);
2cc70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d  .void sqlite3Mem
2cc80 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69  JournalOpen(sqli
2cc90 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f  te3_file *);..vo
2cca0 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 53 65  id sqlite3ExprSe
2ccb0 74 48 65 69 67 68 74 41 6e 64 46 6c 61 67 73 28  tHeightAndFlags(
2ccc0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45  Parse *pParse, E
2ccd0 78 70 72 20 2a 70 29 3b 0a 23 69 66 20 53 51 4c  xpr *p);.#if SQL
2cce0 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44 45 50  ITE_MAX_EXPR_DEP
2ccf0 54 48 3e 30 0a 20 20 69 6e 74 20 73 71 6c 69 74  TH>0.  int sqlit
2cd00 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69 67  e3SelectExprHeig
2cd10 68 74 28 53 65 6c 65 63 74 20 2a 29 3b 0a 20 20  ht(Select *);.  
2cd20 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
2cd30 68 65 63 6b 48 65 69 67 68 74 28 50 61 72 73 65  heckHeight(Parse
2cd40 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 20  *, int);.#else. 
2cd50 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2cd60 53 65 6c 65 63 74 45 78 70 72 48 65 69 67 68 74  SelectExprHeight
2cd70 28 78 29 20 30 0a 20 20 23 64 65 66 69 6e 65 20  (x) 0.  #define 
2cd80 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2cd90 48 65 69 67 68 74 28 78 2c 79 29 0a 23 65 6e 64  Height(x,y).#end
2cda0 69 66 0a 0a 75 33 32 20 73 71 6c 69 74 65 33 47  if..u32 sqlite3G
2cdb0 65 74 34 62 79 74 65 28 63 6f 6e 73 74 20 75 38  et4byte(const u8
2cdc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2cdd0 50 75 74 34 62 79 74 65 28 75 38 2a 2c 20 75 33  Put4byte(u8*, u3
2cde0 32 29 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  2);..#ifdef SQLI
2cdf0 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
2ce00 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69 64 20 73  _NOTIFY.  void s
2ce10 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2ce20 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74 65 33 20  Blocked(sqlite3 
2ce30 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29 3b 0a 20  *, sqlite3 *);. 
2ce40 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e   void sqlite3Con
2ce50 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
2ce60 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2ce70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e  void sqlite3Conn
2ce80 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 73 71 6c  ectionClosed(sql
2ce90 69 74 65 33 20 2a 64 62 29 3b 0a 23 65 6c 73 65  ite3 *db);.#else
2cea0 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2ceb0 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2cec0 6b 65 64 28 78 2c 79 29 0a 20 20 23 64 65 66 69  ked(x,y).  #defi
2ced0 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63  ne sqlite3Connec
2cee0 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 78 29 0a  tionUnlocked(x).
2cef0 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2cf00 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65  3ConnectionClose
2cf10 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66  d(x).#endif..#if
2cf20 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47  def SQLITE_DEBUG
2cf30 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2cf40 61 72 73 65 72 54 72 61 63 65 28 46 49 4c 45 2a  arserTrace(FILE*
2cf50 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65 6e 64 69  , char *);.#endi
2cf60 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  f../*.** If the 
2cf70 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 20 49 4f  SQLITE_ENABLE IO
2cf80 54 52 41 43 45 20 65 78 69 73 74 73 20 74 68 65  TRACE exists the
2cf90 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72  n the global var
2cfa0 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69 74 65 33  iable.** sqlite3
2cfb0 49 6f 54 72 61 63 65 20 69 73 20 61 20 70 6f 69  IoTrace is a poi
2cfc0 6e 74 65 72 20 74 6f 20 61 20 70 72 69 6e 74 66  nter to a printf
2cfd0 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65 20 75 73  -like routine us
2cfe0 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e 74 20 49  ed to.** print I
2cff0 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65 73 73 61  /O tracing messa
2d000 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ges..*/.#ifdef S
2d010 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 49 4f 54  QLITE_ENABLE_IOT
2d020 52 41 43 45 0a 23 20 64 65 66 69 6e 65 20 49 4f  RACE.# define IO
2d030 54 52 41 43 45 28 41 29 20 20 69 66 28 20 73 71  TRACE(A)  if( sq
2d040 6c 69 74 65 33 49 6f 54 72 61 63 65 20 29 7b 20  lite3IoTrace ){ 
2d050 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20 41  sqlite3IoTrace A
2d060 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  ; }.  void sqlit
2d070 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2d080 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49 54 45 5f  (Vdbe*);.SQLITE_
2d090 41 50 49 20 53 51 4c 49 54 45 5f 45 58 54 45 52  API SQLITE_EXTER
2d0a0 4e 20 76 6f 69 64 20 28 53 51 4c 49 54 45 5f 43  N void (SQLITE_C
2d0b0 44 45 43 4c 20 2a 73 71 6c 69 74 65 33 49 6f 54  DECL *sqlite3IoT
2d0c0 72 61 63 65 29 28 63 6f 6e 73 74 20 63 68 61 72  race)(const char
2d0d0 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65 0a 23 20  *,...);.#else.# 
2d0e0 64 65 66 69 6e 65 20 49 4f 54 52 41 43 45 28 41  define IOTRACE(A
2d0f0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
2d100 65 33 56 64 62 65 49 4f 54 72 61 63 65 53 71 6c  e3VdbeIOTraceSql
2d110 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
2d120 2a 20 54 68 65 73 65 20 72 6f 75 74 69 6e 65 73  * These routines
2d130 20 61 72 65 20 61 76 61 69 6c 61 62 6c 65 20 66   are available f
2d140 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63 20 64 65  or the mem2.c de
2d150 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72 79 20 61  bugging memory a
2d160 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79  llocator.** only
2d170 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65 64  .  They are used
2d180 20 74 6f 20 76 65 72 69 66 79 20 74 68 61 74 20   to verify that 
2d190 64 69 66 66 65 72 65 6e 74 20 22 74 79 70 65 73  different "types
2d1a0 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61  " of memory.** a
2d1b0 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 70  llocations are p
2d1c0 72 6f 70 65 72 6c 79 20 74 72 61 63 6b 65 64 20  roperly tracked 
2d1d0 62 79 20 74 68 65 20 73 79 73 74 65 6d 2e 0a 2a  by the system..*
2d1e0 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64  *.** sqlite3Memd
2d1f0 65 62 75 67 53 65 74 54 79 70 65 28 29 20 73 65  ebugSetType() se
2d200 74 73 20 74 68 65 20 22 74 79 70 65 22 20 6f 66  ts the "type" of
2d210 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 74   an allocation t
2d220 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74 68 65 20  o one of.** the 
2d230 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63 72 6f 73  MEMTYPE_* macros
2d240 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 2e 20   defined below. 
2d250 20 54 68 65 20 74 79 70 65 20 6d 75 73 74 20 62   The type must b
2d260 65 20 61 20 62 69 74 6d 61 73 6b 20 77 69 74 68  e a bitmask with
2d270 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20 62 69 74  .** a single bit
2d280 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69   set..**.** sqli
2d290 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79  te3MemdebugHasTy
2d2a0 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72 75  pe() returns tru
2d2b0 65 20 69 66 20 61 6e 79 20 6f 66 20 74 68 65 20  e if any of the 
2d2c0 62 69 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f  bits in its seco
2d2d0 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d  nd.** argument m
2d2e0 61 74 63 68 20 74 68 65 20 74 79 70 65 20 73 65  atch the type se
2d2f0 74 20 62 79 20 74 68 65 20 70 72 65 76 69 6f 75  t by the previou
2d300 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  s sqlite3Memdebu
2d310 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a 20 73  gSetType()..** s
2d320 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2d330 73 54 79 70 65 28 29 20 69 73 20 69 6e 74 65 6e  sType() is inten
2d340 64 65 64 20 66 6f 72 20 75 73 65 20 69 6e 73 69  ded for use insi
2d350 64 65 20 61 73 73 65 72 74 28 29 20 73 74 61 74  de assert() stat
2d360 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71  ements..**.** sq
2d370 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2d380 79 70 65 28 29 20 72 65 74 75 72 6e 73 20 74 72  ype() returns tr
2d390 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68  ue if none of th
2d3a0 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73 65  e bits in its se
2d3b0 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e 74  cond.** argument
2d3c0 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65 20   match the type 
2d3d0 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76 69  set by the previ
2d3e0 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64 65  ous sqlite3Memde
2d3f0 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a 2a  bugSetType()..**
2d400 0a 2a 2a 20 50 65 72 68 61 70 73 20 74 68 65 20  .** Perhaps the 
2d410 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e 74 20 70  most important p
2d420 6f 69 6e 74 20 69 73 20 74 68 65 20 64 69 66 66  oint is the diff
2d430 65 72 65 6e 63 65 20 62 65 74 77 65 65 6e 20 4d  erence between M
2d440 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a 2a 20 61  EMTYPE_HEAP.** a
2d450 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  nd MEMTYPE_LOOKA
2d460 53 49 44 45 2e 20 20 49 66 20 61 6e 20 61 6c 6c  SIDE.  If an all
2d470 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45 4d 54 59  ocation is MEMTY
2d480 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c 20 74 68  PE_LOOKASIDE, th
2d490 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69 74 20 6d  at means.** it m
2d4a0 69 67 68 74 20 68 61 76 65 20 62 65 65 6e 20 61  ight have been a
2d4b0 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c 6f 6f 6b  llocated by look
2d4c0 61 73 69 64 65 2c 20 65 78 63 65 70 74 20 74 68  aside, except th
2d4d0 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 77 61 73  e allocation was
2d4e0 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65 20 6f 72  .** too large or
2d4f0 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61 73 20 61   lookaside was a
2d500 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20 20 49 74  lready full.  It
2d510 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f   is important to
2d520 20 76 65 72 69 66 79 0a 2a 2a 20 74 68 61 74 20   verify.** that 
2d530 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74 68 61 74  allocations that
2d540 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65 6e   might have been
2d550 20 73 61 74 69 73 66 69 65 64 20 62 79 20 6c 6f   satisfied by lo
2d560 6f 6b 61 73 69 64 65 20 61 72 65 20 6e 6f 74 0a  okaside are not.
2d570 2a 2a 20 70 61 73 73 65 64 20 62 61 63 6b 20 74  ** passed back t
2d580 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20  o non-lookaside 
2d590 66 72 65 65 28 29 20 72 6f 75 74 69 6e 65 73 2e  free() routines.
2d5a0 20 20 41 73 73 65 72 74 73 20 73 75 63 68 20 61    Asserts such a
2d5b0 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d 70 6c 65  s the.** example
2d5c0 20 61 62 6f 76 65 20 61 72 65 20 70 6c 61 63 65   above are place
2d5d0 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f  d on the non-loo
2d5e0 6b 61 73 69 64 65 20 66 72 65 65 28 29 20 72 6f  kaside free() ro
2d5f0 75 74 69 6e 65 73 20 74 6f 20 76 65 72 69 66 79  utines to verify
2d600 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73 74 72 61  .** this constra
2d610 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f  int..**.** All o
2d620 66 20 74 68 69 73 20 69 73 20 6e 6f 2d 6f 70 20  f this is no-op 
2d630 66 6f 72 20 61 20 70 72 6f 64 75 63 74 69 6f 6e  for a production
2d640 20 62 75 69 6c 64 2e 20 20 49 74 20 6f 6e 6c 79   build.  It only
2d650 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a 2a 20 70   comes into.** p
2d660 6c 61 79 20 77 68 65 6e 20 74 68 65 20 53 51 4c  lay when the SQL
2d670 49 54 45 5f 4d 45 4d 44 45 42 55 47 20 63 6f 6d  ITE_MEMDEBUG com
2d680 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
2d690 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 23 69 66   is used..*/.#if
2d6a0 64 65 66 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45  def SQLITE_MEMDE
2d6b0 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
2d6c0 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2d6d0 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 20 20 69  e(void*,u8);.  i
2d6e0 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62  nt sqlite3Memdeb
2d6f0 75 67 48 61 73 54 79 70 65 28 76 6f 69 64 2a 2c  ugHasType(void*,
2d700 75 38 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  u8);.  int sqlit
2d710 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65  e3MemdebugNoType
2d720 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23 65 6c 73  (void*,u8);.#els
2d730 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
2d740 65 33 4d 65 6d 64 65 62 75 67 53 65 74 54 79 70  e3MemdebugSetTyp
2d750 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70  e(X,Y)  /* no-op
2d760 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 73 71 6c   */.# define sql
2d770 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54  ite3MemdebugHasT
2d780 79 70 65 28 58 2c 59 29 20 20 31 0a 23 20 64 65  ype(X,Y)  1.# de
2d790 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65 6d 64  fine sqlite3Memd
2d7a0 65 62 75 67 4e 6f 54 79 70 65 28 58 2c 59 29 20  ebugNoType(X,Y) 
2d7b0 20 20 31 0a 23 65 6e 64 69 66 0a 23 64 65 66 69    1.#endif.#defi
2d7c0 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 20  ne MEMTYPE_HEAP 
2d7d0 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 47        0x01  /* G
2d7e0 65 6e 65 72 61 6c 20 68 65 61 70 20 61 6c 6c 6f  eneral heap allo
2d7f0 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  cations */.#defi
2d800 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41  ne MEMTYPE_LOOKA
2d810 53 49 44 45 20 20 30 78 30 32 20 20 2f 2a 20 48  SIDE  0x02  /* H
2d820 65 61 70 20 74 68 61 74 20 6d 69 67 68 74 20 68  eap that might h
2d830 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b 61 73 69  ave been lookasi
2d840 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45  de */.#define ME
2d850 4d 54 59 50 45 5f 53 43 52 41 54 43 48 20 20 20  MTYPE_SCRATCH   
2d860 20 30 78 30 34 20 20 2f 2a 20 53 63 72 61 74 63   0x04  /* Scratc
2d870 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f  h allocations */
2d880 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50 45  .#define MEMTYPE
2d890 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30 38  _PCACHE     0x08
2d8a0 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65 20    /* Page cache 
2d8b0 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a  allocations */..
2d8c0 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67 20  /*.** Threading 
2d8d0 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69 66  interface.*/.#if
2d8e0 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b   SQLITE_MAX_WORK
2d8f0 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e 74  ER_THREADS>0.int
2d900 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43 72   sqlite3ThreadCr
2d910 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65 61  eate(SQLiteThrea
2d920 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f 69  d**,void*(*)(voi
2d930 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74 20  d*),void*);.int 
2d940 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f 69  sqlite3ThreadJoi
2d950 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2c  n(SQLiteThread*,
2d960 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69 66   void**);.#endif
2d970 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
2d980 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53 54  LITE_ENABLE_DBST
2d990 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66 69  AT_VTAB) || defi
2d9a0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
2d9b0 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73 74  .int sqlite3Dbst
2d9c0 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69 74  atRegister(sqlit
2d9d0 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e3*);.#endif..in
2d9e0 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65 63  t sqlite3ExprVec
2d9f0 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70 45  torSize(Expr *pE
2da00 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  xpr);.int sqlite
2da10 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45 78  3ExprIsVector(Ex
2da20 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72  pr *pExpr);.Expr
2da30 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72 46   *sqlite3VectorF
2da40 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70 72  ieldSubexpr(Expr
2da50 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73  *, int);.Expr *s
2da60 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65 63  qlite3ExprForVec
2da70 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a 2c  torField(Parse*,
2da80 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  Expr*,int);.void
2da90 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45 72   sqlite3VectorEr
2daa0 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20 45  rorMsg(Parse*, E
2dab0 78 70 72 2a 29 3b 0a 0a 23 65 6e 64 69 66 20 2f  xpr*);..#endif /
2dac0 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f  * SQLITEINT_H */
2dad0 0a                                               .