/ Hex Artifact Content
Login

Artifact 7a7f342f654805f3ad150fb6e3b4d1a08198830797e7230138847d45fe2093e8:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
11f0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
1200: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
1210: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
1220: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
1230: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
1240: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
1250: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 23 69  SION 0.#endif.#i
1260: 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56  f defined(_MSC_V
1270: 45 52 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ER) && !defined(
1280: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1290: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
12a0: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
12b0: 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73 65 0a 23  _MSC_VER.#else.#
12c0: 20 64 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52   define MSVC_VER
12d0: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
12e0: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
12f0: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
1300: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
1310: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
1320: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
1330: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1340: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
1350: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
1360: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
1370: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
1380: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
1390: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
13a0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
13b0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
13c0: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
13d0: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
13e0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
13f0: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
1400: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
1410: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
1420: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
1430: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
1440: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
1450: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
1460: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1470: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
1480: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
1490: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
14a0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
14b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c0: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
14d0: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
14e0: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
14f0: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
1500: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
1510: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
1520: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
1530: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
1540: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
1550: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
1560: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
1570: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
1580: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
1590: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
15a0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
15b0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
15c0: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
15d0: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
15e0: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
15f0: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
1600: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
1610: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
1620: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
1630: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
1640: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
1650: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
1660: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
1670: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
1680: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
1690: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
16a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
16b0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
16c0: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
16d0: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
16e0: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
16f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
1700: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
1710: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
1720: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
1730: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
1740: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
1750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
1760: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
1770: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
1780: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
1790: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
17a0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
17b0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
17c0: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
17d0: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
17e0: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
17f0: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
1800: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
1810: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
1820: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
1830: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1840: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
1850: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
1860: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
1870: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
1880: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
1890: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
18a0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
18b0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
18c0: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
18d0: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
18e0: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
18f0: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1900: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1910: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1920: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1930: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1940: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1950: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
1960: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
1970: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
1980: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
1990: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
19a0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
19b0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
19c0: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
19d0: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
19e0: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
19f0: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1a00: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1a10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1a20: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1a30: 64 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  d.*/.#if defined
1a40: 28 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f  (_HAVE_SQLITE_CO
1a50: 4e 46 49 47 5f 48 29 20 26 26 20 21 64 65 66 69  NFIG_H) && !defi
1a60: 6e 65 64 28 53 51 4c 49 54 45 43 4f 4e 46 49 47  ned(SQLITECONFIG
1a70: 5f 48 29 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f  _H).#include "co
1a80: 6e 66 69 67 2e 68 22 0a 23 64 65 66 69 6e 65 20  nfig.h".#define 
1a90: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 20 31  SQLITECONFIG_H 1
1aa0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
1ab0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
1ac0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
1ad0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
1ae0: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
1af0: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
1b00: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
1b10: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
1b20: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
1b30: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
1b40: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
1b50: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
1b60: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
1b70: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
1b80: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
1b90: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
1ba0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
1bb0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
1bc0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
1bd0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
1be0: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
1bf0: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
1c00: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
1c10: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
1c20: 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e  .** Include stan
1c30: 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65  dard header file
1c40: 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a  s as necessary.*
1c50: 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54  /.#ifdef HAVE_ST
1c60: 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20  DINT_H.#include 
1c70: 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69  <stdint.h>.#endi
1c80: 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e  f.#ifdef HAVE_IN
1c90: 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64  TTYPES_H.#includ
1ca0: 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23  e <inttypes.h>.#
1cb0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1cc0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1cd0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61  s are used to ca
1ce0: 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69  st pointers to i
1cf0: 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69  ntegers and.** i
1d00: 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74  ntegers to point
1d10: 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f  ers.  The way yo
1d20: 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73  u do this varies
1d30: 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c   from one compil
1d40: 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78  er.** to the nex
1d50: 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65  t, so we have de
1d60: 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c  veloped the foll
1d70: 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66  owing set of #if
1d80: 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74   statements.** t
1d90: 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f  o generate appro
1da0: 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f  priate macros fo
1db0: 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f  r a wide range o
1dc0: 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a  f compilers..**.
1dd0: 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22  ** The correct "
1de0: 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20  ANSI" way to do 
1df0: 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74  this is to use t
1e00: 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65  he intptr_t type
1e10: 2e 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65  ..** Unfortunate
1e20: 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66  ly, that typedef
1e30: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
1e40: 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  e on all compile
1e50: 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20  rs, or.** if it 
1e60: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74  is available, it
1e70: 20 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e   requires an #in
1e80: 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69  clude of specifi
1e90: 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61  c headers.** tha
1ea0: 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20  t vary from one 
1eb0: 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e  machine to the n
1ec0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65  ext..**.** Ticke
1ed0: 74 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c  t #3860:  The ll
1ee0: 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69  vm-gcc-4.2 compi
1ef0: 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63  ler from Apple c
1f00: 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20  hokes on.** the 
1f10: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
1f20: 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63  )0)[X]) construc
1f30: 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f  t.  But MSVC cho
1f40: 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28  kes on ((void*)(
1f50: 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61  X))..** So we ha
1f60: 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65  ve to define the
1f70: 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65   macros in diffe
1f80: 72 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64  rent ways depend
1f90: 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f  ing on the.** co
1fa0: 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64  mpiler..*/.#if d
1fb0: 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46  efined(__PTRDIFF
1fc0: 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69  _TYPE__)  /* Thi
1fd0: 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f  s case should wo
1fe0: 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20  rk for GCC */.# 
1ff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
2000: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
2010: 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f  oid*)(__PTRDIFF_
2020: 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65  TYPE__)(X)).# de
2030: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f  fine SQLITE_PTR_
2040: 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74  TO_INT(X)  ((int
2050: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
2060: 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64  __)(X)).#elif !d
2070: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2080: 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20         /* Works 
2090: 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74  for compilers ot
20a0: 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f  her than LLVM */
20b0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
20c0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
20d0: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
20e0: 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65  )0)[X]).# define
20f0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
2100: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28  NT(X)  ((int)(((
2110: 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29  char*)X)-(char*)
2120: 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  0)).#elif define
2130: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
2140: 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63     /* Use this c
2150: 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41  ase if we have A
2160: 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23  NSI headers */.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2180: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2190: 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29  void*)(intptr_t)
21a0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
21b0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
21c0: 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74  X)  ((int)(intpt
21d0: 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20  r_t)(X)).#else  
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72          /* Gener
2200: 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d  ates a warning -
2210: 20 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77   but it always w
2220: 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  orks */.# define
2230: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
2240: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
2250: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
2260: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2270: 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65  )  ((int)(X)).#e
2280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  ndif../*.** A ma
2290: 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74  cro to hint to t
22a0: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74  he compiler that
22b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75   a function shou
22c0: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c  ld not be.** inl
22d0: 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ined..*/.#if def
22e0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23  ined(__GNUC__).#
22f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2300: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72  NOINLINE  __attr
2310: 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e  ibute__((noinlin
2320: 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  e)).#elif define
2330: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2340: 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20  MSC_VER>=1310.# 
2350: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
2360: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73  OINLINE  __decls
2370: 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65  pec(noinline).#e
2380: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51  lse.#  define SQ
2390: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65  LITE_NOINLINE.#e
23a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  ndif../*.** Make
23b0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63   sure that the c
23c0: 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69  ompiler intrinsi
23d0: 63 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65  cs we desire are
23e0: 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a   enabled when.**
23f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
2400: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76  an appropriate v
2410: 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75  ersion of MSVC u
2420: 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20  nless prevented 
2430: 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  by.** the SQLITE
2440: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2450: 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69  IC define..*/.#i
2460: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2470: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
2480: 53 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e  SIC).#  if defin
2490: 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20  ed(_MSC_VER) && 
24a0: 5f 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23  _MSC_VER>=1400.#
24b0: 20 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28      if !defined(
24c0: 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20  _WIN32_WCE).#   
24d0: 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72     include <intr
24e0: 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61  in.h>.#      pra
24f0: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
2500: 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a  yteswap_ushort).
2510: 23 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e  #      pragma in
2520: 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61  trinsic(_byteswa
2530: 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20  p_ulong).#      
2540: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
2550: 28 5f 62 79 74 65 73 77 61 70 5f 75 69 6e 74 36  (_byteswap_uint6
2560: 34 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  4).#      pragma
2570: 20 69 6e 74 72 69 6e 73 69 63 28 5f 52 65 61 64   intrinsic(_Read
2580: 57 72 69 74 65 42 61 72 72 69 65 72 29 0a 23 20  WriteBarrier).# 
2590: 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20 20 69     else.#      i
25a0: 6e 63 6c 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69  nclude <cmnintri
25b0: 6e 2e 68 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a  n.h>.#    endif.
25c0: 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
25d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
25e0: 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  E_THREADSAFE mac
25f0: 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  ro must be defin
2600: 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32  ed as 0, 1, or 2
2610: 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74  ..** 0 means mut
2620: 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65  exes are permane
2630: 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64  ntly disable and
2640: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
2650: 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73  never.** threads
2660: 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68  afe.  1 means th
2670: 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72  e library is ser
2680: 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73  ialized which is
2690: 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20   the highest.** 
26a0: 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73  level of threads
26b0: 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20  afety.  2 means 
26c0: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d  the library is m
26d0: 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d  ultithreaded - m
26e0: 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61  ultiple.** threa
26f0: 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74  ds can use SQLit
2700: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20  e as long as no 
2710: 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79 20  two threads try 
2720: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a  to use the same.
2730: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
2740: 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61  ection at the sa
2750: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f  me time..**.** O
2760: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
2770: 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20   SQLite used an 
2780: 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53  optional THREADS
2790: 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65  AFE macro..** We
27a0: 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f   support that fo
27b0: 72 20 6c 65 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20  r legacy..**.** 
27c0: 54 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  To ensure that t
27d0: 68 65 20 63 6f 72 72 65 63 74 20 76 61 6c 75 65  he correct value
27e0: 20 6f 66 20 22 54 48 52 45 41 44 53 41 46 45 22   of "THREADSAFE"
27f0: 20 69 73 20 72 65 70 6f 72 74 65 64 20 77 68 65   is reported whe
2800: 6e 20 71 75 65 72 79 69 6e 67 0a 2a 2a 20 66 6f  n querying.** fo
2810: 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  r compile-time o
2820: 70 74 69 6f 6e 73 20 61 74 20 72 75 6e 74 69 6d  ptions at runtim
2830: 65 20 28 65 2e 67 2e 20 22 50 52 41 47 4d 41 20  e (e.g. "PRAGMA 
2840: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22  compile_options"
2850: 29 2c 20 74 68 69 73 0a 2a 2a 20 6c 6f 67 69 63  ), this.** logic
2860: 20 69 73 20 70 61 72 74 69 61 6c 6c 79 20 72 65   is partially re
2870: 70 6c 69 63 61 74 65 64 20 69 6e 20 63 74 69 6d  plicated in ctim
2880: 65 2e 63 2e 20 49 66 20 69 74 20 69 73 20 75 70  e.c. If it is up
2890: 64 61 74 65 64 20 68 65 72 65 2c 20 69 74 20 73  dated here, it s
28a0: 68 6f 75 6c 64 0a 2a 2a 20 61 6c 73 6f 20 62 65  hould.** also be
28b0: 20 75 70 64 61 74 65 64 20 74 68 65 72 65 2e 0a   updated there..
28c0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
28d0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
28e0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
28f0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
2900: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
2910: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
2920: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
2930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
2940: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
2950: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
2960: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
2970: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
2980: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
2990: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
29a0: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
29b0: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
29c0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
29d0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
29e0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
29f0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
2a00: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
2a10: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
2a20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
2a30: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
2a40: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2a50: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2a60: 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f  25715-37072 Memo
2a70: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74  ry allocation st
2a80: 61 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61  atistics are ena
2a90: 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75  bled by.** defau
2aa0: 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65  lt unless SQLite
2ab0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
2ac0: 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  h SQLITE_DEFAULT
2ad0: 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a  _MEMSTATUS=0 in.
2ae0: 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65  ** which case me
2af0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
2b00: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64  statistics are d
2b10: 69 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75  isabled by defau
2b20: 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  lt..*/.#if !defi
2b30: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55  ned(SQLITE_DEFAU
2b40: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20  LT_MEMSTATUS).# 
2b50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
2b60: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
2b70: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2b80: 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74  Exactly one of t
2b90: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
2ba0: 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69  ros must be defi
2bb0: 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ned in order to.
2bc0: 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68  ** specify which
2bd0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2be0: 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20  on subsystem to 
2bf0: 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
2c00: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2c10: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20  LOC          // 
2c20: 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65  Use normal syste
2c30: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20  m malloc().**   
2c40: 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d    SQLITE_WIN32_M
2c50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2c60: 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74  // Use Win32 nat
2c70: 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20  ive heap API.** 
2c80: 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f      SQLITE_ZERO_
2c90: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2ca0: 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20    // Use a stub 
2cb0: 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61  allocator that a
2cc0: 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20  lways fails.**  
2cd0: 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42     SQLITE_MEMDEB
2ce0: 55 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UG              
2cf0: 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65   // Debugging ve
2d00: 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20  rsion of system 
2d10: 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f  malloc().**.** O
2d20: 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68  n Windows, if th
2d30: 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  e SQLITE_WIN32_M
2d40: 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d  ALLOC_VALIDATE m
2d50: 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20  acro is defined 
2d60: 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  and the.** asser
2d70: 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61  t() macro is ena
2d80: 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20  bled, each call 
2d90: 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e  into the Win32 n
2da0: 61 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79  ative heap subsy
2db0: 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75  stem.** will cau
2dc0: 73 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20  se HeapValidate 
2dd0: 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49  to be called.  I
2de0: 66 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f  f heap validatio
2df0: 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61  n should fail, a
2e00: 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77  n.** assertion w
2e10: 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64  ill be triggered
2e20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20  ..**.** If none 
2e30: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
2e40: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73   defined, then s
2e50: 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  et SQLITE_SYSTEM
2e60: 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68  _MALLOC as.** th
2e70: 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  e default..*/.#i
2e80: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2e90: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
2ea0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2eb0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ec0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2ed0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
2ee0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ef0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
2f00: 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54  UG)>1.# error "T
2f10: 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  wo or more of th
2f20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
2f30: 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
2f40: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a  ration options\.
2f50: 20 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74   are defined but
2f60: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20   at most one is 
2f70: 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54  allowed:\. SQLIT
2f80: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c  E_SYSTEM_MALLOC,
2f90: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2fa0: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d  LLOC, SQLITE_MEM
2fb0: 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f  DEBUG,\. SQLITE_
2fc0: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e  ZERO_MALLOC".#en
2fd0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2fe0: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2ff0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
3000: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
3010: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
3020: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
3030: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
3040: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3050: 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64  MEMDEBUG)==0.# d
3060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53  efine SQLITE_SYS
3070: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e  TEM_MALLOC 1.#en
3080: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51  dif../*.** If SQ
3090: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
30a0: 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65  _LIMIT is not ze
30b0: 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20  ro, then try to 
30c0: 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65  keep the.** size
30d0: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
30e0: 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68  cations below th
30f0: 69 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70  is value where p
3100: 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20  ossible..*/.#if 
3110: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3120: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
3130: 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T).# define SQLI
3140: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
3150: 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66  IMIT 1024.#endif
3160: 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20  ../*.** We need 
3170: 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  to define _XOPEN
3180: 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f  _SOURCE as follo
3190: 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65  ws in order to e
31a0: 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69  nable.** recursi
31b0: 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f  ve mutexes on mo
31c0: 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20  st Unix systems 
31d0: 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20  and fchmod() on 
31e0: 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20  OpenBSD..** But 
31f0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65  _XOPEN_SOURCE de
3200: 66 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62  fine causes prob
3210: 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20  lems for Mac OS 
3220: 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74  X, so omit.** it
3230: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
3240: 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29  d(_XOPEN_SOURCE)
3250: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44   && !defined(__D
3260: 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66  ARWIN__) && !def
3270: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a  ined(__APPLE__).
3280: 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  #  define _XOPEN
3290: 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64  _SOURCE 600.#end
32a0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47  if../*.** NDEBUG
32b0: 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55   and SQLITE_DEBU
32c0: 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e  G are opposites.
32d0: 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61    It should alwa
32e0: 79 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a  ys be true that.
32f0: 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  ** defined(NDEBU
3300: 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c  G)==!defined(SQL
3310: 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20  ITE_DEBUG).  If 
3320: 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72  this is not curr
3330: 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d  ently true,.** m
3340: 61 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64  ake it true by d
3350: 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66  efining or undef
3360: 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a  ining NDEBUG..**
3370: 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42  .** Setting NDEB
3380: 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64  UG makes the cod
3390: 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61  e smaller and fa
33a0: 73 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e  ster by disablin
33b0: 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28  g the.** assert(
33c0: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
33d0: 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65  the code.  So we
33e0: 20 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c   want the defaul
33f0: 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  t action.** to b
3400: 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20  e for NDEBUG to 
3410: 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55  be set and NDEBU
3420: 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65  G to be undefine
3430: 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45  d only if SQLITE
3440: 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74  _DEBUG.** is set
3450: 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62  .  Thus NDEBUG b
3460: 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e  ecomes an opt-in
3470: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20   rather than an 
3480: 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75  opt-out.** featu
3490: 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  re..*/.#if !defi
34a0: 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21  ned(NDEBUG) && !
34b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
34c0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e  EBUG).# define N
34d0: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
34e0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
34f0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
3500: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
3510: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
3520: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
3540: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
3550: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
3560: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
3570: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3580: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3590: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
35a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
35b0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
35c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
35d0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
35e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
35f0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
3600: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
3610: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
3620: 73 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20  sting.  When.** 
3630: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3640: 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64  esting, the cond
3650: 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65  ition inside the
3660: 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20   argument to.** 
3670: 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20  testcase() must 
3680: 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74  be evaluated bot
3690: 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  h true and false
36a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
36b0: 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20  get full branch 
36c0: 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74  coverage.  The t
36d0: 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20  estcase() macro 
36e0: 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74  is inserted.** t
36f0: 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64  o help ensure ad
3700: 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65  equate test cove
3710: 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77  rage in places w
3720: 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63  here simple.** c
3730: 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f  ondition/decisio
3740: 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e  n coverage is in
3750: 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65  adequate.  For e
3760: 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65  xample, testcase
3770: 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  ().** can be use
3780: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62  d to make sure b
3790: 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61  oundary values a
37a0: 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a  re tested.  For.
37b0: 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73  ** bitmask tests
37c0: 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e  , testcase() can
37d0: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
37e0: 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a   sure each bit.*
37f0: 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74  * is significant
3800: 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61   and used at lea
3810: 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69  st once.  On swi
3820: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a  tch statements.*
3830: 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65  * where multiple
3840: 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65   cases go to the
3850: 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63   same block of c
3860: 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a  ode, testcase().
3870: 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68  ** can insure th
3880: 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65  at all cases are
3890: 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a   evaluated..**.*
38a0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
38b0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20  COVERAGE_TEST.  
38c0: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65  void sqlite3Cove
38d0: 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66  rage(int);.# def
38e0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20  ine testcase(X) 
38f0: 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65   if( X ){ sqlite
3900: 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45  3Coverage(__LINE
3910: 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64  __); }.#else.# d
3920: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
3930: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3940: 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63  The TESTONLY mac
3950: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e  ro is used to en
3960: 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64  close variable d
3970: 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a  eclarations or.*
3980: 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20  * other bits of 
3990: 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65  code that are ne
39a0: 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20  eded to support 
39b0: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a  the arguments.**
39c0: 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65   within testcase
39d0: 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20  () and assert() 
39e0: 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21  macros..*/.#if !
39f0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
3a00: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
3a10: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3a20: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
3a30: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
3a40: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3a50: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
3a60: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e  * Sometimes we n
3a70: 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75  eed a small amou
3a80: 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20  nt of code such 
3a90: 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e  as a variable in
3aa0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20  itialization.** 
3ab0: 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c  to setup for a l
3ac0: 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74  ater assert() st
3ad0: 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20  atement.  We do 
3ae0: 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f  not want this co
3af0: 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20  de to.** appear 
3b00: 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73  when assert() is
3b10: 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20   disabled.  The 
3b20: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
3b30: 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20  is therefore.** 
3b40: 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  used to contain 
3b50: 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e  that setup code.
3b60: 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f    The "VVA" acro
3b70: 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  nym stands for.*
3b80: 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  * "Verification,
3b90: 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64   Validation, and
3ba0: 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e   Accreditation".
3bb0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
3bc0: 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69  , the.** code wi
3bd0: 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20  thin VVA_ONLY() 
3be0: 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75  will only run du
3bf0: 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f  ring verificatio
3c00: 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a  n processes..*/.
3c10: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  #ifndef NDEBUG.#
3c20: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
3c30: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3c40: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3c50: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3c60: 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  The ALWAYS and N
3c70: 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72  EVER macros surr
3c80: 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ound boolean exp
3c90: 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a  ressions which.*
3ca0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
3cb0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
3cc0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
3cd0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
3ce0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
3cf0: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
3d00: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
3d10: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
3d20: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
3d30: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
3d40: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3d50: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
3d60: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
3d70: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
3d80: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
3d90: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
3da0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
3db0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
3dc0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
3dd0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
3de0: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
3df0: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
3e00: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
3e10: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
3e20: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
3e30: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
3e40: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
3e50: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
3e60: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3e70: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
3e80: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
3e90: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
3ea0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
3eb0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
3ec0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
3ed0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
3ee0: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3ef0: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3f10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3f20: 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65  _TEST) || define
3f30: 64 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f  d(SQLITE_MUTATIO
3f40: 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  N_TEST).# define
3f50: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3f60: 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (1).# define NEV
3f70: 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a  ER(X)       (0).
3f80: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
3f90: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
3fa0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3fb0: 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29  (X)?1:(assert(0)
3fc0: 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45  ,0)).# define NE
3fd0: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58  VER(X)       ((X
3fe0: 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a  )?(assert(0),1):
3ff0: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
4000: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
4010: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (X).# define NE
4020: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29  VER(X)       (X)
4030: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
4040: 6f 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  ome malloc failu
4050: 72 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73  res are only pos
4060: 73 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f  sible if SQLITE_
4070: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4080: 45 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65  ESS is.** define
4090: 64 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64  d.  We need to d
40a0: 65 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68  efend against th
40b0: 6f 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65  ose failures whe
40c0: 6e 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a  n testing with.*
40d0: 2a 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  * SQLITE_TEST_RE
40e0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75  ALLOC_STRESS, bu
40f0: 74 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20  t we don't want 
4100: 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20  the unreachable 
4110: 62 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69  branches.** duri
4120: 6e 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c  ng a normal buil
4130: 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  d.  The followin
4140: 67 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75  g macro can be u
4150: 73 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74  sed to disable t
4160: 65 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65  ests.** that are
4170: 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78   always false ex
4180: 63 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45  cept when SQLITE
4190: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
41a0: 52 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  RESS is set..*/.
41b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
41c0: 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f  TE_TEST_REALLOC_
41d0: 53 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65  STRESS).# define
41e0: 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43   ONLY_IF_REALLOC
41f0: 5f 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a  _STRESS(X)  (X).
4200: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
4210: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
4220: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4230: 53 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f  STRESS(X)  ((X)?
4240: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
4250: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4260: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4270: 53 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23  STRESS(X)  (0).#
4280: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  endif../*.** Dec
4290: 6c 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66  larations used f
42a0: 6f 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f  or tracing the o
42b0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20  perating system 
42c0: 69 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23  interfaces..*/.#
42d0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
42e0: 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45  E_FORCE_OS_TRACE
42f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
4300: 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20  ITE_TEST) || \. 
4310: 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
4320: 54 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c  TE_DEBUG) && SQL
4330: 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78  ITE_OS_WIN).  ex
4340: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
4350: 4f 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e  OSTrace;.# defin
4360: 65 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20  e OSTRACE(X)    
4370: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4380: 33 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74  3OSTrace ) sqlit
4390: 65 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a  e3DebugPrintf X.
43a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
43b0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
43c0: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  lse.# define OST
43d0: 52 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20  RACE(X).# undef 
43e0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
43f0: 54 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TRACE.#endif../*
4400: 0a 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74  .** Is the sqlit
4410: 65 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63  e3ErrName() func
4420: 74 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74  tion needed in t
4430: 68 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65  he build?  Curre
4440: 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e  ntly,.** it is n
4450: 65 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f  eeded by "mutex_
4460: 77 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62  w32.c" (when deb
4470: 75 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e  ugging), "os_win
4480: 2e 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54  .c" (when.** OST
4490: 52 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29  RACE is enabled)
44a0: 2c 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c  , and by several
44b0: 20 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73   "test*.c" files
44c0: 20 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63   (which are.** c
44d0: 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51  ompiled using SQ
44e0: 4c 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23  LITE_TEST)..*/.#
44f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4500: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
4510: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
4520: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
4530: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
4540: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
4550: 54 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66  TE_OS_WIN).# def
4560: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ine SQLITE_NEED_
4570: 45 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23  ERR_NAME.#else.#
4580: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e   undef  SQLITE_N
4590: 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e  EED_ERR_NAME.#en
45a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54  dif../*.** SQLIT
45b0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
45c0: 5f 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63  _COMMENTS is inc
45d0: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53  ompatible with S
45e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
45f0: 49 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  IN.*/.#ifdef SQL
4600: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
4610: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4620: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
4630: 4f 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a  OMMENTS.#endif..
4640: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
4650: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
4660: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
4670: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
4680: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
4690: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
46a0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
46b0: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
46c0: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
46d0: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
46e0: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
46f0: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
4700: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
4710: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
4720: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
4730: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
4740: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
4750: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
4760: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
4770: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
4780: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
4790: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
47a0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
47b0: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
47c0: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
47d0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
47e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
47f0: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
4800: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
4810: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
4820: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
4830: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
4840: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
4850: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
4860: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
4870: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
4880: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
4890: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
48a0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
48b0: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
48c0: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
48d0: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
48e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
48f0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
4900: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
4910: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
4920: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
4930: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
4940: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65  ef.h>../*.** Use
4950: 20 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c   a macro to repl
4960: 61 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20  ace memcpy() if 
4970: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
4980: 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43  LITE_INLINE_MEMC
4990: 50 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  PY..** This allo
49a0: 77 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72  ws better measur
49b0: 65 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20  ements of where 
49c0: 6d 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64  memcpy() is used
49d0: 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a   when running.**
49e0: 20 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75   cachegrind.  Bu
49f0: 74 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72  t this macro ver
4a00: 73 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29  sion of memcpy()
4a10: 20 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f   is very slow so
4a20: 20 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f   it.** should no
4a30: 74 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f  t be used in pro
4a40: 64 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69  duction.  This i
4a50: 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  s a performance 
4a60: 6d 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68  measurement.** h
4a70: 61 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66  ack only..*/.#if
4a80: 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e  def SQLITE_INLIN
4a90: 45 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e  E_MEMCPY.# defin
4aa0: 65 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20  e memcpy(D,S,N) 
4ab0: 7b 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a  {char*xxd=(char*
4ac0: 29 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a  )(D);const char*
4ad0: 78 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a  xxs=(const char*
4ae0: 29 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20  )(S);\.         
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4b00: 6e 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65  nt xxn=(N);while
4b10: 28 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b  (xxn-->0)*(xxd++
4b20: 29 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e  )=*(xxs++);}.#en
4b30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  dif../*.** If co
4b40: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
4b50: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
4b60: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
4b70: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
4b80: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
4b90: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
4ba0: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
4bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
4bc0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
4bd0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
4be0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
4bf0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
4c00: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
4c10: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
4c20: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
4c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
4c40: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
4c50: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
4c60: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
4c70: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
4c80: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
4c90: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
4ca0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4cb0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
4cc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
4cd0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
4ce0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
4cf0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
4d00: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4d10: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
4d20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4d30: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
4d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
4d50: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
4d60: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
4d70: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
4d80: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
4d90: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
4da0: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
4db0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
4dc0: 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74   C compiler.** t
4dd0: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
4de0: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
4df0: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
4e00: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
4e10: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4e20: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
4e30: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
4e40: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
4e50: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
4e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
4e70: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
4e80: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
4e90: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
4ea0: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
4eb0: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
4ec0: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
4ed0: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
4ee0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4ef0: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
4f00: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
4f10: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
4f20: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
4f30: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
4f40: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
4f50: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
4f60: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
4f70: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
4f80: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
4f90: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
4fa0: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
4fb0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4fc0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
4fd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
4fe0: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
4ff0: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
5000: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
5010: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
5020: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
5030: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
5040: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
5050: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5060: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
5070: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
5080: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
5090: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
50a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
50b0: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
50c0: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
50d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
50e0: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
50f0: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
5100: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
5110: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5120: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
5130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
5140: 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a  _STORE 1.#endif.
5150: 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c  ./*.** If no val
5160: 75 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76  ue has been prov
5170: 69 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f  ided for SQLITE_
5180: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
5190: 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c  DS, or if.** SQL
51a0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
51b0: 73 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65  s set to 3 (neve
51c0: 72 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  r use temporary 
51d0: 66 69 6c 65 73 29 2c 20 73 65 74 20 69 74 0a 2a  files), set it.*
51e0: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
51f0: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
5200: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
5210: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
5220: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
5230: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5250: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
5260: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
5270: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5280: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5290: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
52a0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
52b0: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
52c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
52d0: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
52e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
52f0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5300: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
5310: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
5320: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5330: 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
5340: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
5350: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5360: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5370: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5380: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5390: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
53a0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
53b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
53c0: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
53d0: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
53e0: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
53f0: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
5400: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
5410: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
5420: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
5430: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
5440: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
5450: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
5460: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
5470: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
5480: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
5490: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
54a0: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
54b0: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
54c0: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
54d0: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
54e0: 2a 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  **.** The defaul
54f0: 74 20 76 61 6c 75 65 20 6f 66 20 22 32 30 22 20  t value of "20" 
5500: 77 61 73 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d  was choosen to m
5510: 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d  inimize the run-
5520: 74 69 6d 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73  time of the.** s
5530: 70 65 65 64 74 65 73 74 31 20 74 65 73 74 20 70  peedtest1 test p
5540: 72 6f 67 72 61 6d 20 77 69 74 68 20 6f 70 74 69  rogram with opti
5550: 6f 6e 73 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65  ons: --shrink-me
5560: 6d 6f 72 79 20 2d 2d 72 65 70 72 65 70 61 72 65  mory --reprepare
5570: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5580: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
5590: 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e  E_INITSZ.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 32  _PCACHE_INITSZ 2
55c0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
55d0: 54 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  The compile-time
55e0: 20 6f 70 74 69 6f 6e 73 20 53 51 4c 49 54 45 5f   options SQLITE_
55f0: 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45 20 61  MMAP_READWRITE a
5600: 6e 64 20 0a 2a 2a 20 53 51 4c 49 54 45 5f 45 4e  nd .** SQLITE_EN
5610: 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d 49  ABLE_BATCH_ATOMI
5620: 43 5f 57 52 49 54 45 20 61 72 65 20 6e 6f 74 20  C_WRITE are not 
5630: 63 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20  compatible with 
5640: 6f 6e 65 20 61 6e 6f 74 68 65 72 2e 0a 2a 2a 20  one another..** 
5650: 59 6f 75 20 6d 75 73 74 20 63 68 6f 6f 73 65 20  You must choose 
5660: 6f 6e 65 20 6f 72 20 74 68 65 20 6f 74 68 65 72  one or the other
5670: 20 28 6f 72 20 6e 65 69 74 68 65 72 29 20 62 75   (or neither) bu
5680: 74 20 6e 6f 74 20 62 6f 74 68 2e 0a 2a 2f 0a 23  t not both..*/.#
5690: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
56a0: 45 5f 4d 4d 41 50 5f 52 45 41 44 57 52 49 54 45  E_MMAP_READWRITE
56b0: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
56c0: 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41 54 43 48  ITE_ENABLE_BATCH
56d0: 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45 29 0a 23  _ATOMIC_WRITE).#
56e0: 65 72 72 6f 72 20 43 61 6e 6e 6f 74 20 75 73 65  error Cannot use
56f0: 20 62 6f 74 68 20 53 51 4c 49 54 45 5f 4d 4d 41   both SQLITE_MMA
5700: 50 5f 52 45 41 44 57 52 49 54 45 20 61 6e 64 20  P_READWRITE and 
5710: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 42 41  SQLITE_ENABLE_BA
5720: 54 43 48 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  TCH_ATOMIC_WRITE
5730: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47  .#endif../*.** G
5740: 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69  CC does not defi
5750: 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28  ne the offsetof(
5760: 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c  ) macro so we'll
5770: 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a   have to do it.*
5780: 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a  * ourselves..*/.
5790: 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66  #ifndef offsetof
57a0: 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f  .#define offseto
57b0: 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c  f(STRUCTURE,FIEL
57c0: 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a  D) ((int)((char*
57d0: 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29 30  )&((STRUCTURE*)0
57e0: 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69  )->FIELD)).#endi
57f0: 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20  f../*.** Macros 
5800: 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d  to compute minim
5810: 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f  um and maximum o
5820: 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a  f two numbers..*
5830: 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23 20  /.#ifndef MIN.# 
5840: 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20  define MIN(A,B) 
5850: 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29  ((A)<(B)?(A):(B)
5860: 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  ).#endif.#ifndef
5870: 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d 41   MAX.# define MA
5880: 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f  X(A,B) ((A)>(B)?
5890: 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a  (A):(B)).#endif.
58a0: 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20  ./*.** Swap two 
58b0: 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20  objects of type 
58c0: 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  TYPE..*/.#define
58d0: 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20   SWAP(TYPE,A,B) 
58e0: 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20  {TYPE t=A; A=B; 
58f0: 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65  B=t;}../*.** Che
5900: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 69  ck to see if thi
5910: 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45  s machine uses E
5920: 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65  BCDIC.  (Yes, be
5930: 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e  lieve it or.** n
5940: 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73 74  ot, there are st
5950: 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74  ill machines out
5960: 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65 20   there that use 
5970: 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20  EBCDIC.).*/.#if 
5980: 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20  'A' == '\301'.# 
5990: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42  define SQLITE_EB
59a0: 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64  CDIC 1.#else.# d
59b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43  efine SQLITE_ASC
59c0: 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  II 1.#endif../*.
59d0: 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b  ** Integers of k
59e0: 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65  nown sizes.  The
59f0: 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67 68  se typedefs migh
5a00: 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63  t change for arc
5a10: 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68  hitectures.** wh
5a20: 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76 65  ere the sizes ve
5a30: 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f  ry.  Preprocesso
5a40: 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61  r macros are ava
5a50: 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74  ilable so that t
5a60: 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20  he.** types can 
5a70: 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20  be conveniently 
5a80: 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d  redefined at com
5a90: 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65  pile-type.  Like
5aa0: 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20   this:.**.**    
5ab0: 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50       cc '-DUINTP
5ac0: 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e  TR_TYPE=long lon
5ad0: 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69  g int' ....*/.#i
5ae0: 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50  fndef UINT32_TYP
5af0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
5b00: 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e  INT32_T.#  defin
5b10: 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69  e UINT32_TYPE ui
5b20: 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt32_t.# else.# 
5b30: 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54   define UINT32_T
5b40: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  YPE unsigned int
5b50: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5b60: 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54  #ifndef UINT16_T
5b70: 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45  YPE.# ifdef HAVE
5b80: 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66  _UINT16_T.#  def
5b90: 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20  ine UINT16_TYPE 
5ba0: 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a  uint16_t.# else.
5bb0: 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36  #  define UINT16
5bc0: 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73  _TYPE unsigned s
5bd0: 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66  hort int.# endif
5be0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5bf0: 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64  INT16_TYPE.# ifd
5c00: 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a  ef HAVE_INT16_T.
5c10: 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f  #  define INT16_
5c20: 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65  TYPE int16_t.# e
5c30: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  lse.#  define IN
5c40: 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69  T16_TYPE short i
5c50: 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  nt.# endif.#endi
5c60: 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f  f.#ifndef UINT8_
5c70: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
5c80: 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66  E_UINT8_T.#  def
5c90: 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75  ine UINT8_TYPE u
5ca0: 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20  int8_t.# else.# 
5cb0: 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59   define UINT8_TY
5cc0: 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  PE unsigned char
5cd0: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5ce0: 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50  #ifndef INT8_TYP
5cf0: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 49  E.# ifdef HAVE_I
5d00: 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  NT8_T.#  define 
5d10: 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74  INT8_TYPE int8_t
5d20: 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e  .# else.#  defin
5d30: 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e  e INT8_TYPE sign
5d40: 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a  ed char.# endif.
5d50: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c  #endif.#ifndef L
5d60: 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23  ONGDOUBLE_TYPE.#
5d70: 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42   define LONGDOUB
5d80: 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75  LE_TYPE long dou
5d90: 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64  ble.#endif.typed
5da0: 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20  ef sqlite_int64 
5db0: 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  i64;          /*
5dc0: 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   8-byte signed i
5dd0: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
5de0: 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20  f sqlite_uint64 
5df0: 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  u64;         /* 
5e00: 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  8-byte unsigned 
5e10: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5e20: 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ef UINT32_TYPE u
5e30: 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  32;           /*
5e40: 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   4-byte unsigned
5e50: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5e60: 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20  def UINT16_TYPE 
5e70: 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u16;           /
5e80: 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 2-byte unsigne
5e90: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5ea0: 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20  edef INT16_TYPE 
5eb0: 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20 20  i16;            
5ec0: 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 2-byte signed
5ed0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5ee0: 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75  def UINT8_TYPE u
5ef0: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  8;             /
5f00: 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 1-byte unsigne
5f10: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5f20: 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69  edef INT8_TYPE i
5f30: 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  8;              
5f40: 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64  /* 1-byte signed
5f50: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a   integer */../*.
5f60: 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ** SQLITE_MAX_U3
5f70: 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74  2 is a u64 const
5f80: 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65 20  ant that is the 
5f90: 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75  maximum u64 valu
5fa0: 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65  e.** that can be
5fb0: 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32   stored in a u32
5fc0: 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66   without loss of
5fd0: 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75   data.  The valu
5fe0: 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30  e.** is 0x000000
5ff0: 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75 74  00ffffffff.  But
6000: 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69 72   because of quir
6010: 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69  ks of some compi
6020: 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65  lers, we.** have
6030: 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65 20   to specify the 
6040: 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73  value in the les
6050: 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e  s intuitive mann
6060: 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65  er shown:.*/.#de
6070: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
6080: 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29 3c  U32  ((((u64)1)<
6090: 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54  <32)-1)../*.** T
60a0: 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65 64  he datatype used
60b0: 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61   to store estima
60c0: 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65  tes of the numbe
60d0: 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a  r of rows in a.*
60e0: 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78  * table or index
60f0: 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e  .  This is an un
6100: 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74  signed integer t
6110: 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20  ype.  For 99.9% 
6120: 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c  of.** the world,
6130: 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65   a 32-bit intege
6140: 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e  r is sufficient.
6150: 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20 69    But a 64-bit i
6160: 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65  nteger.** can be
6170: 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65   used at compile
6180: 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65 64  -time if desired
6190: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
61a0: 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20  TE_64BIT_STATS. 
61b0: 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f 77  typedef u64 tRow
61c0: 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69  cnt;    /* 64-bi
61d0: 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73  t only if reques
61e0: 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  ted at compile-t
61f0: 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79  ime */.#else. ty
6200: 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e  pedef u32 tRowcn
6210: 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20  t;    /* 32-bit 
6220: 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a  is the default *
6230: 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  /.#endif../*.** 
6240: 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69  Estimated quanti
6250: 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71 75  ties used for qu
6260: 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65  ery planning are
6270: 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69   stored as 16-bi
6280: 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e  t.** logarithms.
6290: 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58    For quantity X
62a0: 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72  , the value stor
62b0: 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29  ed is 10*log2(X)
62c0: 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73  .  This.** gives
62d0: 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67   a possible rang
62e0: 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61  e of values of a
62f0: 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30  pproximately 1.0
6300: 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a  e986 to 1e-986..
6310: 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77  ** But the allow
6320: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22 67  ed values are "g
6330: 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65  rainy".  Not eve
6340: 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70 72  ry value is repr
6350: 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f  esentable..** Fo
6360: 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74  r example, quant
6370: 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37 20  ities 16 and 17 
6380: 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73 65  are both represe
6390: 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74  nted by a LogEst
63a0: 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65  .** of 40.  Howe
63b0: 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73  ver, since LogEs
63c0: 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72 65  t quantities are
63d0: 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65   suppose to be e
63e0: 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74  stimates,.** not
63f0: 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74   exact values, t
6400: 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20  his imprecision 
6410: 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d  is not a problem
6420: 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22  ..**.** "LogEst"
6430: 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c   is short for "L
6440: 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d  ogarithmic Estim
6450: 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d  ate"..**.** Exam
6460: 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20  ples:.**      1 
6470: 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20 20  -> 0            
6480: 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20    20 -> 43      
6490: 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32      10000 -> 132
64a0: 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30  .**      2 -> 10
64b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 20               25 
64c0: 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20 32  -> 46          2
64d0: 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20  5000 -> 146.**  
64e0: 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20      3 -> 16     
64f0: 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36         100 -> 66
6500: 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30 20          1000000 
6510: 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34  -> 199.**      4
6520: 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20 20   -> 20          
6530: 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20   1000 -> 99     
6540: 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30     1048576 -> 20
6550: 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33  0.**     10 -> 3
6560: 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32 34  3           1024
6570: 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34 39   -> 100    42949
6580: 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a  67296 -> 320.**.
6590: 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61  ** The LogEst ca
65a0: 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f  n be negative to
65b0: 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74 69   indicate fracti
65c0: 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a 20  onal values..** 
65d0: 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20  Examples:.**.** 
65e0: 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20     0.5 -> -10   
65f0: 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d          0.1 -> -
6600: 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32 35  33        0.0625
6610: 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64   -> -40.*/.typed
6620: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f  ef INT16_TYPE Lo
6630: 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  gEst;../*.** Set
6640: 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52 53   the SQLITE_PTRS
6650: 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68 65  IZE macro to the
6660: 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73   number of bytes
6670: 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f   in a pointer.*/
6680: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
6690: 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65 66  PTRSIZE.# if def
66a0: 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f  ined(__SIZEOF_PO
66b0: 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65 66  INTER__).#   def
66c0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49  ine SQLITE_PTRSI
66d0: 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e  ZE __SIZEOF_POIN
66e0: 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65 66  TER__.# elif def
66f0: 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20 7c  ined(i386)     |
6700: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36  | defined(__i386
6710: 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  __)   || defined
6720: 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20  (_M_IX86) ||    
6730: 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65 64  \.       defined
6740: 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64 65  (_M_ARM)   || de
6750: 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 20  fined(__arm__)  
6760: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78    || defined(__x
6770: 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  86).#   define S
6780: 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a  QLITE_PTRSIZE 4.
6790: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
67a0: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
67b0: 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69   8.# endif.#endi
67c0: 66 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74  f../* The uptr t
67d0: 79 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e  ype is an unsign
67e0: 65 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65  ed integer large
67f0: 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20   enough to hold 
6800: 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66  a pointer.*/.#if
6810: 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54   defined(HAVE_ST
6820: 44 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65  DINT_H).  typede
6830: 66 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72  f uintptr_t uptr
6840: 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50  ;.#elif SQLITE_P
6850: 54 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65  TRSIZE==4.  type
6860: 64 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65  def u32 uptr;.#e
6870: 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 36  lse.  typedef u6
6880: 34 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a  4 uptr;.#endif..
6890: 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
68a0: 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d  _WITHIN(P,S,E) m
68b0: 61 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73  acro checks to s
68c0: 65 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20  ee if pointer P 
68d0: 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d  points to.** som
68e0: 65 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53  ething between S
68f0: 20 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64   (inclusive) and
6900: 20 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a   E (exclusive)..
6910: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
6920: 6f 72 64 73 2c 20 53 20 69 73 20 61 20 62 75 66  ords, S is a buf
6930: 66 65 72 20 61 6e 64 20 45 20 69 73 20 61 20 70  fer and E is a p
6940: 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69  ointer to the fi
6950: 72 73 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a  rst byte after.*
6960: 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66  * the end of buf
6970: 66 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63  fer S.  This mac
6980: 72 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65 20  ro returns true 
6990: 69 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73  if P points to s
69a0: 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74  omething.** cont
69b0: 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65  ained within the
69c0: 20 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64   buffer S..*/.#d
69d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54  efine SQLITE_WIT
69e0: 48 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70  HIN(P,S,E) (((up
69f0: 74 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53  tr)(P)>=(uptr)(S
6a00: 29 29 26 26 28 28 75 70 74 72 29 28 50 29 3c 28  ))&&((uptr)(P)<(
6a10: 75 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a  uptr)(E))).../*.
6a20: 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
6a30: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
6a40: 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69  he machine is bi
6a50: 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69  g or little endi
6a60: 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68  an,.** and wheth
6a70: 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64  er or not that d
6a80: 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20  etermination is 
6a90: 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70  run-time or comp
6aa0: 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20  ile-time..**.** 
6ab0: 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d  For best perform
6ac0: 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74  ance, an attempt
6ad0: 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73   is made to gues
6ae0: 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72  s at the byte-or
6af0: 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70  der.** using C-p
6b00: 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72  reprocessor macr
6b10: 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73 20  os.  If that is 
6b20: 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72  unsuccessful, or
6b30: 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f   if.** -DSQLITE_
6b40: 42 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20 73  BYTEORDER=0 is s
6b50: 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f 72  et, then byte-or
6b60: 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e 65  der is determine
6b70: 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d 65  d.** at run-time
6b80: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
6b90: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23 20  ITE_BYTEORDER.# 
6ba0: 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36 29  if defined(i386)
6bb0: 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28       || defined(
6bc0: 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64  __i386__)   || d
6bd0: 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20  efined(_M_IX86) 
6be0: 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65 66  ||    \.     def
6bf0: 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c  ined(__x86_64) |
6c00: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f  | defined(__x86_
6c10: 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  64__) || defined
6c20: 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20 20  (_M_X64)  ||    
6c30: 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f  \.     defined(_
6c40: 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66 69  M_AMD64) || defi
6c50: 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20  ned(_M_ARM)     
6c60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
6c70: 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20  )   ||    \.    
6c80: 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f   defined(__arm__
6c90: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
6ca0: 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20  ITE_BYTEORDER   
6cb0: 20 31 32 33 34 0a 23 20 65 6c 69 66 20 64 65 66   1234.# elif def
6cc0: 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20 7c  ined(sparc)    |
6cd0: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63 5f  | defined(__ppc_
6ce0: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
6cf0: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
6d00: 20 20 34 33 32 31 0a 23 20 65 6c 73 65 0a 23 20    4321.# else.# 
6d10: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
6d20: 42 59 54 45 4f 52 44 45 52 20 30 0a 23 20 65 6e  BYTEORDER 0.# en
6d30: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 53  dif.#endif.#if S
6d40: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 3d  QLITE_BYTEORDER=
6d50: 3d 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53  =4321.# define S
6d60: 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20  QLITE_BIGENDIAN 
6d70: 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51     1.# define SQ
6d80: 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41  LITE_LITTLEENDIA
6d90: 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  N 0.# define SQL
6da0: 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
6db0: 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a   SQLITE_UTF16BE.
6dc0: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 42 59 54  #elif SQLITE_BYT
6dd0: 45 4f 52 44 45 52 3d 3d 31 32 33 34 0a 23 20 64  EORDER==1234.# d
6de0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49 47  efine SQLITE_BIG
6df0: 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64 65  ENDIAN    0.# de
6e00: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
6e10: 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65 66  LEENDIAN 1.# def
6e20: 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31 36  ine SQLITE_UTF16
6e30: 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f 55  NATIVE  SQLITE_U
6e40: 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20 69  TF16LE.#else.# i
6e50: 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c  fdef SQLITE_AMAL
6e60: 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73 74  GAMATION.  const
6e70: 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65 20   int sqlite3one 
6e80: 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65 78  = 1;.# else.  ex
6e90: 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20 73  tern const int s
6ea0: 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e 64  qlite3one;.# end
6eb0: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
6ec0: 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20 20  TE_BIGENDIAN    
6ed0: 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c 69  (*(char *)(&sqli
6ee0: 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64 65  te3one)==0).# de
6ef0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54 54  fine SQLITE_LITT
6f00: 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61 72  LEENDIAN (*(char
6f10: 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65 29   *)(&sqlite3one)
6f20: 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53 51  ==1).# define SQ
6f30: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
6f40: 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e 44    (SQLITE_BIGEND
6f50: 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31 36  IAN?SQLITE_UTF16
6f60: 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  BE:SQLITE_UTF16L
6f70: 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  E).#endif../*.**
6f80: 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 74   Constants for t
6f90: 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20 73  he largest and s
6fa0: 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c 65  mallest possible
6fb0: 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20 69   64-bit signed i
6fc0: 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65 73  ntegers..** Thes
6fd0: 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65 73  e macros are des
6fe0: 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63 6f  igned to work co
6ff0: 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68 20  rrectly on both 
7000: 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62 69  32-bit and 64-bi
7010: 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e 0a  t.** compilers..
7020: 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47 45  */.#define LARGE
7030: 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66 66  ST_INT64  (0xfff
7040: 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78 37  fffff|(((i64)0x7
7050: 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a 23  fffffff)<<32)).#
7060: 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54 5f  define SMALLEST_
7070: 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31 29  INT64 (((i64)-1)
7080: 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36 34   - LARGEST_INT64
7090: 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20 75  )../*.** Round u
70a0: 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74 68  p a number to th
70b0: 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d 75  e next larger mu
70c0: 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54 68  ltiple of 8.  Th
70d0: 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74 6f  is is used.** to
70e0: 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61 6c   force 8-byte al
70f0: 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62 69  ignment on 64-bi
7100: 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73 2e  t architectures.
7110: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55 4e  .*/.#define ROUN
7120: 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29 2b  D8(x)     (((x)+
7130: 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f  7)&~7)../*.** Ro
7140: 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65 20  und down to the 
7150: 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c 65  nearest multiple
7160: 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e 65   of 8.*/.#define
7170: 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20 28   ROUNDDOWN8(x) (
7180: 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 41  (x)&~7)../*.** A
7190: 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20 70  ssert that the p
71a0: 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69 67  ointer X is alig
71b0: 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74 65  ned to an 8-byte
71c0: 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69 73   boundary.  This
71d0: 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73 65  .** macro is use
71e0: 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61 73  d only within as
71f0: 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66 79  sert() to verify
7200: 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20 67   that the code g
7210: 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67 6e  ets.** all align
7220: 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f 6e  ment restriction
7230: 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a 2a  s correct..**.**
7240: 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c 49   Except, if SQLI
7250: 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45  TE_4_BYTE_ALIGNE
7260: 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66 69  D_MALLOC is defi
7270: 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a 2a  ned, then the.**
7280: 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c 6c   underlying mall
7290: 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61 74  oc() implementat
72a0: 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72 6e  ion might return
72b0: 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67 6e   us 4-byte align
72c0: 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e 20  ed.** pointers. 
72d0: 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 6f   In that case, o
72e0: 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79 74  nly verify 4-byt
72f0: 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f 0a  e alignment..*/.
7300: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34 5f  #ifdef SQLITE_4_
7310: 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41 4c  BYTE_ALIGNED_MAL
7320: 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49 47  LOC.# define EIG
7330: 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45 4e  HT_BYTE_ALIGNMEN
7340: 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72 2a  T(X)   ((((char*
7350: 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30 29  )(X) - (char*)0)
7360: 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20  &3)==0).#else.# 
7370: 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59 54  define EIGHT_BYT
7380: 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20 20  E_ALIGNMENT(X)  
7390: 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20 2d   ((((char*)(X) -
73a0: 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d 30   (char*)0)&7)==0
73b0: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
73c0: 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e 20  Disable MMAP on 
73d0: 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65 20  platforms where 
73e0: 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20 6e  it is known to n
73f0: 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20 64  ot work.*/.#if d
7400: 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53 44  efined(__OpenBSD
7410: 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  __) || defined(_
7420: 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e 64  _QNXNTO__).# und
7430: 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ef SQLITE_MAX_MM
7440: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
7450: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
7460: 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a 0a  _SIZE 0.#endif..
7470: 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d 61  /*.** Default ma
7480: 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d 65  ximum size of me
7490: 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65 6d  mory used by mem
74a0: 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20 69  ory-mapped I/O i
74b0: 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69 66  n the VFS.*/.#if
74c0: 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23 20  def __APPLE__.# 
74d0: 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74 43  include <TargetC
74e0: 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a 23  onditionals.h>.#
74f0: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
7500: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
7510: 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  ZE.# if defined(
7520: 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20 7c  __linux__) \.  |
7530: 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33 32  | defined(_WIN32
7540: 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e 65  ) \.  || (define
7550: 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26 20  d(__APPLE__) && 
7560: 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f 5f  defined(__MACH__
7570: 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e 65  )) \.  || define
7580: 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c 20  d(__sun) \.  || 
7590: 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42 53  defined(__FreeBS
75a0: 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  D__) \.  || defi
75b0: 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79 5f  ned(__DragonFly_
75c0: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
75d0: 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49  LITE_MAX_MMAP_SI
75e0: 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20 2f  ZE 0x7fff0000  /
75f0: 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f 0a  * 2147418112 */.
7600: 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e  # else.#   defin
7610: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
7620: 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69 66  P_SIZE 0.# endif
7630: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
7640: 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  he default MMAP_
7650: 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20  SIZE is zero on 
7660: 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20  all platforms.  
7670: 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61  Or, even if a la
7680: 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20  rger.** default 
7690: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65  MMAP_SIZE is spe
76a0: 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c  cified at compil
76b0: 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  e-time, make sur
76c0: 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a  e that it does.*
76d0: 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65  * not exceed the
76e0: 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69   maximum mmap si
76f0: 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ze..*/.#ifndef S
7700: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
7710: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
7720: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
7730: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64  MMAP_SIZE 0.#end
7740: 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45  if.#if SQLITE_DE
7750: 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 3e  FAULT_MMAP_SIZE>
7760: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
7770: 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51 4c  SIZE.# undef SQL
7780: 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50  ITE_DEFAULT_MMAP
7790: 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20 53  _SIZE.# define S
77a0: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
77b0: 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f 4d  AP_SIZE SQLITE_M
77c0: 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65 6e  AX_MMAP_SIZE.#en
77d0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79 20  dif../*.** Only 
77e0: 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45 4e  one of SQLITE_EN
77f0: 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53 51  ABLE_STAT3 or SQ
7800: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7810: 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65 64  4 can be defined
7820: 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69 73  ..** Priority is
7830: 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54 45   given to SQLITE
7840: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20 20  _ENABLE_STAT4.  
7850: 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64 65  If either are de
7860: 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20 64  fined, also.** d
7870: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
7880: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
7890: 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  T4.*/.#ifdef SQL
78a0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
78b0: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
78c0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20 64  ENABLE_STAT3.# d
78d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e 41  efine SQLITE_ENA
78e0: 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41  BLE_STAT3_OR_STA
78f0: 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49 54  T4 1.#elif SQLIT
7900: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23  E_ENABLE_STAT3.#
7910: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
7920: 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53  NABLE_STAT3_OR_S
7930: 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c  TAT4 1.#elif SQL
7940: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
7950: 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64 65  _OR_STAT4.# unde
7960: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7970: 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23  STAT3_OR_STAT4.#
7980: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45 4c  endif../*.** SEL
7990: 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
79a0: 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72 20   will be either 
79b0: 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e 67  1 or 0 depending
79c0: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e   on whether or n
79d0: 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63 74  ot.** the Select
79e0: 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f 72   query generator
79f0: 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20 69   tracing logic i
7a00: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
7a10: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
7a20: 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66  TE_DEBUG) || def
7a30: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
7a40: 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29 0a  LE_SELECTTRACE).
7a50: 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54 54  # define SELECTT
7a60: 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a 23  RACE_ENABLED 1.#
7a70: 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53 45  else.# define SE
7a80: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7a90: 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  D 0.#endif../*.*
7aa0: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
7ab0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
7ac0: 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
7ad0: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62 75   to store the bu
7ae0: 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61  sy-handler.** ca
7af0: 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69 76  llback for a giv
7b00: 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c 65  en sqlite handle
7b10: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c 69  ..**.** The sqli
7b20: 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20 6d  te.busyHandler m
7b30: 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71 6c  ember of the sql
7b40: 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74 61  ite struct conta
7b50: 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a 20  ins the busy.** 
7b60: 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68 65  callback for the
7b70: 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
7b80: 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70 65  . Each pager ope
7b90: 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c 69  ned via the sqli
7ba0: 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73 20  te.** handle is 
7bb0: 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65 72  passed a pointer
7bc0: 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79 48   to sqlite.busyH
7bd0: 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73 79  andler. The busy
7be0: 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c 6c  -handler.** call
7bf0: 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74 6c  back is currentl
7c00: 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20 66  y invoked only f
7c10: 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65 72  rom within pager
7c20: 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73  .c..*/.typedef s
7c30: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7c40: 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a 73  r BusyHandler;.s
7c50: 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c 65  truct BusyHandle
7c60: 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75 6e  r {.  int (*xFun
7c70: 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b 20  c)(void *,int); 
7c80: 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61 6c   /* The busy cal
7c90: 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  lback */.  void 
7ca0: 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  *pArg;          
7cb0: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
7cc0: 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c 62  rg to busy callb
7cd0: 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42 75  ack */.  int nBu
7ce0: 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  sy;             
7cf0: 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e 74      /* Increment
7d00: 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75 73  ed with each bus
7d10: 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  y call */.};../*
7d20: 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20  .** Name of the 
7d30: 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20  master database 
7d40: 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73 74  table.  The mast
7d50: 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62 6c  er database tabl
7d60: 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69 61  e.** is a specia
7d70: 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f 6c  l table that hol
7d80: 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e 64  ds the names and
7d90: 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20 61   attributes of a
7da0: 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c 65  ll.** user table
7db0: 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a 2a  s and indices..*
7dc0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
7dd0: 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71 6c  _NAME       "sql
7de0: 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65 66  ite_master".#def
7df0: 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52 5f  ine TEMP_MASTER_
7e00: 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74 65  NAME  "sqlite_te
7e10: 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a 2a  mp_master"../*.*
7e20: 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65 20  * The root-page 
7e30: 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64 61  of the master da
7e40: 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a 2f  tabase table..*/
7e50: 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52 5f  .#define MASTER_
7e60: 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f 2a  ROOT       1../*
7e70: 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  .** The name of 
7e80: 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65  the schema table
7e90: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48  ..*/.#define SCH
7ea0: 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28 28  EMA_TABLE(x)  ((
7eb0: 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26 28  !OMIT_TEMPDB)&&(
7ec0: 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54 45  x==1)?TEMP_MASTE
7ed0: 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e 41  R_NAME:MASTER_NA
7ee0: 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f 6e  ME)../*.** A con
7ef0: 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20 74  venience macro t
7f00: 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65 20  hat returns the 
7f10: 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65 6e  number of elemen
7f20: 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72 61  ts in.** an arra
7f30: 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41 72  y..*/.#define Ar
7f40: 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28 28  raySize(X)    ((
7f50: 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f 73  int)(sizeof(X)/s
7f60: 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a 2f  izeof(X[0])))../
7f70: 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20 69  *.** Determine i
7f80: 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20 69  f the argument i
7f90: 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77 6f  s a power of two
7fa0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 6f  .*/.#define IsPo
7fb0: 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28 58  werOfTwo(X) (((X
7fc0: 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a 0a  )&((X)-1))==0)..
7fd0: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
7fe0: 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20 64  ing value as a d
7ff0: 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73 20  estructor means 
8000: 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44 62  to use sqlite3Db
8010: 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20 73  Free()..** The s
8020: 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 72  qlite3DbFree() r
8030: 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73 20  outine requires 
8040: 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20 69  two parameters i
8050: 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a 2a  nstead of the.**
8060: 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20 74   one parameter t
8070: 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73 20  hat destructors 
8080: 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20 20  normally want.  
8090: 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69 6e  So we have to in
80a0: 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73 20  troduce.** this 
80b0: 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61 74  magic value that
80c0: 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73 20   the code knows 
80d0: 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65 72  to handle differ
80e0: 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20 70  ently.  Any.** p
80f0: 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72 6b  ointer will work
8100: 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61 73   here as long as
8110: 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74 20   it is distinct 
8120: 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41 54  from SQLITE_STAT
8130: 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54 45  IC.** and SQLITE
8140: 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a 23  _TRANSIENT..*/.#
8150: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 59  define SQLITE_DY
8160: 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74 65  NAMIC   ((sqlite
8170: 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79 70  3_destructor_typ
8180: 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53  e)sqlite3MallocS
8190: 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65 6e  ize)../*.** When
81a0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
81b0: 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74 20   is defined, it 
81c0: 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20 74  means that the t
81d0: 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20 64  arget platform d
81e0: 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70 6f  oes.** not suppo
81f0: 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61 74  rt Writable Stat
8200: 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73 75  ic Data (WSD) su
8210: 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e 64  ch as global and
8220: 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   static variable
8230: 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61 62  s..** All variab
8240: 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72 20  les must either 
8250: 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b 20  be on the stack 
8260: 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20 61  or dynamically a
8270: 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a 2a  llocated from.**
8280: 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65 6e   the heap.  When
8290: 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f 72   WSD is unsuppor
82a0: 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62 6c  ted, the variabl
82b0: 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 73  e declarations s
82c0: 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72 6f  cattered.** thro
82d0: 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69 74  ughout the SQLit
82e0: 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63 6f  e code must beco
82f0: 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e 73  me constants ins
8300: 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49 54  tead.  The SQLIT
8310: 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20 69  E_WSD.** macro i
8320: 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 20  s used for this 
8330: 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69 6e  purpose.  And in
8340: 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65 6e  stead of referen
8350: 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62 6c  cing the variabl
8360: 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20 77  e.** directly, w
8370: 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74 61  e use its consta
8380: 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20 6c  nt as a key to l
8390: 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74 69  ookup the run-ti
83a0: 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20  me allocated.** 
83b0: 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c 64  buffer that hold
83c0: 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65 2e  s real variable.
83d0: 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20 69    The constant i
83e0: 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74 69  s also the initi
83f0: 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74 68  alizer.** for th
8400: 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f 63  e run-time alloc
8410: 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a 0a  ated buffer..**.
8420: 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c 20  ** In the usual 
8430: 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20 69  case where WSD i
8440: 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68 65  s supported, the
8450: 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64 20   SQLITE_WSD and 
8460: 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f 73  GLOBAL.** macros
8470: 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20 61   become no-ops a
8480: 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65 72  nd have zero per
8490: 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74 2e  formance impact.
84a0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
84b0: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64 65  E_OMIT_WSD.  #de
84c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44 20  fine SQLITE_WSD 
84d0: 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65 20  const.  #define 
84e0: 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28 74  GLOBAL(t,v) (*(t
84f0: 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66 69  *)sqlite3_wsd_fi
8500: 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c 20  nd((void*)&(v), 
8510: 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23 64  sizeof(v))).  #d
8520: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
8530: 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41 4c  balConfig GLOBAL
8540: 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  (struct Sqlite3C
8550: 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43 6f  onfig, sqlite3Co
8560: 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c 69  nfig).  int sqli
8570: 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e 74  te3_wsd_init(int
8580: 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76 6f   N, int J);.  vo
8590: 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64 5f  id *sqlite3_wsd_
85a0: 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69 6e  find(void *K, in
85b0: 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64  t L);.#else.  #d
85c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
85d0: 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42 41  .  #define GLOBA
85e0: 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66 69  L(t,v) v.  #defi
85f0: 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c  ne sqlite3Global
8600: 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43 6f  Config sqlite3Co
8610: 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  nfig.#endif../*.
8620: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
8630: 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64   macros are used
8640: 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f 6d   to suppress com
8650: 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20 61  piler warnings a
8660: 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69 74  nd to.** make it
8670: 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e 20   clear to human 
8680: 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20 66  readers when a f
8690: 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74 65  unction paramete
86a0: 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65 6c  r is deliberatel
86b0: 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65 64  y.** left unused
86c0: 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64 79   within the body
86d0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e 20   of a function. 
86e0: 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61 70  This usually hap
86f0: 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20 66  pens when.** a f
8700: 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c 65  unction is calle
8710: 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f 6e  d via a function
8720: 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65 78   pointer. For ex
8730: 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d 70  ample the.** imp
8740: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61  lementation of a
8750: 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65 20  n SQL aggregate 
8760: 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d 61  step callback ma
8770: 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a 2a  y not use the.**
8780: 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69 63   parameter indic
8790: 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65 72  ating the number
87a0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70 61   of arguments pa
87b0: 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67 72  ssed to the aggr
87c0: 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74 20  egate,.** if it 
87d0: 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73 20  knows that this 
87e0: 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73 65  is enforced else
87f0: 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65  where..**.** Whe
8800: 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72  n a function par
8810: 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73  ameter is not us
8820: 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69 6e  ed at all within
8830: 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 66   the body of a f
8840: 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20 69  unction,.** it i
8850: 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d 65  s generally name
8860: 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20 22  d "NotUsed" or "
8870: 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61 6b  NotUsed2" to mak
8880: 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63 6c  e things even cl
8890: 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76 65  earer..** Howeve
88a0: 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73 20  r, these macros 
88b0: 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65 64  may also be used
88c0: 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61 72   to suppress war
88d0: 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74 6f  nings related to
88e0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20 74  .** parameters t
88f0: 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20 6e  hat may or may n
8900: 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65 6e  ot be used depen
8910: 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61 74  ding on compilat
8920: 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a 20  ion options..** 
8930: 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f 73  For example thos
8940: 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e 6c  e parameters onl
8950: 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72 74  y used in assert
8960: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20 49  () statements. I
8970: 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65 73  n these.** cases
8980: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
8990: 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65 72  are named as per
89a0: 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76 65   the usual conve
89b0: 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ntions..*/.#defi
89c0: 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  ne UNUSED_PARAME
89d0: 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78 29  TER(x) (void)(x)
89e0: 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44 5f  .#define UNUSED_
89f0: 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29 20  PARAMETER2(x,y) 
8a00: 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45 52  UNUSED_PARAMETER
8a10: 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41 4d  (x),UNUSED_PARAM
8a20: 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20 46  ETER(y)../*.** F
8a30: 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63 65  orward reference
8a40: 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73 0a  s to structures.
8a50: 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  */.typedef struc
8a60: 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e 66  t AggInfo AggInf
8a70: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8a80: 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41 75  t AuthContext Au
8a90: 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  thContext;.typed
8aa0: 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69 6e  ef struct Autoin
8ab0: 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e 66  cInfo AutoincInf
8ac0: 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  o;.typedef struc
8ad0: 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63 3b  t Bitvec Bitvec;
8ae0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8af0: 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71 3b  CollSeq CollSeq;
8b00: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8b10: 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a 74  Column Column;.t
8b20: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
8b30: 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74 72   Db;.typedef str
8b40: 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65 6d  uct Schema Schem
8b50: 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  a;.typedef struc
8b60: 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79 70  t Expr Expr;.typ
8b70: 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70 72  edef struct Expr
8b80: 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a 74  List ExprList;.t
8b90: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78  ypedef struct Ex
8ba0: 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e 3b  prSpan ExprSpan;
8bb0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8bc0: 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65 64  FKey FKey;.typed
8bd0: 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65  ef struct FuncDe
8be0: 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65 73  structor FuncDes
8bf0: 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65 66  tructor;.typedef
8c00: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 20   struct FuncDef 
8c10: 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65 66  FuncDef;.typedef
8c20: 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48   struct FuncDefH
8c30: 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68 3b  ash FuncDefHash;
8c40: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8c50: 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a 74  IdList IdList;.t
8c60: 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e  ypedef struct In
8c70: 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65 64  dex Index;.typed
8c80: 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78 53  ef struct IndexS
8c90: 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70 6c  ample IndexSampl
8ca0: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8cb0: 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43 6c  t KeyClass KeyCl
8cc0: 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ass;.typedef str
8cd0: 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79 49  uct KeyInfo KeyI
8ce0: 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72  nfo;.typedef str
8cf0: 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c 6f  uct Lookaside Lo
8d00: 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65 66  okaside;.typedef
8d10: 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64   struct Lookasid
8d20: 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65 53  eSlot LookasideS
8d30: 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74 72  lot;.typedef str
8d40: 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75 6c  uct Module Modul
8d50: 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  e;.typedef struc
8d60: 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e 61  t NameContext Na
8d70: 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65 64  meContext;.typed
8d80: 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65 20  ef struct Parse 
8d90: 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20 73  Parse;.typedef s
8da0: 74 72 75 63 74 20 50 72 65 55 70 64 61 74 65 20  truct PreUpdate 
8db0: 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70 65 64  PreUpdate;.typed
8dc0: 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74 66  ef struct Printf
8dd0: 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74 66  Arguments Printf
8de0: 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65 64  Arguments;.typed
8df0: 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65 74  ef struct RowSet
8e00: 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65 66   RowSet;.typedef
8e10: 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69 6e   struct Savepoin
8e20: 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79 70  t Savepoint;.typ
8e30: 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c 65  edef struct Sele
8e40: 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65 64  ct Select;.typed
8e50: 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74 65  ef struct SQLite
8e60: 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68 72  Thread SQLiteThr
8e70: 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ead;.typedef str
8e80: 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 53  uct SelectDest S
8e90: 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65 64  electDest;.typed
8ea0: 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69 73  ef struct SrcLis
8eb0: 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65 64  t SrcList;.typed
8ec0: 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63 63  ef struct StrAcc
8ed0: 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79 70  um StrAccum;.typ
8ee0: 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c  edef struct Tabl
8ef0: 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66  e Table;.typedef
8f00: 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f 63   struct TableLoc
8f10: 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79 70  k TableLock;.typ
8f20: 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b 65  edef struct Toke
8f30: 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65 66  n Token;.typedef
8f40: 20 73 74 72 75 63 74 20 54 72 65 65 56 69 65 77   struct TreeView
8f50: 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70 65 64   TreeView;.typed
8f60: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
8f70: 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65 64  r Trigger;.typed
8f80: 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  ef struct Trigge
8f90: 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67 3b  rPrg TriggerPrg;
8fa0: 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20  .typedef struct 
8fb0: 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69 67  TriggerStep Trig
8fc0: 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65 66  gerStep;.typedef
8fd0: 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65 64   struct Unpacked
8fe0: 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64 52  Record UnpackedR
8ff0: 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20 73  ecord;.typedef s
9000: 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54 61  truct VTable VTa
9010: 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72  ble;.typedef str
9020: 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61 62  uct VtabCtx Vtab
9030: 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74 72  Ctx;.typedef str
9040: 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b 65  uct Walker Walke
9050: 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63  r;.typedef struc
9060: 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65 72  t WhereInfo Wher
9070: 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73  eInfo;.typedef s
9080: 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68 3b  truct With With;
9090: 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62 6a  ../* A VList obj
90a0: 65 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d 61  ect records a ma
90b0: 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70 61  pping between pa
90c0: 72 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62 6c  rameters/variabl
90d0: 65 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a 20  es/wildcards.** 
90e0: 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74 65  in the SQL state
90f0: 6d 65 6e 74 20 28 73 75 63 68 20 61 73 20 24 61  ment (such as $a
9100: 62 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78 79  bc, @pqr, or :xy
9110: 7a 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65 67  z) and the integ
9120: 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20 6e  er.** variable n
9130: 75 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65 64  umber associated
9140: 20 77 69 74 68 20 74 68 61 74 20 70 61 72 61 6d   with that param
9150: 65 74 65 72 2e 20 20 53 65 65 20 74 68 65 20 66  eter.  See the f
9160: 6f 72 6d 61 74 20 64 65 73 63 72 69 70 74 69 6f  ormat descriptio
9170: 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c 69  n.** on the sqli
9180: 74 65 33 56 4c 69 73 74 41 64 64 28 29 20 72 6f  te3VListAdd() ro
9190: 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20 69  utine for more i
91a0: 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20 56  nformation.  A V
91b0: 4c 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a 2a  List is really.*
91c0: 2a 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79 20  * just an array 
91d0: 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f 0a  of integers..*/.
91e0: 74 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69 73  typedef int VLis
91f0: 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72 20  t;../*.** Defer 
9200: 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68 20  sourcing vdbe.h 
9210: 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74 69  and btree.h unti
9220: 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38 22  l after the "u8"
9230: 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61 6e   and.** "BusyHan
9240: 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e 20  dler" typedefs. 
9250: 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71 75  vdbe.h also requ
9260: 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74 68  ires a few of th
9270: 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69 6e  e opaque.** poin
9280: 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e 20  ter types (i.e. 
9290: 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65 64  FuncDef) defined
92a0: 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63 6c   above..*/.#incl
92b0: 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23 69  ude "btree.h".#i
92c0: 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22 0a  nclude "vdbe.h".
92d0: 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72 2e  #include "pager.
92e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63 61  h".#include "pca
92f0: 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  che.h".#include 
9300: 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20  "os.h".#include 
9310: 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54 68  "mutex.h"../* Th
9320: 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f 44  e SQLITE_EXTRA_D
9330: 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d 74  URABLE compile-t
9340: 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64 20  ime option used 
9350: 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61 75  to set the defau
9360: 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f 75  lt.** synchronou
9370: 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58 54  s setting to EXT
9380: 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c 6f  RA.  It is no lo
9390: 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e 0a  nger supported..
93a0: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
93b0: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23  _EXTRA_DURABLE.#
93c0: 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51 4c   warning Use SQL
93d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
93e0: 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65 61  HRONOUS=3 instea
93f0: 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54 52  d of SQLITE_EXTR
9400: 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66 69  A_DURABLE.# defi
9410: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
9420: 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33 0a  T_SYNCHRONOUS 3.
9430: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
9440: 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f 75  fault synchronou
9450: 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a 20  s levels..**.** 
9460: 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20 68  Note that (for h
9470: 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e 73  istorcal reasons
9480: 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e 43  ) the PAGER_SYNC
9490: 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f 73  HRONOUS_* macros
94a0: 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d 20   differ.** from 
94b0: 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  the SQLITE_DEFAU
94c0: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 76  LT_SYNCHRONOUS v
94d0: 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a 2a  alue by 1..**.**
94e0: 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45 52             PAGER
94f0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20 20  _SYNCHRONOUS    
9500: 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43 48     DEFAULT_SYNCH
9510: 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46 20  RONOUS.**   OFF 
9520: 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20 20            1     
9530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9540: 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d 41      0.**   NORMA
9550: 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20 20  L        2      
9560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9570: 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20 20     1.**   FULL  
9580: 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20 20          3       
9590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95a0: 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20 20    2.**   EXTRA  
95b0: 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20 20         4        
95c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
95d0: 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50 52   3.**.** The "PR
95e0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
95f0: 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73 6f  " statement also
9600: 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d 62   uses the zero-b
9610: 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a 2a  ased numbers..**
9620: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
9630: 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64 20   the zero-based 
9640: 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65 64  numbers are used
9650: 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e 61   for all externa
9660: 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a 20  l interfaces.** 
9670: 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73 65  and the one-base
9680: 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73 65  d values are use
9690: 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a 2f  d internally..*/
96a0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
96b0: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
96c0: 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  OUS.# define SQL
96d0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43  ITE_DEFAULT_SYNC
96e0: 48 52 4f 4e 4f 55 53 20 32 0a 23 65 6e 64 69 66  HRONOUS 2.#endif
96f0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9700: 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43  DEFAULT_WAL_SYNC
9710: 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65  HRONOUS.# define
9720: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
9730: 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  WAL_SYNCHRONOUS 
9740: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53  SQLITE_DEFAULT_S
9750: 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 65 6e 64 69  YNCHRONOUS.#endi
9760: 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  f../*.** Each da
9770: 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62  tabase file to b
9780: 65 20 61 63 63 65 73 73 65 64 20 62 79 20 74 68  e accessed by th
9790: 65 20 73 79 73 74 65 6d 20 69 73 20 61 6e 20 69  e system is an i
97a0: 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
97b0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
97c0: 63 74 75 72 65 2e 20 20 54 68 65 72 65 20 61 72  cture.  There ar
97d0: 65 20 6e 6f 72 6d 61 6c 6c 79 20 74 77 6f 20 6f  e normally two o
97e0: 66 20 74 68 65 73 65 20 73 74 72 75 63 74 75 72  f these structur
97f0: 65 73 0a 2a 2a 20 69 6e 20 74 68 65 20 73 71 6c  es.** in the sql
9800: 69 74 65 2e 61 44 62 5b 5d 20 61 72 72 61 79 2e  ite.aDb[] array.
9810: 20 20 61 44 62 5b 30 5d 20 69 73 20 74 68 65 20    aDb[0] is the 
9820: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
9830: 6c 65 20 61 6e 64 0a 2a 2a 20 61 44 62 5b 31 5d  le and.** aDb[1]
9840: 20 69 73 20 74 68 65 20 64 61 74 61 62 61 73 65   is the database
9850: 20 66 69 6c 65 20 75 73 65 64 20 74 6f 20 68 6f   file used to ho
9860: 6c 64 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62  ld temporary tab
9870: 6c 65 73 2e 20 20 41 64 64 69 74 69 6f 6e 61 6c  les.  Additional
9880: 0a 2a 2a 20 64 61 74 61 62 61 73 65 73 20 6d 61  .** databases ma
9890: 79 20 62 65 20 61 74 74 61 63 68 65 64 2e 0a 2a  y be attached..*
98a0: 2f 0a 73 74 72 75 63 74 20 44 62 20 7b 0a 20 20  /.struct Db {.  
98b0: 63 68 61 72 20 2a 7a 44 62 53 4e 61 6d 65 3b 20  char *zDbSName; 
98c0: 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
98d0: 74 68 69 73 20 64 61 74 61 62 61 73 65 2e 20 28  this database. (
98e0: 73 63 68 65 6d 61 20 6e 61 6d 65 2c 20 6e 6f 74  schema name, not
98f0: 20 66 69 6c 65 6e 61 6d 65 29 20 2a 2f 0a 20 20   filename) */.  
9900: 42 74 72 65 65 20 2a 70 42 74 3b 20 20 20 20 20  Btree *pBt;     
9910: 20 20 20 20 20 2f 2a 20 54 68 65 20 42 2a 54 72       /* The B*Tr
9920: 65 65 20 73 74 72 75 63 74 75 72 65 20 66 6f 72  ee structure for
9930: 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20 66   this database f
9940: 69 6c 65 20 2a 2f 0a 20 20 75 38 20 73 61 66 65  ile */.  u8 safe
9950: 74 79 5f 6c 65 76 65 6c 3b 20 20 20 20 20 2f 2a  ty_level;     /*
9960: 20 48 6f 77 20 61 67 67 72 65 73 73 69 76 65 20   How aggressive 
9970: 61 74 20 73 79 6e 63 69 6e 67 20 64 61 74 61 20  at syncing data 
9980: 74 6f 20 64 69 73 6b 20 2a 2f 0a 20 20 75 38 20  to disk */.  u8 
9990: 62 53 79 6e 63 53 65 74 3b 20 20 20 20 20 20 20  bSyncSet;       
99a0: 20 20 2f 2a 20 54 72 75 65 20 69 66 20 22 50 52    /* True if "PR
99b0: 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
99c0: 3d 4e 22 20 68 61 73 20 62 65 65 6e 20 72 75 6e  =N" has been run
99d0: 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
99e0: 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 50 6f  chema;     /* Po
99f0: 69 6e 74 65 72 20 74 6f 20 64 61 74 61 62 61 73  inter to databas
9a00: 65 20 73 63 68 65 6d 61 20 28 70 6f 73 73 69 62  e schema (possib
9a10: 6c 79 20 73 68 61 72 65 64 29 20 2a 2f 0a 7d 3b  ly shared) */.};
9a20: 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
9a30: 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
9a40: 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 73  wing structure s
9a50: 74 6f 72 65 73 20 61 20 64 61 74 61 62 61 73 65  tores a database
9a60: 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20 4d   schema..**.** M
9a70: 6f 73 74 20 53 63 68 65 6d 61 20 6f 62 6a 65 63  ost Schema objec
9a80: 74 73 20 61 72 65 20 61 73 73 6f 63 69 61 74 65  ts are associate
9a90: 64 20 77 69 74 68 20 61 20 42 74 72 65 65 2e 20  d with a Btree. 
9aa0: 20 54 68 65 20 65 78 63 65 70 74 69 6f 6e 20 69   The exception i
9ab0: 73 0a 2a 2a 20 74 68 65 20 53 63 68 65 6d 61 20  s.** the Schema 
9ac0: 66 6f 72 20 74 68 65 20 54 45 4d 50 20 64 61 74  for the TEMP dat
9ad0: 61 62 61 65 73 20 28 73 71 6c 69 74 65 33 2e 61  abaes (sqlite3.a
9ae0: 44 62 5b 31 5d 29 20 77 68 69 63 68 20 69 73 20  Db[1]) which is 
9af0: 66 72 65 65 2d 73 74 61 6e 64 69 6e 67 2e 0a 2a  free-standing..*
9b00: 2a 20 49 6e 20 73 68 61 72 65 64 20 63 61 63 68  * In shared cach
9b10: 65 20 6d 6f 64 65 2c 20 61 20 73 69 6e 67 6c 65  e mode, a single
9b20: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 20 63   Schema object c
9b30: 61 6e 20 62 65 20 73 68 61 72 65 64 20 62 79 20  an be shared by 
9b40: 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20 42 74 72 65  multiple.** Btre
9b50: 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f  es that refer to
9b60: 20 74 68 65 20 73 61 6d 65 20 75 6e 64 65 72 6c   the same underl
9b70: 79 69 6e 67 20 42 74 53 68 61 72 65 64 20 6f 62  ying BtShared ob
9b80: 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a 20 53 63 68 65  ject..**.** Sche
9b90: 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65 20 61  ma objects are a
9ba0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 61  utomatically dea
9bb0: 6c 6c 6f 63 61 74 65 64 20 77 68 65 6e 20 74 68  llocated when th
9bc0: 65 20 6c 61 73 74 20 42 74 72 65 65 20 74 68 61  e last Btree tha
9bd0: 74 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65 73 20  t.** references 
9be0: 74 68 65 6d 20 69 73 20 64 65 73 74 72 6f 79 65  them is destroye
9bf0: 64 2e 20 20 20 54 68 65 20 54 45 4d 50 20 53 63  d.   The TEMP Sc
9c00: 68 65 6d 61 20 69 73 20 6d 61 6e 75 61 6c 6c 79  hema is manually
9c10: 20 66 72 65 65 64 20 62 79 0a 2a 2a 20 73 71 6c   freed by.** sql
9c20: 69 74 65 33 5f 63 6c 6f 73 65 28 29 2e 0a 2a 0a  ite3_close()..*.
9c30: 2a 2a 20 41 20 74 68 72 65 61 64 20 6d 75 73 74  ** A thread must
9c40: 20 62 65 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75   be holding a mu
9c50: 74 65 78 20 6f 6e 20 74 68 65 20 63 6f 72 72 65  tex on the corre
9c60: 73 70 6f 6e 64 69 6e 67 20 42 74 72 65 65 20 69  sponding Btree i
9c70: 6e 20 6f 72 64 65 72 0a 2a 2a 20 74 6f 20 61 63  n order.** to ac
9c80: 63 65 73 73 20 53 63 68 65 6d 61 20 63 6f 6e 74  cess Schema cont
9c90: 65 6e 74 2e 20 20 54 68 69 73 20 69 6d 70 6c 69  ent.  This impli
9ca0: 65 73 20 74 68 61 74 20 74 68 65 20 74 68 72 65  es that the thre
9cb0: 61 64 20 6d 75 73 74 20 61 6c 73 6f 20 62 65 0a  ad must also be.
9cc0: 2a 2a 20 68 6f 6c 64 69 6e 67 20 61 20 6d 75 74  ** holding a mut
9cd0: 65 78 20 6f 6e 20 74 68 65 20 73 71 6c 69 74 65  ex on the sqlite
9ce0: 33 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69  3 connection poi
9cf0: 6e 74 65 72 20 74 68 61 74 20 6f 77 6e 73 20 74  nter that owns t
9d00: 68 65 20 42 74 72 65 65 2e 0a 2a 2a 20 46 6f 72  he Btree..** For
9d10: 20 61 20 54 45 4d 50 20 53 63 68 65 6d 61 2c 20   a TEMP Schema, 
9d20: 6f 6e 6c 79 20 74 68 65 20 63 6f 6e 6e 65 63 74  only the connect
9d30: 69 6f 6e 20 6d 75 74 65 78 20 69 73 20 72 65 71  ion mutex is req
9d40: 75 69 72 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74  uired..*/.struct
9d50: 20 53 63 68 65 6d 61 20 7b 0a 20 20 69 6e 74 20   Schema {.  int 
9d60: 73 63 68 65 6d 61 5f 63 6f 6f 6b 69 65 3b 20 20  schema_cookie;  
9d70: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 73 63 68   /* Database sch
9d80: 65 6d 61 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62  ema version numb
9d90: 65 72 20 66 6f 72 20 74 68 69 73 20 66 69 6c 65  er for this file
9da0: 20 2a 2f 0a 20 20 69 6e 74 20 69 47 65 6e 65 72   */.  int iGener
9db0: 61 74 69 6f 6e 3b 20 20 20 20 20 2f 2a 20 47 65  ation;     /* Ge
9dc0: 6e 65 72 61 74 69 6f 6e 20 63 6f 75 6e 74 65 72  neration counter
9dd0: 2e 20 20 49 6e 63 72 65 6d 65 6e 74 65 64 20 77  .  Incremented w
9de0: 69 74 68 20 65 61 63 68 20 63 68 61 6e 67 65 20  ith each change 
9df0: 2a 2f 0a 20 20 48 61 73 68 20 74 62 6c 48 61 73  */.  Hash tblHas
9e00: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c  h;        /* All
9e10: 20 74 61 62 6c 65 73 20 69 6e 64 65 78 65 64 20   tables indexed 
9e20: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
9e30: 68 20 69 64 78 48 61 73 68 3b 20 20 20 20 20 20  h idxHash;      
9e40: 20 20 2f 2a 20 41 6c 6c 20 28 6e 61 6d 65 64 29    /* All (named)
9e50: 20 69 6e 64 69 63 65 73 20 69 6e 64 65 78 65 64   indices indexed
9e60: 20 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61   by name */.  Ha
9e70: 73 68 20 74 72 69 67 48 61 73 68 3b 20 20 20 20  sh trigHash;    
9e80: 20 20 20 2f 2a 20 41 6c 6c 20 74 72 69 67 67 65     /* All trigge
9e90: 72 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  rs indexed by na
9ea0: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 66 6b 65  me */.  Hash fke
9eb0: 79 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  yHash;       /* 
9ec0: 41 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73  All foreign keys
9ed0: 20 62 79 20 72 65 66 65 72 65 6e 63 65 64 20 74   by referenced t
9ee0: 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54  able name */.  T
9ef0: 61 62 6c 65 20 2a 70 53 65 71 54 61 62 3b 20 20  able *pSeqTab;  
9f00: 20 20 20 20 2f 2a 20 54 68 65 20 73 71 6c 69 74      /* The sqlit
9f10: 65 5f 73 65 71 75 65 6e 63 65 20 74 61 62 6c 65  e_sequence table
9f20: 20 75 73 65 64 20 62 79 20 41 55 54 4f 49 4e 43   used by AUTOINC
9f30: 52 45 4d 45 4e 54 20 2a 2f 0a 20 20 75 38 20 66  REMENT */.  u8 f
9f40: 69 6c 65 5f 66 6f 72 6d 61 74 3b 20 20 20 20 20  ile_format;     
9f50: 20 2f 2a 20 53 63 68 65 6d 61 20 66 6f 72 6d 61   /* Schema forma
9f60: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
9f70: 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38 20  is file */.  u8 
9f80: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
9f90: 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64 69    /* Text encodi
9fa0: 6e 67 20 75 73 65 64 20 62 79 20 74 68 69 73 20  ng used by this 
9fb0: 64 61 74 61 62 61 73 65 20 2a 2f 0a 20 20 75 31  database */.  u1
9fc0: 36 20 73 63 68 65 6d 61 46 6c 61 67 73 3b 20 20  6 schemaFlags;  
9fd0: 20 20 20 2f 2a 20 46 6c 61 67 73 20 61 73 73 6f     /* Flags asso
9fe0: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
9ff0: 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74   schema */.  int
a000: 20 63 61 63 68 65 5f 73 69 7a 65 3b 20 20 20 20   cache_size;    
a010: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70    /* Number of p
a020: 61 67 65 73 20 74 6f 20 75 73 65 20 69 6e 20 74  ages to use in t
a030: 68 65 20 63 61 63 68 65 20 2a 2f 0a 7d 3b 0a 0a  he cache */.};..
a040: 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72  /*.** These macr
a050: 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20 74  os can be used t
a060: 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20  o test, set, or 
a070: 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74 68  clear bits in th
a080: 65 0a 2a 2a 20 44 62 2e 70 53 63 68 65 6d 61 2d  e.** Db.pSchema-
a090: 3e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  >flags field..*/
a0a0: 0a 23 64 65 66 69 6e 65 20 44 62 48 61 73 50 72  .#define DbHasPr
a0b0: 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20  operty(D,I,P)   
a0c0: 20 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e    (((D)->aDb[I].
a0d0: 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46  pSchema->schemaF
a0e0: 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29 29 0a  lags&(P))==(P)).
a0f0: 23 64 65 66 69 6e 65 20 44 62 48 61 73 41 6e 79  #define DbHasAny
a100: 50 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20  Property(D,I,P) 
a110: 20 28 28 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70   (((D)->aDb[I].p
a120: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a130: 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23 64 65  ags&(P))!=0).#de
a140: 66 69 6e 65 20 44 62 53 65 74 50 72 6f 70 65 72  fine DbSetProper
a150: 74 79 28 44 2c 49 2c 50 29 20 20 20 20 20 28 44  ty(D,I,P)     (D
a160: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
a170: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 7c 3d  a->schemaFlags|=
a180: 28 50 29 0a 23 64 65 66 69 6e 65 20 44 62 43 6c  (P).#define DbCl
a190: 65 61 72 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  earProperty(D,I,
a1a0: 50 29 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d  P)   (D)->aDb[I]
a1b0: 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61  .pSchema->schema
a1c0: 46 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 0a  Flags&=~(P)../*.
a1d0: 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
a1e0: 73 20 66 6f 72 20 74 68 65 20 44 42 2e 70 53 63  s for the DB.pSc
a1f0: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
a200: 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 44 42 5f  d..**.** The DB_
a210: 53 63 68 65 6d 61 4c 6f 61 64 65 64 20 66 6c 61  SchemaLoaded fla
a220: 67 20 69 73 20 73 65 74 20 61 66 74 65 72 20 74  g is set after t
a230: 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65  he database sche
a240: 6d 61 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 72  ma has been.** r
a250: 65 61 64 20 69 6e 74 6f 20 69 6e 74 65 72 6e 61  ead into interna
a260: 6c 20 68 61 73 68 20 74 61 62 6c 65 73 2e 0a 2a  l hash tables..*
a270: 2a 0a 2a 2a 20 44 42 5f 55 6e 72 65 73 65 74 56  *.** DB_UnresetV
a280: 69 65 77 73 20 6d 65 61 6e 73 20 74 68 61 74 20  iews means that 
a290: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 76 69 65 77  one or more view
a2a0: 73 20 68 61 76 65 20 63 6f 6c 75 6d 6e 20 6e 61  s have column na
a2b0: 6d 65 73 20 74 68 61 74 0a 2a 2a 20 68 61 76 65  mes that.** have
a2c0: 20 62 65 65 6e 20 66 69 6c 6c 65 64 20 6f 75 74   been filled out
a2d0: 2e 20 20 49 66 20 74 68 65 20 73 63 68 65 6d 61  .  If the schema
a2e0: 20 63 68 61 6e 67 65 73 2c 20 74 68 65 73 65 20   changes, these 
a2f0: 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6d 69 67  column names mig
a300: 68 74 0a 2a 2a 20 63 68 61 6e 67 65 73 20 61 6e  ht.** changes an
a310: 64 20 73 6f 20 74 68 65 20 76 69 65 77 20 77 69  d so the view wi
a320: 6c 6c 20 6e 65 65 64 20 74 6f 20 62 65 20 72 65  ll need to be re
a330: 73 65 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  set..*/.#define 
a340: 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 20  DB_SchemaLoaded 
a350: 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 54 68     0x0001  /* Th
a360: 65 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65  e schema has bee
a370: 6e 20 6c 6f 61 64 65 64 20 2a 2f 0a 23 64 65 66  n loaded */.#def
a380: 69 6e 65 20 44 42 5f 55 6e 72 65 73 65 74 56 69  ine DB_UnresetVi
a390: 65 77 73 20 20 20 20 30 78 30 30 30 32 20 20 2f  ews    0x0002  /
a3a0: 2a 20 53 6f 6d 65 20 76 69 65 77 73 20 68 61 76  * Some views hav
a3b0: 65 20 64 65 66 69 6e 65 64 20 63 6f 6c 75 6d 6e  e defined column
a3c0: 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65 66 69 6e   names */.#defin
a3d0: 65 20 44 42 5f 45 6d 70 74 79 20 20 20 20 20 20  e DB_Empty      
a3e0: 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
a3f0: 54 68 65 20 66 69 6c 65 20 69 73 20 65 6d 70 74  The file is empt
a400: 79 20 28 6c 65 6e 67 74 68 20 30 20 62 79 74 65  y (length 0 byte
a410: 73 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  s) */.#define DB
a420: 5f 52 65 73 65 74 57 61 6e 74 65 64 20 20 20 20  _ResetWanted    
a430: 20 30 78 30 30 30 38 20 20 2f 2a 20 52 65 73 65   0x0008  /* Rese
a440: 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68 65  t the schema whe
a450: 6e 20 6e 53 63 68 65 6d 61 4c 6f 63 6b 3d 3d 30  n nSchemaLock==0
a460: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e   */../*.** The n
a470: 75 6d 62 65 72 20 6f 66 20 64 69 66 66 65 72 65  umber of differe
a480: 6e 74 20 6b 69 6e 64 73 20 6f 66 20 74 68 69 6e  nt kinds of thin
a490: 67 73 20 74 68 61 74 20 63 61 6e 20 62 65 20 6c  gs that can be l
a4a0: 69 6d 69 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20  imited.** using 
a4b0: 74 68 65 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69  the sqlite3_limi
a4c0: 74 28 29 20 69 6e 74 65 72 66 61 63 65 2e 0a 2a  t() interface..*
a4d0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
a4e0: 5f 4e 5f 4c 49 4d 49 54 20 28 53 51 4c 49 54 45  _N_LIMIT (SQLITE
a4f0: 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48  _LIMIT_WORKER_TH
a500: 52 45 41 44 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20  READS+1)../*.** 
a510: 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  Lookaside malloc
a520: 20 69 73 20 61 20 73 65 74 20 6f 66 20 66 69 78   is a set of fix
a530: 65 64 2d 73 69 7a 65 20 62 75 66 66 65 72 73 20  ed-size buffers 
a540: 74 68 61 74 20 63 61 6e 20 62 65 20 75 73 65 64  that can be used
a550: 0a 2a 2a 20 74 6f 20 73 61 74 69 73 66 79 20 73  .** to satisfy s
a560: 6d 61 6c 6c 20 74 72 61 6e 73 69 65 6e 74 20 6d  mall transient m
a570: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
a580: 20 72 65 71 75 65 73 74 73 20 66 6f 72 20 6f 62   requests for ob
a590: 6a 65 63 74 73 0a 2a 2a 20 61 73 73 6f 63 69 61  jects.** associa
a5a0: 74 65 64 20 77 69 74 68 20 61 20 70 61 72 74 69  ted with a parti
a5b0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a5c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68 65 20  onnection.  The 
a5d0: 75 73 65 20 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73  use of.** lookas
a5e0: 69 64 65 20 6d 61 6c 6c 6f 63 20 70 72 6f 76 69  ide malloc provi
a5f0: 64 65 73 20 61 20 73 69 67 6e 69 66 69 63 61 6e  des a significan
a600: 74 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 65 6e  t performance en
a610: 68 61 6e 63 65 6d 65 6e 74 0a 2a 2a 20 28 61 70  hancement.** (ap
a620: 70 72 6f 78 20 31 30 25 29 20 62 79 20 61 76 6f  prox 10%) by avo
a630: 69 64 69 6e 67 20 6e 75 6d 65 72 6f 75 73 20 6d  iding numerous m
a640: 61 6c 6c 6f 63 2f 66 72 65 65 20 72 65 71 75 65  alloc/free reque
a650: 73 74 73 20 77 68 69 6c 65 20 70 61 72 73 69 6e  sts while parsin
a660: 67 0a 2a 2a 20 53 51 4c 20 73 74 61 74 65 6d 65  g.** SQL stateme
a670: 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c  nts..**.** The L
a680: 6f 6f 6b 61 73 69 64 65 20 73 74 72 75 63 74 75  ookaside structu
a690: 72 65 20 68 6f 6c 64 73 20 63 6f 6e 66 69 67 75  re holds configu
a6a0: 72 61 74 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69  ration informati
a6b0: 6f 6e 20 61 62 6f 75 74 20 74 68 65 0a 2a 2a 20  on about the.** 
a6c0: 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63  lookaside malloc
a6d0: 20 73 75 62 73 79 73 74 65 6d 2e 20 20 45 61 63   subsystem.  Eac
a6e0: 68 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  h available memo
a6f0: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e  ry allocation in
a700: 0a 2a 2a 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64  .** the lookasid
a710: 65 20 73 75 62 73 79 73 74 65 6d 20 69 73 20 73  e subsystem is s
a720: 74 6f 72 65 64 20 6f 6e 20 61 20 6c 69 6e 6b 65  tored on a linke
a730: 64 20 6c 69 73 74 20 6f 66 20 4c 6f 6f 6b 61 73  d list of Lookas
a740: 69 64 65 53 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63  ideSlot.** objec
a750: 74 73 2e 0a 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73  ts..**.** Lookas
a760: 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  ide allocations 
a770: 61 72 65 20 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64  are only allowed
a780: 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 74 68 61   for objects tha
a790: 74 20 61 72 65 20 61 73 73 6f 63 69 61 74 65 64  t are associated
a7a0: 0a 2a 2a 20 77 69 74 68 20 61 20 70 61 72 74 69  .** with a parti
a7b0: 63 75 6c 61 72 20 64 61 74 61 62 61 73 65 20 63  cular database c
a7c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 48 65 6e 63  onnection.  Henc
a7d0: 65 2c 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  e, schema inform
a7e0: 61 74 69 6f 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20  ation cannot.** 
a7f0: 62 65 20 73 74 6f 72 65 64 20 69 6e 20 6c 6f 6f  be stored in loo
a800: 6b 61 73 69 64 65 20 62 65 63 61 75 73 65 20 69  kaside because i
a810: 6e 20 73 68 61 72 65 64 20 63 61 63 68 65 20 6d  n shared cache m
a820: 6f 64 65 20 74 68 65 20 73 63 68 65 6d 61 20 69  ode the schema i
a830: 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73  nformation.** is
a840: 20 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69   shared by multi
a850: 70 6c 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ple database con
a860: 6e 65 63 74 69 6f 6e 73 2e 20 20 54 68 65 72 65  nections.  There
a870: 66 6f 72 65 2c 20 77 68 69 6c 65 20 70 61 72 73  fore, while pars
a880: 69 6e 67 0a 2a 2a 20 73 63 68 65 6d 61 20 69 6e  ing.** schema in
a890: 66 6f 72 6d 61 74 69 6f 6e 2c 20 74 68 65 20 4c  formation, the L
a8a0: 6f 6f 6b 61 73 69 64 65 2e 62 45 6e 61 62 6c 65  ookaside.bEnable
a8b0: 64 20 66 6c 61 67 20 69 73 20 63 6c 65 61 72 65  d flag is cleare
a8c0: 64 20 73 6f 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f  d so that.** loo
a8d0: 6b 61 73 69 64 65 20 61 6c 6c 6f 63 61 74 69 6f  kaside allocatio
a8e0: 6e 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  ns are not used 
a8f0: 74 6f 20 63 6f 6e 73 74 72 75 63 74 20 74 68 65  to construct the
a900: 20 73 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 2e   schema objects.
a910: 0a 2a 2f 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61  .*/.struct Looka
a920: 73 69 64 65 20 7b 0a 20 20 75 33 32 20 62 44 69  side {.  u32 bDi
a930: 73 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  sable;          
a940: 20 2f 2a 20 4f 6e 6c 79 20 6f 70 65 72 61 74 65   /* Only operate
a950: 20 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 77   the lookaside w
a960: 68 65 6e 20 7a 65 72 6f 20 2a 2f 0a 20 20 75 31  hen zero */.  u1
a970: 36 20 73 7a 3b 20 20 20 20 20 20 20 20 20 20 20  6 sz;           
a980: 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66        /* Size of
a990: 20 65 61 63 68 20 62 75 66 66 65 72 20 69 6e 20   each buffer in 
a9a0: 62 79 74 65 73 20 2a 2f 0a 20 20 75 38 20 62 4d  bytes */.  u8 bM
a9b0: 61 6c 6c 6f 63 65 64 3b 20 20 20 20 20 20 20 20  alloced;        
a9c0: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 70 53     /* True if pS
a9d0: 74 61 72 74 20 6f 62 74 61 69 6e 65 64 20 66 72  tart obtained fr
a9e0: 6f 6d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f  om sqlite3_mallo
a9f0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75  c() */.  int nOu
aa00: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
aa10: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62 75   /* Number of bu
aa20: 66 66 65 72 73 20 63 75 72 72 65 6e 74 6c 79 20  ffers currently 
aa30: 63 68 65 63 6b 65 64 20 6f 75 74 20 2a 2f 0a 20  checked out */. 
aa40: 20 69 6e 74 20 6d 78 4f 75 74 3b 20 20 20 20 20   int mxOut;     
aa50: 20 20 20 20 20 20 20 20 20 2f 2a 20 48 69 67 68           /* High
aa60: 77 61 74 65 72 20 6d 61 72 6b 20 66 6f 72 20 6e  water mark for n
aa70: 4f 75 74 20 2a 2f 0a 20 20 69 6e 74 20 61 6e 53  Out */.  int anS
aa80: 74 61 74 5b 33 5d 3b 20 20 20 20 20 20 20 20 20  tat[3];         
aa90: 20 2f 2a 20 30 3a 20 68 69 74 73 2e 20 20 31 3a   /* 0: hits.  1:
aaa0: 20 73 69 7a 65 20 6d 69 73 73 65 73 2e 20 20 32   size misses.  2
aab0: 3a 20 66 75 6c 6c 20 6d 69 73 73 65 73 20 2a 2f  : full misses */
aac0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
aad0: 20 2a 70 46 72 65 65 3b 20 20 20 2f 2a 20 4c 69   *pFree;   /* Li
aae0: 73 74 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  st of available 
aaf0: 62 75 66 66 65 72 73 20 2a 2f 0a 20 20 76 6f 69  buffers */.  voi
ab00: 64 20 2a 70 53 74 61 72 74 3b 20 20 20 20 20 20  d *pStart;      
ab10: 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62 79       /* First by
ab20: 74 65 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20  te of available 
ab30: 6d 65 6d 6f 72 79 20 73 70 61 63 65 20 2a 2f 0a  memory space */.
ab40: 20 20 76 6f 69 64 20 2a 70 45 6e 64 3b 20 20 20    void *pEnd;   
ab50: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72            /* Fir
ab60: 73 74 20 62 79 74 65 20 70 61 73 74 20 65 6e 64  st byte past end
ab70: 20 6f 66 20 61 76 61 69 6c 61 62 6c 65 20 73 70   of available sp
ab80: 61 63 65 20 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74  ace */.};.struct
ab90: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 7b   LookasideSlot {
aba0: 0a 20 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74  .  LookasideSlot
abb0: 20 2a 70 4e 65 78 74 3b 20 20 20 20 2f 2a 20 4e   *pNext;    /* N
abc0: 65 78 74 20 62 75 66 66 65 72 20 69 6e 20 74 68  ext buffer in th
abd0: 65 20 6c 69 73 74 20 6f 66 20 66 72 65 65 20 62  e list of free b
abe0: 75 66 66 65 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  uffers */.};../*
abf0: 0a 2a 2a 20 41 20 68 61 73 68 20 74 61 62 6c 65  .** A hash table
ac00: 20 66 6f 72 20 62 75 69 6c 74 2d 69 6e 20 66 75   for built-in fu
ac10: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
ac20: 6e 73 2e 20 20 28 41 70 70 6c 69 63 61 74 69 6f  ns.  (Applicatio
ac30: 6e 2d 64 65 66 69 6e 65 64 0a 2a 2a 20 66 75 6e  n-defined.** fun
ac40: 63 74 69 6f 6e 73 20 75 73 65 20 61 20 72 65 67  ctions use a reg
ac50: 75 6c 61 72 20 74 61 62 6c 65 20 74 61 62 6c 65  ular table table
ac60: 20 66 72 6f 6d 20 68 61 73 68 2e 68 2e 29 0a 2a   from hash.h.).*
ac70: 2a 0a 2a 2a 20 48 61 73 68 20 65 61 63 68 20 46  *.** Hash each F
ac80: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
ac90: 20 69 6e 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65   into one of the
aca0: 20 46 75 6e 63 44 65 66 48 61 73 68 2e 61 5b 5d   FuncDefHash.a[]
acb0: 20 73 6c 6f 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69   slots..** Colli
acc0: 73 69 6f 6e 73 20 61 72 65 20 6f 6e 20 74 68 65  sions are on the
acd0: 20 46 75 6e 63 44 65 66 2e 75 2e 70 48 61 73 68   FuncDef.u.pHash
ace0: 20 63 68 61 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69   chain..*/.#defi
acf0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  ne SQLITE_FUNC_H
ad00: 41 53 48 5f 53 5a 20 32 33 0a 73 74 72 75 63 74  ASH_SZ 23.struct
ad10: 20 46 75 6e 63 44 65 66 48 61 73 68 20 7b 0a 20   FuncDefHash {. 
ad20: 20 46 75 6e 63 44 65 66 20 2a 61 5b 53 51 4c 49   FuncDef *a[SQLI
ad30: 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 5d  TE_FUNC_HASH_SZ]
ad40: 3b 20 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20  ;       /* Hash 
ad50: 74 61 62 6c 65 20 66 6f 72 20 66 75 6e 63 74 69  table for functi
ad60: 6f 6e 73 20 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65  ons */.};..#ifde
ad70: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
ad80: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a  THENTICATION./*.
ad90: 2a 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 68  ** Information h
ada0: 65 6c 64 20 69 6e 20 74 68 65 20 22 73 71 6c 69  eld in the "sqli
adb0: 74 65 33 22 20 64 61 74 61 62 61 73 65 20 63 6f  te3" database co
adc0: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20  nnection object 
add0: 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 6d  and used.** to m
ade0: 61 6e 61 67 65 20 75 73 65 72 20 61 75 74 68 65  anage user authe
adf0: 6e 74 69 63 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79  ntication..*/.ty
ae00: 70 65 64 65 66 20 73 74 72 75 63 74 20 73 71 6c  pedef struct sql
ae10: 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 73 71  ite3_userauth sq
ae20: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 3b 0a  lite3_userauth;.
ae30: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 5f 75  struct sqlite3_u
ae40: 73 65 72 61 75 74 68 20 7b 0a 20 20 75 38 20 61  serauth {.  u8 a
ae50: 75 74 68 4c 65 76 65 6c 3b 20 20 20 20 20 20 20  uthLevel;       
ae60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72            /* Cur
ae70: 72 65 6e 74 20 61 75 74 68 65 6e 74 69 63 61 74  rent authenticat
ae80: 69 6f 6e 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 69  ion level */.  i
ae90: 6e 74 20 6e 41 75 74 68 50 57 3b 20 20 20 20 20  nt nAuthPW;     
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
aeb0: 53 69 7a 65 20 6f 66 20 74 68 65 20 7a 41 75 74  Size of the zAut
aec0: 68 50 57 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  hPW in bytes */.
aed0: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 50 57 3b    char *zAuthPW;
aee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aef0: 2f 2a 20 50 61 73 73 77 6f 72 64 20 75 73 65 64  /* Password used
af00: 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74 65   to authenticate
af10: 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 41 75 74   */.  char *zAut
af20: 68 55 73 65 72 3b 20 20 20 20 20 20 20 20 20 20  hUser;          
af30: 20 20 20 20 2f 2a 20 55 73 65 72 20 6e 61 6d 65      /* User name
af40: 20 75 73 65 64 20 74 6f 20 61 75 74 68 65 6e 74   used to authent
af50: 69 63 61 74 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20  icate */.};../* 
af60: 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
af70: 6f 72 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  or sqlite3_usera
af80: 75 74 68 2e 61 75 74 68 4c 65 76 65 6c 20 2a 2f  uth.authLevel */
af90: 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f 55  .#define UAUTH_U
afa0: 6e 6b 6e 6f 77 6e 20 20 20 20 20 30 20 20 20 20  nknown     0    
afb0: 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61 74 69   /* Authenticati
afc0: 6f 6e 20 6e 6f 74 20 79 65 74 20 63 68 65 63 6b  on not yet check
afd0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41  ed */.#define UA
afe0: 55 54 48 5f 46 61 69 6c 20 20 20 20 20 20 20 20  UTH_Fail        
aff0: 31 20 20 20 20 20 2f 2a 20 55 73 65 72 20 61 75  1     /* User au
b000: 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 66 61 69  thentication fai
b010: 6c 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 55  led */.#define U
b020: 41 55 54 48 5f 55 73 65 72 20 20 20 20 20 20 20  AUTH_User       
b030: 20 32 20 20 20 20 20 2f 2a 20 41 75 74 68 65 6e   2     /* Authen
b040: 74 69 63 61 74 65 64 20 61 73 20 61 20 6e 6f 72  ticated as a nor
b050: 6d 61 6c 20 75 73 65 72 20 2a 2f 0a 23 64 65 66  mal user */.#def
b060: 69 6e 65 20 55 41 55 54 48 5f 41 64 6d 69 6e 20  ine UAUTH_Admin 
b070: 20 20 20 20 20 20 33 20 20 20 20 20 2f 2a 20 41        3     /* A
b080: 75 74 68 65 6e 74 69 63 61 74 65 64 20 61 73 20  uthenticated as 
b090: 61 6e 20 61 64 6d 69 6e 69 73 74 72 61 74 6f 72  an administrator
b0a0: 20 2a 2f 0a 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e   */../* Function
b0b0: 73 20 75 73 65 64 20 6f 6e 6c 79 20 62 79 20 75  s used only by u
b0c0: 73 65 72 20 61 75 74 68 6f 72 69 7a 61 74 69 6f  ser authorizatio
b0d0: 6e 20 6c 6f 67 69 63 20 2a 2f 0a 69 6e 74 20 73  n logic */.int s
b0e0: 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 54 61  qlite3UserAuthTa
b0f0: 62 6c 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  ble(const char*)
b100: 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  ;.int sqlite3Use
b110: 72 41 75 74 68 43 68 65 63 6b 4c 6f 67 69 6e 28  rAuthCheckLogin(
b120: 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
b130: 68 61 72 2a 2c 75 38 2a 29 3b 0a 76 6f 69 64 20  har*,u8*);.void 
b140: 73 71 6c 69 74 65 33 55 73 65 72 41 75 74 68 49  sqlite3UserAuthI
b150: 6e 69 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  nit(sqlite3*);.v
b160: 6f 69 64 20 73 71 6c 69 74 65 33 43 72 79 70 74  oid sqlite3Crypt
b170: 46 75 6e 63 28 73 71 6c 69 74 65 33 5f 63 6f 6e  Func(sqlite3_con
b180: 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65  text*,int,sqlite
b190: 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e  3_value**);..#en
b1a0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 55 53  dif /* SQLITE_US
b1b0: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b1c0: 4e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65  N */../*.** type
b1d0: 64 65 66 20 66 6f 72 20 74 68 65 20 61 75 74 68  def for the auth
b1e0: 6f 72 69 7a 61 74 69 6f 6e 20 63 61 6c 6c 62 61  orization callba
b1f0: 63 6b 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a  ck function..*/.
b200: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55 53  #ifdef SQLITE_US
b210: 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49 4f  ER_AUTHENTICATIO
b220: 4e 0a 20 20 74 79 70 65 64 65 66 20 69 6e 74 20  N.  typedef int 
b230: 28 2a 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29  (*sqlite3_xauth)
b240: 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74  (void*,int,const
b250: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
b260: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a  r*,const char*,.
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
b290: 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
b2a0: 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a  t char*);.#else.
b2b0: 20 20 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a    typedef int (*
b2c0: 73 71 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76  sqlite3_xauth)(v
b2d0: 6f 69 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  oid*,int,const c
b2e0: 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  har*,const char*
b2f0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20  ,const char*,.  
b300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b310: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e               con
b320: 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64 69  st char*);.#endi
b330: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
b340: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
b350: 44 0a 2f 2a 20 54 68 69 73 20 69 73 20 61 6e 20  D./* This is an 
b360: 65 78 74 72 61 20 53 51 4c 49 54 45 5f 54 52 41  extra SQLITE_TRA
b370: 43 45 20 6d 61 63 72 6f 20 74 68 61 74 20 69 6e  CE macro that in
b380: 64 69 63 61 74 65 73 20 22 6c 65 67 61 63 79 22  dicates "legacy"
b390: 20 74 72 61 63 69 6e 67 0a 2a 2a 20 69 6e 20 74   tracing.** in t
b3a0: 68 65 20 73 74 79 6c 65 20 6f 66 20 73 71 6c 69  he style of sqli
b3b0: 74 65 33 5f 74 72 61 63 65 28 29 0a 2a 2f 0a 23  te3_trace().*/.#
b3c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52  define SQLITE_TR
b3d0: 41 43 45 5f 4c 45 47 41 43 59 20 20 30 78 38 30  ACE_LEGACY  0x80
b3e0: 0a 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 53  .#else.#define S
b3f0: 51 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41  QLITE_TRACE_LEGA
b400: 43 59 20 20 30 0a 23 65 6e 64 69 66 20 2f 2a 20  CY  0.#endif /* 
b410: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52  SQLITE_OMIT_DEPR
b420: 45 43 41 54 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  ECATED */.../*.*
b430: 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20  * Each database 
b440: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 61 6e  connection is an
b450: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
b460: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
b470: 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
b480: 73 71 6c 69 74 65 33 20 7b 0a 20 20 73 71 6c 69  sqlite3 {.  sqli
b490: 74 65 33 5f 76 66 73 20 2a 70 56 66 73 3b 20 20  te3_vfs *pVfs;  
b4a0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 53 20            /* OS 
b4b0: 49 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73  Interface */.  s
b4c0: 74 72 75 63 74 20 56 64 62 65 20 2a 70 56 64 62  truct Vdbe *pVdb
b4d0: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
b4e0: 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 76  List of active v
b4f0: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 73 20  irtual machines 
b500: 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 70 44  */.  CollSeq *pD
b510: 66 6c 74 43 6f 6c 6c 3b 20 20 20 20 20 20 20 20  fltColl;        
b520: 20 20 20 2f 2a 20 54 68 65 20 64 65 66 61 75 6c     /* The defaul
b530: 74 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  t collating sequ
b540: 65 6e 63 65 20 28 42 49 4e 41 52 59 29 20 2a 2f  ence (BINARY) */
b550: 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
b560: 20 2a 6d 75 74 65 78 3b 20 20 20 20 20 20 20 20   *mutex;        
b570: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d   /* Connection m
b580: 75 74 65 78 20 2a 2f 0a 20 20 44 62 20 2a 61 44  utex */.  Db *aD
b590: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
b5a0: 20 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 62          /* All b
b5b0: 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 69 6e 74  ackends */.  int
b5c0: 20 6e 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   nDb;           
b5d0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b5e0: 6d 62 65 72 20 6f 66 20 62 61 63 6b 65 6e 64 73  mber of backends
b5f0: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
b600: 65 20 2a 2f 0a 20 20 75 33 32 20 6d 44 62 46 6c  e */.  u32 mDbFl
b610: 61 67 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ags;            
b620: 20 20 20 20 20 2f 2a 20 66 6c 61 67 73 20 72 65       /* flags re
b630: 63 6f 72 64 69 6e 67 20 69 6e 74 65 72 6e 61 6c  cording internal
b640: 20 73 74 61 74 65 20 2a 2f 0a 20 20 75 33 32 20   state */.  u32 
b650: 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20 20  flags;          
b660: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 66 6c 61            /* fla
b670: 67 73 20 73 65 74 74 61 62 6c 65 20 62 79 20 70  gs settable by p
b680: 72 61 67 6d 61 73 2e 20 53 65 65 20 62 65 6c 6f  ragmas. See belo
b690: 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74 52  w */.  i64 lastR
b6a0: 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20 20  owid;           
b6b0: 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f 66       /* ROWID of
b6c0: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e 73   most recent ins
b6d0: 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29 20  ert (see above) 
b6e0: 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70 3b  */.  i64 szMmap;
b6f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b700: 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d 6d     /* Default mm
b710: 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67 20  ap_size setting 
b720: 2a 2f 0a 20 20 75 33 32 20 6e 53 63 68 65 6d 61  */.  u32 nSchema
b730: 4c 6f 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  Lock;           
b740: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 73     /* Do not res
b750: 65 74 20 74 68 65 20 73 63 68 65 6d 61 20 77 68  et the schema wh
b760: 65 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 2a 2f 0a 20  en non-zero */. 
b770: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
b780: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
b790: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
b7a0: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
b7b0: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
b7c0: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
b7d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
b7e0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
b7f0: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
b800: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
b810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b820: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
b830: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
b840: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
b850: 0a 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f  .  int iSysErrno
b860: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b870: 20 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20   /* Errno value 
b880: 66 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d  from last system
b890: 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20   error */.  u16 
b8a0: 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20  dbOptFlags;     
b8b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
b8c0: 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  gs to enable/dis
b8d0: 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  able optimizatio
b8e0: 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ns */.  u8 enc; 
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b900: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
b910: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61  coding */.  u8 a
b920: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
b930: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
b940: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
b950: 67 2e 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 63  g. */.  u8 bConc
b960: 75 72 72 65 6e 74 3b 20 20 20 20 20 20 20 20 20  urrent;         
b970: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
b980: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 20   transaction is 
b990: 22 43 4f 4e 43 55 52 52 45 4e 54 22 20 2a 2f 0a  "CONCURRENT" */.
b9a0: 20 20 75 38 20 74 65 6d 70 5f 73 74 6f 72 65 3b    u8 temp_store;
b9b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9c0: 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a 20 6d 65  /* 1: file 2: me
b9d0: 6d 6f 72 79 20 30 3a 20 64 65 66 61 75 6c 74 20  mory 0: default 
b9e0: 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f 63 46 61  */.  u8 mallocFa
b9f0: 69 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20  iled;           
ba00: 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 77 65     /* True if we
ba10: 20 68 61 76 65 20 73 65 65 6e 20 61 20 6d 61 6c   have seen a mal
ba20: 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a 2f 0a 20  loc failure */. 
ba30: 20 75 38 20 62 42 65 6e 69 67 6e 4d 61 6c 6c 6f   u8 bBenignMallo
ba40: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
ba50: 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75 69 72 65  * Do not require
ba60: 20 4f 4f 4d 73 20 69 66 20 74 72 75 65 20 2a 2f   OOMs if true */
ba70: 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63 6b 4d 6f  .  u8 dfltLockMo
ba80: 64 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  de;             
ba90: 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 63 6b   /* Default lock
baa0: 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20 61 74 74  ing-mode for att
bab0: 61 63 68 65 64 20 64 62 73 20 2a 2f 0a 20 20 73  ached dbs */.  s
bac0: 69 67 6e 65 64 20 63 68 61 72 20 6e 65 78 74 41  igned char nextA
bad0: 75 74 6f 76 61 63 3b 20 20 20 20 20 20 2f 2a 20  utovac;      /* 
bae0: 41 75 74 6f 76 61 63 20 73 65 74 74 69 6e 67 20  Autovac setting 
baf0: 61 66 74 65 72 20 56 41 43 55 55 4d 20 69 66 20  after VACUUM if 
bb00: 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73 75 70 70  >=0 */.  u8 supp
bb10: 72 65 73 73 45 72 72 3b 20 20 20 20 20 20 20 20  ressErr;        
bb20: 20 20 20 20 20 20 20 2f 2a 20 44 6f 20 6e 6f 74         /* Do not
bb30: 20 69 73 73 75 65 20 65 72 72 6f 72 20 6d 65 73   issue error mes
bb40: 73 61 67 65 73 20 69 66 20 74 72 75 65 20 2a 2f  sages if true */
bb50: 0a 20 20 75 38 20 76 74 61 62 4f 6e 43 6f 6e 66  .  u8 vtabOnConf
bb60: 6c 69 63 74 3b 20 20 20 20 20 20 20 20 20 20 20  lict;           
bb70: 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74   /* Value to ret
bb80: 75 72 6e 20 66 6f 72 20 73 33 5f 76 74 61 62 5f  urn for s3_vtab_
bb90: 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29 20 2a 2f  on_conflict() */
bba0: 0a 20 20 75 38 20 69 73 54 72 61 6e 73 61 63 74  .  u8 isTransact
bbb0: 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b 20 20 20  ionSavepoint;   
bbc0: 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20   /* True if the 
bbd0: 6f 75 74 65 72 6d 6f 73 74 20 73 61 76 65 70 6f  outermost savepo
bbe0: 69 6e 74 20 69 73 20 61 20 54 53 20 2a 2f 0a 20  int is a TS */. 
bbf0: 20 75 38 20 6d 54 72 61 63 65 3b 20 20 20 20 20   u8 mTrace;     
bc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bc10: 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 53  * zero or more S
bc20: 51 4c 49 54 45 5f 54 52 41 43 45 20 66 6c 61 67  QLITE_TRACE flag
bc30: 73 20 2a 2f 0a 20 20 75 38 20 73 6b 69 70 42 74  s */.  u8 skipBt
bc40: 72 65 65 4d 75 74 65 78 3b 20 20 20 20 20 20 20  reeMutex;       
bc50: 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
bc60: 6e 6f 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  no shared-cache 
bc70: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 75 38  backends */.  u8
bc80: 20 6e 53 71 6c 45 78 65 63 3b 20 20 20 20 20 20   nSqlExec;      
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
bca0: 75 6d 62 65 72 20 6f 66 20 70 65 6e 64 69 6e 67  umber of pending
bcb0: 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f 70 63 6f   OP_SqlExec opco
bcc0: 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 78  des */.  int nex
bcd0: 74 50 61 67 65 73 69 7a 65 3b 20 20 20 20 20 20  tPagesize;      
bce0: 20 20 20 20 20 20 20 2f 2a 20 50 61 67 65 73 69         /* Pagesi
bcf0: 7a 65 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ze after VACUUM 
bd00: 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33 32 20 6d  if >0 */.  u32 m
bd10: 61 67 69 63 3b 20 20 20 20 20 20 20 20 20 20 20  agic;           
bd20: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 67 69           /* Magi
bd30: 63 20 6e 75 6d 62 65 72 20 66 6f 72 20 64 65 74  c number for det
bd40: 65 63 74 20 6c 69 62 72 61 72 79 20 6d 69 73 75  ect library misu
bd50: 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 68 61  se */.  int nCha
bd60: 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  nge;            
bd70: 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 72        /* Value r
bd80: 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69 74  eturned by sqlit
bd90: 65 33 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  e3_changes() */.
bda0: 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43 68 61 6e    int nTotalChan
bdb0: 67 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ge;             
bdc0: 2f 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65  /* Value returne
bdd0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 74 6f 74  d by sqlite3_tot
bde0: 61 6c 5f 63 68 61 6e 67 65 73 28 29 20 2a 2f 0a  al_changes() */.
bdf0: 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b 53 51 4c    int aLimit[SQL
be00: 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b 20 20 20  ITE_N_LIMIT];   
be10: 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a 20 20 69  /* Limits */.  i
be20: 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72 4d 6d 61  nt nMaxSorterMma
be30: 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  p;           /* 
be40: 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  Maximum size of 
be50: 72 65 67 69 6f 6e 73 20 6d 61 70 70 65 64 20 62  regions mapped b
be60: 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20 20 73 74  y sorter */.  st
be70: 72 75 63 74 20 73 71 6c 69 74 65 33 49 6e 69 74  ruct sqlite3Init
be80: 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f 2a 20 49  Info {      /* I
be90: 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20  nformation used 
bea0: 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a  during initializ
beb0: 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 69 6e 74  ation */.    int
bec0: 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20 20 20 20   newTnum;       
bed0: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 6f 6f 74           /* Root
bee0: 70 61 67 65 20 6f 66 20 74 61 62 6c 65 20 62 65  page of table be
bef0: 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  ing initialized 
bf00: 2a 2f 0a 20 20 20 20 75 38 20 69 44 62 3b 20 20  */.    u8 iDb;  
bf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bf20: 20 20 20 2f 2a 20 57 68 69 63 68 20 64 62 20 66     /* Which db f
bf30: 69 6c 65 20 69 73 20 62 65 69 6e 67 20 69 6e 69  ile is being ini
bf40: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
bf50: 75 38 20 62 75 73 79 3b 20 20 20 20 20 20 20 20  u8 busy;        
bf60: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
bf70: 52 55 45 20 69 66 20 63 75 72 72 65 6e 74 6c 79  RUE if currently
bf80: 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67 20 2a 2f   initializing */
bf90: 0a 20 20 20 20 75 38 20 6f 72 70 68 61 6e 54 72  .    u8 orphanTr
bfa0: 69 67 67 65 72 3b 20 20 20 20 20 20 20 20 20 20  igger;          
bfb0: 20 2f 2a 20 4c 61 73 74 20 73 74 61 74 65 6d 65   /* Last stateme
bfc0: 6e 74 20 69 73 20 6f 72 70 68 61 6e 65 64 20 54  nt is orphaned T
bfd0: 45 4d 50 20 74 72 69 67 67 65 72 20 2a 2f 0a 20  EMP trigger */. 
bfe0: 20 20 20 75 38 20 69 6d 70 6f 73 74 65 72 54 61     u8 imposterTa
bff0: 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ble;           /
c000: 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e 20 69 6d  * Building an im
c010: 70 6f 73 74 65 72 20 74 61 62 6c 65 20 2a 2f 0a  poster table */.
c020: 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69 6e 74 20    } init;.  int 
c030: 6e 56 64 62 65 41 63 74 69 76 65 3b 20 20 20 20  nVdbeActive;    
c040: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
c050: 62 65 72 20 6f 66 20 56 44 42 45 73 20 63 75 72  ber of VDBEs cur
c060: 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e 67 20 2a  rently running *
c070: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 52 65 61  /.  int nVdbeRea
c080: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  d;              
c090: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c0a0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c0b0: 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
c0c0: 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 57 72 69  /.  int nVdbeWri
c0d0: 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  te;             
c0e0: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
c0f0: 63 74 69 76 65 20 56 44 42 45 73 20 74 68 61 74  ctive VDBEs that
c100: 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
c110: 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65 45 78  */.  int nVdbeEx
c120: 65 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ec;             
c130: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
c140: 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74 6f 20  nested calls to 
c150: 56 64 62 65 45 78 65 63 28 29 20 2a 2f 0a 20 20  VdbeExec() */.  
c160: 69 6e 74 20 6e 56 44 65 73 74 72 6f 79 3b 20 20  int nVDestroy;  
c170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c180: 20 4e 75 6d 62 65 72 20 6f 66 20 61 63 74 69 76   Number of activ
c190: 65 20 4f 50 5f 56 44 65 73 74 72 6f 79 20 6f 70  e OP_VDestroy op
c1a0: 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e  erations */.  in
c1b0: 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20  t nExtension;   
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
c1d0: 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64 65 64 20  umber of loaded 
c1e0: 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f 0a 20 20  extensions */.  
c1f0: 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e 73 69 6f  void **aExtensio
c200: 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  n;            /*
c210: 20 41 72 72 61 79 20 6f 66 20 73 68 61 72 65 64   Array of shared
c220: 20 6c 69 62 72 61 72 79 20 68 61 6e 64 6c 65 73   library handles
c230: 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 54 72 61   */.  int (*xTra
c240: 63 65 29 28 75 33 32 2c 76 6f 69 64 2a 2c 76 6f  ce)(u32,void*,vo
c250: 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20 20 20 20  id*,void*);     
c260: 2f 2a 20 54 72 61 63 65 20 66 75 6e 63 74 69 6f  /* Trace functio
c270: 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 54 72  n */.  void *pTr
c280: 61 63 65 41 72 67 3b 20 20 20 20 20 20 20 20 20  aceArg;         
c290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c2a0: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c2b0: 74 68 65 20 74 72 61 63 65 20 66 75 6e 63 74 69  the trace functi
c2c0: 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78  on */.  void (*x
c2d0: 50 72 6f 66 69 6c 65 29 28 76 6f 69 64 2a 2c 63  Profile)(void*,c
c2e0: 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36 34 29 3b  onst char*,u64);
c2f0: 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e 67 20 66    /* Profiling f
c300: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69  unction */.  voi
c310: 64 20 2a 70 50 72 6f 66 69 6c 65 41 72 67 3b 20  d *pProfileArg; 
c320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c330: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c340: 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65 20 66 75  nt to profile fu
c350: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
c360: 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b 20 20 20   *pCommitArg;   
c370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
c380: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 43 6f   Argument to xCo
c390: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28 29 20 2a  mmitCallback() *
c3a0: 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f 6d 6d 69  /.  int (*xCommi
c3b0: 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  tCallback)(void*
c3c0: 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f 6b 65 64  );    /* Invoked
c3d0: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
c3e0: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 52 6f  . */.  void *pRo
c3f0: 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20 20 20 20  llbackArg;      
c400: 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75           /* Argu
c410: 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c 62 61 63  ment to xRollbac
c420: 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a 2f 0a 20  kCallback() */. 
c430: 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c 62 61 63   void (*xRollbac
c440: 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a  kCallback)(void*
c450: 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 61 74  ); /* Invoked at
c460: 20 65 76 65 72 79 20 63 6f 6d 6d 69 74 2e 20 2a   every commit. *
c470: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70 64 61 74  /.  void *pUpdat
c480: 65 41 72 67 3b 0a 20 20 76 6f 69 64 20 28 2a 78  eArg;.  void (*x
c490: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28  UpdateCallback)(
c4a0: 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74  void*,int, const
c4b0: 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68 61   char*,const cha
c4c0: 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74 36 34 29  r*,sqlite_int64)
c4d0: 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ;.#ifdef SQLITE_
c4e0: 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
c4f0: 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20 2a 70 50  _HOOK.  void *pP
c500: 72 65 55 70 64 61 74 65 41 72 67 3b 20 20 20 20  reUpdateArg;    
c510: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 61        /* First a
c520: 72 67 75 6d 65 6e 74 20 74 6f 20 78 50 72 65 55  rgument to xPreU
c530: 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 2a 2f  pdateCallback */
c540: 0a 20 20 76 6f 69 64 20 28 2a 78 50 72 65 55 70  .  void (*xPreUp
c550: 64 61 74 65 43 61 6c 6c 62 61 63 6b 29 28 20 20  dateCallback)(  
c560: 20 2f 2a 20 52 65 67 69 73 74 65 72 65 64 20 75   /* Registered u
c570: 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 70 72 65  sing sqlite3_pre
c580: 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29 20 2a 2f  update_hook() */
c590: 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71 6c 69 74  .    void*,sqlit
c5a0: 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20 63 6f 6e  e3*,int,char con
c5b0: 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c  st*,char const*,
c5c0: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 2c 73 71  sqlite3_int64,sq
c5d0: 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20 20 29 3b  lite3_int64.  );
c5e0: 0a 20 20 50 72 65 55 70 64 61 74 65 20 2a 70 50  .  PreUpdate *pP
c5f0: 72 65 55 70 64 61 74 65 3b 20 20 20 20 20 20 20  reUpdate;       
c600: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
c610: 61 63 74 69 76 65 20 70 72 65 2d 75 70 64 61 74  active pre-updat
c620: 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  e callback */.#e
c630: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45  ndif /* SQLITE_E
c640: 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45 5f  NABLE_PREUPDATE_
c650: 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64 65 66 20  HOOK */.#ifndef 
c660: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
c670: 20 20 69 6e 74 20 28 2a 78 57 61 6c 43 61 6c 6c    int (*xWalCall
c680: 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c 20 73 71  back)(void *, sq
c690: 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63  lite3 *, const c
c6a0: 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a 20 20 76  har *, int);.  v
c6b0: 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b 0a 23 65  oid *pWalArg;.#e
c6c0: 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a 78 43 6f  ndif.  void(*xCo
c6d0: 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69 64 2a 2c  llNeeded)(void*,
c6e0: 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54 65  sqlite3*,int eTe
c6f0: 78 74 52 65 70 2c 63 6f 6e 73 74 20 63 68 61 72  xtRep,const char
c700: 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78 43 6f 6c  *);.  void(*xCol
c710: 6c 4e 65 65 64 65 64 31 36 29 28 76 6f 69 64 2a  lNeeded16)(void*
c720: 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20 65 54  ,sqlite3*,int eT
c730: 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 76 6f 69  extRep,const voi
c740: 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a 70 43 6f  d*);.  void *pCo
c750: 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a 20 20 73  llNeededArg;.  s
c760: 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 70 45  qlite3_value *pE
c770: 72 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  rr;          /* 
c780: 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72 6f  Most recent erro
c790: 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 75  r message */.  u
c7a0: 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f 6c 61 74  nion {.    volat
c7b0: 69 6c 65 20 69 6e 74 20 69 73 49 6e 74 65 72 72  ile int isInterr
c7c0: 75 70 74 65 64 3b 20 2f 2a 20 54 72 75 65 20 69  upted; /* True i
c7d0: 66 20 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72  f sqlite3_interr
c7e0: 75 70 74 20 68 61 73 20 62 65 65 6e 20 63 61 6c  upt has been cal
c7f0: 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f 75 62 6c  led */.    doubl
c800: 65 20 6e 6f 74 55 73 65 64 31 3b 20 20 20 20 20  e notUsed1;     
c810: 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65 72         /* Spacer
c820: 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20 20 4c 6f   */.  } u1;.  Lo
c830: 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61 73 69 64  okaside lookasid
c840: 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  e;          /* L
c850: 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20  ookaside malloc 
c860: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 2a 2f  configuration */
c870: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
c880: 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41 54 49  OMIT_AUTHORIZATI
c890: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 78 61 75  ON.  sqlite3_xau
c8a0: 74 68 20 78 41 75 74 68 3b 20 20 20 20 20 20 20  th xAuth;       
c8b0: 20 20 20 2f 2a 20 41 63 63 65 73 73 20 61 75 74     /* Access aut
c8c0: 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75 6e 63 74  horization funct
c8d0: 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ion */.  void *p
c8e0: 41 75 74 68 41 72 67 3b 20 20 20 20 20 20 20 20  AuthArg;        
c8f0: 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20 61 72         /* 1st ar
c900: 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 61 63  gument to the ac
c910: 63 65 73 73 20 61 75 74 68 20 66 75 6e 63 74 69  cess auth functi
c920: 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66  on */.#endif.#if
c930: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
c940: 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c 4c 42 41  _PROGRESS_CALLBA
c950: 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50 72 6f 67  CK.  int (*xProg
c960: 72 65 73 73 29 28 76 6f 69 64 20 2a 29 3b 20 20  ress)(void *);  
c970: 20 20 20 2f 2a 20 54 68 65 20 70 72 6f 67 72 65     /* The progre
c980: 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20  ss callback */. 
c990: 20 76 6f 69 64 20 2a 70 50 72 6f 67 72 65 73 73   void *pProgress
c9a0: 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Arg;           /
c9b0: 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 74 68  * Argument to th
c9c0: 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62  e progress callb
c9d0: 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65  ack */.  unsigne
c9e0: 64 20 6e 50 72 6f 67 72 65 73 73 4f 70 73 3b 20  d nProgressOps; 
c9f0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
ca00: 20 6f 66 20 6f 70 63 6f 64 65 73 20 66 6f 72 20   of opcodes for 
ca10: 70 72 6f 67 72 65 73 73 20 63 61 6c 6c 62 61 63  progress callbac
ca20: 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  k */.#endif.#ifn
ca30: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
ca40: 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69  VIRTUALTABLE.  i
ca50: 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20 20 20 20  nt nVTrans;     
ca60: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
ca70: 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a 65 20 6f  Allocated size o
ca80: 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a 20 20 48  f aVTrans */.  H
ca90: 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20 20 20 20  ash aModule;    
caa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cab0: 70 6f 70 75 6c 61 74 65 64 20 62 79 20 73 71 6c  populated by sql
cac0: 69 74 65 33 5f 63 72 65 61 74 65 5f 6d 6f 64 75  ite3_create_modu
cad0: 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61 62 43 74  le() */.  VtabCt
cae0: 78 20 2a 70 56 74 61 62 43 74 78 3b 20 20 20 20  x *pVtabCtx;    
caf0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 65          /* Conte
cb00: 78 74 20 66 6f 72 20 61 63 74 69 76 65 20 76 74  xt for active vt
cb10: 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72 65 61 74  ab connect/creat
cb20: 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 2a  e */.  VTable **
cb30: 61 56 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  aVTrans;        
cb40: 20 20 20 20 20 2f 2a 20 56 69 72 74 75 61 6c 20       /* Virtual 
cb50: 74 61 62 6c 65 73 20 77 69 74 68 20 6f 70 65 6e  tables with open
cb60: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 2a 2f   transactions */
cb70: 0a 20 20 56 54 61 62 6c 65 20 2a 70 44 69 73 63  .  VTable *pDisc
cb80: 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a 20 44 69  onnect;    /* Di
cb90: 73 63 6f 6e 6e 65 63 74 20 74 68 65 73 65 20 69  sconnect these i
cba0: 6e 20 6e 65 78 74 20 73 71 6c 69 74 65 33 5f 70  n next sqlite3_p
cbb0: 72 65 70 61 72 65 28 29 20 2a 2f 0a 23 65 6e 64  repare() */.#end
cbc0: 69 66 0a 20 20 48 61 73 68 20 61 46 75 6e 63 3b  if.  Hash aFunc;
cbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cbe0: 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c 65     /* Hash table
cbf0: 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66   of connection f
cc00: 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 48 61  unctions */.  Ha
cc10: 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20 20 20 20  sh aCollSeq;    
cc20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
cc30: 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71  ll collating seq
cc40: 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42 75 73 79  uences */.  Busy
cc50: 48 61 6e 64 6c 65 72 20 62 75 73 79 48 61 6e 64  Handler busyHand
cc60: 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20 42 75 73  ler;      /* Bus
cc70: 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20  y callback */.  
cc80: 44 62 20 61 44 62 53 74 61 74 69 63 5b 32 5d 3b  Db aDbStatic[2];
cc90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cca0: 20 53 74 61 74 69 63 20 73 70 61 63 65 20 66 6f   Static space fo
ccb0: 72 20 74 68 65 20 32 20 64 65 66 61 75 6c 74 20  r the 2 default 
ccc0: 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20 20 53 61  backends */.  Sa
ccd0: 76 65 70 6f 69 6e 74 20 2a 70 53 61 76 65 70 6f  vepoint *pSavepo
cce0: 69 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 4c  int;        /* L
ccf0: 69 73 74 20 6f 66 20 61 63 74 69 76 65 20 73 61  ist of active sa
cd00: 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e  vepoints */.  in
cd10: 74 20 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 20  t busyTimeout;  
cd20: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42              /* B
cd30: 75 73 79 20 68 61 6e 64 6c 65 72 20 74 69 6d 65  usy handler time
cd40: 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20 2a 2f 0a  out, in msec */.
cd50: 20 20 69 6e 74 20 6e 53 61 76 65 70 6f 69 6e 74    int nSavepoint
cd60: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
cd70: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 6f 6e  /* Number of non
cd80: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 61 76  -transaction sav
cd90: 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  epoints */.  int
cda0: 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20 20 20 20   nStatement;    
cdb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
cdc0: 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20 73  mber of nested s
cdd0: 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e 73 61 63  tatement-transac
cde0: 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69 36 34 20  tions  */.  i64 
cdf0: 6e 44 65 66 65 72 72 65 64 43 6f 6e 73 3b 20 20  nDeferredCons;  
ce00: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 74            /* Net
ce10: 20 64 65 66 65 72 72 65 64 20 63 6f 6e 73 74 72   deferred constr
ce20: 61 69 6e 74 73 20 74 68 69 73 20 74 72 61 6e 73  aints this trans
ce30: 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 69 36 34  action. */.  i64
ce40: 20 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e   nDeferredImmCon
ce50: 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  s;         /* Ne
ce60: 74 20 64 65 66 65 72 72 65 64 20 69 6d 6d 65 64  t deferred immed
ce70: 69 61 74 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  iate constraints
ce80: 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e 42 79 74   */.  int *pnByt
ce90: 65 73 46 72 65 65 64 3b 20 20 20 20 20 20 20 20  esFreed;        
cea0: 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74 20 4e 55      /* If not NU
ceb0: 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74 20 74 68  LL, increment th
cec0: 69 73 20 69 6e 20 44 62 46 72 65 65 28 29 20 2a  is in DbFree() *
ced0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
cee0: 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f  ENABLE_UNLOCK_NO
cef0: 54 49 46 59 0a 20 20 2f 2a 20 54 68 65 20 66 6f  TIFY.  /* The fo
cf00: 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61 62 6c 65  llowing variable
cf10: 73 20 61 72 65 20 61 6c 6c 20 70 72 6f 74 65 63  s are all protec
cf20: 74 65 64 20 62 79 20 74 68 65 20 53 54 41 54 49  ted by the STATI
cf30: 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a 20 6d 75  C_MASTER.  ** mu
cf40: 74 65 78 2c 20 6e 6f 74 20 62 79 20 73 71 6c 69  tex, not by sqli
cf50: 74 65 33 2e 6d 75 74 65 78 2e 20 54 68 65 79 20  te3.mutex. They 
cf60: 61 72 65 20 75 73 65 64 20 62 79 20 63 6f 64 65  are used by code
cf70: 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e 0a 20 20   in notify.c..  
cf80: 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e 70  **.  ** When X.p
cf90: 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e  UnlockConnection
cfa0: 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61 6e 73 20  ==Y, that means 
cfb0: 74 68 61 74 20 58 20 69 73 20 77 61 69 74 69 6e  that X is waitin
cfc0: 67 20 66 6f 72 20 59 20 74 6f 0a 20 20 2a 2a 20  g for Y to.  ** 
cfd0: 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61 74 20 69  unlock so that i
cfe0: 74 20 63 61 6e 20 70 72 6f 63 65 65 64 2e 0a 20  t can proceed.. 
cff0: 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20 58 2e   **.  ** When X.
d000: 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65 63 74  pBlockingConnect
d010: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
d020: 6e 73 20 74 68 61 74 20 73 6f 6d 65 74 68 69 6e  ns that somethin
d030: 67 20 74 68 61 74 20 58 20 74 72 69 65 64 0a 20  g that X tried. 
d040: 20 2a 2a 20 74 72 69 65 64 20 74 6f 20 64 6f 20   ** tried to do 
d050: 72 65 63 65 6e 74 6c 79 20 66 61 69 6c 65 64 20  recently failed 
d060: 77 69 74 68 20 61 6e 20 53 51 4c 49 54 45 5f 4c  with an SQLITE_L
d070: 4f 43 4b 45 44 20 65 72 72 6f 72 20 64 75 65 20  OCKED error due 
d080: 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a 20 68 65  to locks.  ** he
d090: 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f 0a 20 20  ld by Y..  */.  
d0a0: 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f 63 6b 69  sqlite3 *pBlocki
d0b0: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20 2f 2a  ngConnection; /*
d0c0: 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74   Connection that
d0d0: 20 63 61 75 73 65 64 20 53 51 4c 49 54 45 5f 4c   caused SQLITE_L
d0e0: 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71 6c 69 74  OCKED */.  sqlit
d0f0: 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65  e3 *pUnlockConne
d100: 63 74 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  ction;          
d110: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
d120: 6f 20 77 61 74 63 68 20 66 6f 72 20 75 6e 6c 6f  o watch for unlo
d130: 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55  ck */.  void *pU
d140: 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20 20 20 20  nlockArg;       
d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
d160: 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 78 55 6e   Argument to xUn
d170: 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f 0a 20 20  lockNotify */.  
d180: 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63 6b 4e 6f  void (*xUnlockNo
d190: 74 69 66 79 29 28 76 6f 69 64 20 2a 2a 2c 20 69  tify)(void **, i
d1a0: 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f 63 6b 20  nt);  /* Unlock 
d1b0: 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61 63 6b 20  notify callback 
d1c0: 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 4e  */.  sqlite3 *pN
d1d0: 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20 20 20 20  extBlocked;     
d1e0: 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20 6c 69     /* Next in li
d1f0: 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f 63 6b 65  st of all blocke
d200: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 2a 2f  d connections */
d210: 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53  .#endif.#ifdef S
d220: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
d230: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73 71 6c 69  NTICATION.  sqli
d240: 74 65 33 5f 75 73 65 72 61 75 74 68 20 61 75 74  te3_userauth aut
d250: 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65  h;        /* Use
d260: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
d270: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a   information */.
d280: 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  #endif.};../*.**
d290: 20 41 20 6d 61 63 72 6f 20 74 6f 20 64 69 73 63   A macro to disc
d2a0: 6f 76 65 72 20 74 68 65 20 65 6e 63 6f 64 69 6e  over the encodin
d2b0: 67 20 6f 66 20 61 20 64 61 74 61 62 61 73 65 2e  g of a database.
d2c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43 48 45  .*/.#define SCHE
d2d0: 4d 41 5f 45 4e 43 28 64 62 29 20 28 28 64 62 29  MA_ENC(db) ((db)
d2e0: 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68 65 6d 61  ->aDb[0].pSchema
d2f0: 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e 65 20 45  ->enc).#define E
d300: 4e 43 28 64 62 29 20 20 20 20 20 20 20 20 28 28  NC(db)        ((
d310: 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a 0a 2a 2a  db)->enc)../*.**
d320: 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   Possible values
d330: 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74 65 33   for the sqlite3
d340: 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 56 61  .flags..**.** Va
d350: 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  lue constraints 
d360: 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73  (enforced via as
d370: 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20  sert()):.**     
d380: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
d390: 63 20 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 46  c     == PAGER_F
d3a0: 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20  ULLFSYNC.**     
d3b0: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
d3c0: 46 53 79 6e 63 20 3d 3d 20 50 41 47 45 52 5f 43  FSync == PAGER_C
d3d0: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a  KPT_FULLFSYNC.**
d3e0: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 43 61 63        SQLITE_Cac
d3f0: 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d 20 50 41  heSpill    == PA
d400: 47 45 52 5f 43 41 43 48 45 5f 53 50 49 4c 4c 0a  GER_CACHE_SPILL.
d410: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d420: 45 5f 57 72 69 74 65 53 63 68 65 6d 61 20 20 20  E_WriteSchema   
d430: 20 30 78 30 30 30 30 30 30 30 31 20 20 2f 2a 20   0x00000001  /* 
d440: 4f 4b 20 74 6f 20 75 70 64 61 74 65 20 53 51 4c  OK to update SQL
d450: 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f 0a 23 64  ITE_MASTER */.#d
d460: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 65 67  efine SQLITE_Leg
d470: 61 63 79 46 69 6c 65 46 6d 74 20 20 30 78 30 30  acyFileFmt  0x00
d480: 30 30 30 30 30 32 20 20 2f 2a 20 43 72 65 61 74  000002  /* Creat
d490: 65 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  e new databases 
d4a0: 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a 2f 0a 23  in format 1 */.#
d4b0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 75  define SQLITE_Fu
d4c0: 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20 30 78 30  llColNames   0x0
d4d0: 30 30 30 30 30 30 34 20 20 2f 2a 20 53 68 6f 77  0000004  /* Show
d4e0: 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20 6e 61 6d   full column nam
d4f0: 65 73 20 6f 6e 20 53 45 4c 45 43 54 20 2a 2f 0a  es on SELECT */.
d500: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d510: 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 20 30 78  ullFSync      0x
d520: 30 30 30 30 30 30 30 38 20 20 2f 2a 20 55 73 65  00000008  /* Use
d530: 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f 6e 20 74   full fsync on t
d540: 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f 0a 23 64  he backend */.#d
d550: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6b 70  efine SQLITE_Ckp
d560: 74 46 75 6c 6c 46 53 79 6e 63 20 20 30 78 30 30  tFullFSync  0x00
d570: 30 30 30 30 31 30 20 20 2f 2a 20 55 73 65 20 66  000010  /* Use f
d580: 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72 20 63 68  ull fsync for ch
d590: 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23 64 65 66  eckpoint */.#def
d5a0: 69 6e 65 20 53 51 4c 49 54 45 5f 43 61 63 68 65  ine SQLITE_Cache
d5b0: 53 70 69 6c 6c 20 20 20 20 20 30 78 30 30 30 30  Spill     0x0000
d5c0: 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74 6f 20 73  0020  /* OK to s
d5d0: 70 69 6c 6c 20 70 61 67 65 72 20 63 61 63 68 65  pill pager cache
d5e0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d5f0: 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65 73  TE_ShortColNames
d600: 20 20 30 78 30 30 30 30 30 30 34 30 20 20 2f 2a    0x00000040  /*
d610: 20 53 68 6f 77 20 73 68 6f 72 74 20 63 6f 6c 75   Show short colu
d620: 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a 23 64 65  mns names */.#de
d630: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
d640: 74 52 6f 77 73 20 20 20 20 20 20 30 78 30 30 30  tRows      0x000
d650: 30 30 30 38 30 20 20 2f 2a 20 43 6f 75 6e 74 20  00080  /* Count 
d660: 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
d670: 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20 20 20 20  INSERT, */.     
d680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6a0: 20 20 20 20 20 2f 2a 20 20 20 44 45 4c 45 54 45       /*   DELETE
d6b0: 2c 20 6f 72 20 55 50 44 41 54 45 20 61 6e 64 20  , or UPDATE and 
d6c0: 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20 20 20 20  return */.      
d6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d6f0: 20 20 20 20 2f 2a 20 20 20 74 68 65 20 63 6f 75      /*   the cou
d700: 6e 74 20 75 73 69 6e 67 20 61 20 63 61 6c 6c 62  nt using a callb
d710: 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ack. */.#define 
d720: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
d730: 61 63 6b 20 20 20 30 78 30 30 30 30 30 31 30 30  ack   0x00000100
d740: 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74 68 65 20    /* Invoke the 
d750: 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65 20 69 66  callback once if
d760: 20 74 68 65 20 2a 2f 0a 20 20 20 20 20 20 20 20   the */.        
d770: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d790: 20 20 2f 2a 20 20 20 72 65 73 75 6c 74 20 73 65    /*   result se
d7a0: 74 20 69 73 20 65 6d 70 74 79 20 2a 2f 0a 23 64  t is empty */.#d
d7b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 67 6e  efine SQLITE_Ign
d7c0: 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78 30 30  oreChecks   0x00
d7d0: 30 30 30 32 30 30 20 20 2f 2a 20 44 6f 20 6e 6f  000200  /* Do no
d7e0: 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63 6b 20  t enforce check 
d7f0: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
d800: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65  define SQLITE_Re
d810: 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20 30 78 30  adUncommit   0x0
d820: 30 30 30 30 34 30 30 20 20 2f 2a 20 52 45 41 44  0000400  /* READ
d830: 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20 69 6e 20   UNCOMMITTED in 
d840: 73 68 61 72 65 64 2d 63 61 63 68 65 20 2a 2f 0a  shared-cache */.
d850: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e  #define SQLITE_N
d860: 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20 20 30 78  oCkptOnClose  0x
d870: 30 30 30 30 30 38 30 30 20 20 2f 2a 20 4e 6f 20  00000800  /* No 
d880: 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e 20 63 6c  checkpoint on cl
d890: 6f 73 65 28 29 2f 44 45 54 41 43 48 20 2a 2f 0a  ose()/DETACH */.
d8a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 52  #define SQLITE_R
d8b0: 65 76 65 72 73 65 4f 72 64 65 72 20 20 20 30 78  everseOrder   0x
d8c0: 30 30 30 30 31 30 30 30 20 20 2f 2a 20 52 65 76  00001000  /* Rev
d8d0: 65 72 73 65 20 75 6e 6f 72 64 65 72 65 64 20 53  erse unordered S
d8e0: 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e  ELECTs */.#defin
d8f0: 65 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67  e SQLITE_RecTrig
d900: 67 65 72 73 20 20 20 20 30 78 30 30 30 30 32 30  gers    0x000020
d910: 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65  00  /* Enable re
d920: 63 75 72 73 69 76 65 20 74 72 69 67 67 65 72 73  cursive triggers
d930: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
d940: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 20  TE_ForeignKeys  
d950: 20 20 30 78 30 30 30 30 34 30 30 30 20 20 2f 2a    0x00004000  /*
d960: 20 45 6e 66 6f 72 63 65 20 66 6f 72 65 69 67 6e   Enforce foreign
d970: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73   key constraints
d980: 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c    */.#define SQL
d990: 49 54 45 5f 41 75 74 6f 49 6e 64 65 78 20 20 20  ITE_AutoIndex   
d9a0: 20 20 20 30 78 30 30 30 30 38 30 30 30 20 20 2f     0x00008000  /
d9b0: 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74  * Enable automat
d9c0: 69 63 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ic indexes */.#d
d9d0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
d9e0: 64 45 78 74 65 6e 73 69 6f 6e 20 20 30 78 30 30  dExtension  0x00
d9f0: 30 31 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  010000  /* Enabl
da00: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
da10: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
da20: 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20 20  TE_LoadExtFunc  
da30: 20 20 30 78 30 30 30 32 30 30 30 30 20 20 2f 2a    0x00020000  /*
da40: 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74   Enable load_ext
da50: 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75 6e  ension() SQL fun
da60: 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  c */.#define SQL
da70: 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67 67 65  ITE_EnableTrigge
da80: 72 20 20 30 78 30 30 30 34 30 30 30 30 20 20 2f  r  0x00040000  /
da90: 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
daa0: 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23 64 65   triggers */.#de
dab0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65 66 65  fine SQLITE_Defe
dac0: 72 46 4b 73 20 20 20 20 20 20 20 30 78 30 30 30  rFKs       0x000
dad0: 38 30 30 30 30 20 20 2f 2a 20 44 65 66 65 72 20  80000  /* Defer 
dae0: 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e  all FK constrain
daf0: 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ts */.#define SQ
db00: 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 20  LITE_QueryOnly  
db10: 20 20 20 20 30 78 30 30 31 30 30 30 30 30 20 20      0x00100000  
db20: 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74 61 62  /* Disable datab
db30: 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 23  ase changes */.#
db40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 65  define SQLITE_Ce
db50: 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30 78 30  llSizeCk     0x0
db60: 30 32 30 30 30 30 30 20 20 2f 2a 20 43 68 65 63  0200000  /* Chec
db70: 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73 69 7a  k btree cell siz
db80: 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a 23 64  es on load */.#d
db90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 74 73  efine SQLITE_Fts
dba0: 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78 30 30  3Tokenizer  0x00
dbb0: 34 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  400000  /* Enabl
dbc0: 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a 65 72  e fts3_tokenizer
dbd0: 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  (2) */.#define S
dbe0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50 53 47  QLITE_EnableQPSG
dbf0: 20 20 20 20 20 30 78 30 30 38 30 30 30 30 30 20       0x00800000 
dc00: 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e 6e 65   /* Query Planne
dc10: 72 20 53 74 61 62 69 6c 69 74 79 20 47 75 61 72  r Stability Guar
dc20: 61 6e 74 65 65 20 2a 2f 0a 2f 2a 20 46 6c 61 67  antee */./* Flag
dc30: 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64  s used only if d
dc40: 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64  ebugging */.#ifd
dc50: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
dc60: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
dc70: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
dc80: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  08000000  /* Deb
dc90: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
dca0: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
dcb0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
dcc0: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31  beListing    0x1
dcd0: 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  0000000  /* Debu
dce0: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
dcf0: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
dd00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
dd10: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 32  beTrace      0x2
dd20: 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0000000  /* True
dd30: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
dd40: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
dd50: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
dd60: 64 64 6f 70 54 72 61 63 65 20 30 78 34 30 30 30  ddopTrace 0x4000
dd70: 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  0000  /* Trace s
dd80: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
dd90: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
dda0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
ddb0: 50 20 20 20 20 20 20 20 20 30 78 38 30 30 30 30  P        0x80000
ddc0: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
ddd0: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
dde0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   */.#endif../*.*
ddf0: 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73  * Allowed values
de00: 20 66 6f 72 20 73 71 6c 69 74 65 33 2e 6d 44 62   for sqlite3.mDb
de10: 46 6c 61 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65  Flags.*/.#define
de20: 20 44 42 46 4c 41 47 5f 53 63 68 65 6d 61 43 68   DBFLAG_SchemaCh
de30: 61 6e 67 65 20 20 20 30 78 30 30 30 31 20 20 2f  ange   0x0001  /
de40: 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48 61  * Uncommitted Ha
de50: 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65 73  sh table changes
de60: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 46 4c   */.#define DBFL
de70: 41 47 5f 50 72 65 66 65 72 42 75 69 6c 74 69 6e  AG_PreferBuiltin
de80: 20 20 30 78 30 30 30 32 20 20 2f 2a 20 50 72 65    0x0002  /* Pre
de90: 66 65 72 65 6e 63 65 20 74 6f 20 62 75 69 6c 74  ference to built
dea0: 2d 69 6e 20 66 75 6e 63 73 20 2a 2f 0a 23 64 65  -in funcs */.#de
deb0: 66 69 6e 65 20 44 42 46 4c 41 47 5f 56 61 63 75  fine DBFLAG_Vacu
dec0: 75 6d 20 20 20 20 20 20 20 20 20 30 78 30 30 30  um         0x000
ded0: 34 20 20 2f 2a 20 43 75 72 72 65 6e 74 6c 79 20  4  /* Currently 
dee0: 69 6e 20 61 20 56 41 43 55 55 4d 20 2a 2f 0a 0a  in a VACUUM */..
def0: 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20 74 68  /*.** Bits of th
df00: 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70 74 46  e sqlite3.dbOptF
df10: 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61 74 20  lags field that 
df20: 61 72 65 20 75 73 65 64 20 62 79 20 74 68 65 0a  are used by the.
df30: 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f  ** sqlite3_test_
df40: 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54  control(SQLITE_T
df50: 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41  ESTCTRL_OPTIMIZA
df60: 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72  TIONS,...) inter
df70: 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63  face to.** selec
df80: 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65 20 76  tively disable v
df90: 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
dfa0: 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ions..*/.#define
dfb0: 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46 6c 61   SQLITE_QueryFla
dfc0: 74 74 65 6e 65 72 20 30 78 30 30 30 31 20 20 20  ttener 0x0001   
dfd0: 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74 65 6e  /* Query flatten
dfe0: 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ing */.#define S
dff0: 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68  QLITE_ColumnCach
e000: 65 20 20 20 20 30 78 30 30 30 32 20 20 20 2f 2a  e    0x0002   /*
e010: 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f   Column cache */
e020: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e030: 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20 20 30  GroupByOrder   0
e040: 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f 55 50  x0004   /* GROUP
e050: 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52 44 45  BY cover of ORDE
e060: 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  RBY */.#define S
e070: 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75 74 43  QLITE_FactorOutC
e080: 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20 2f 2a  onst 0x0008   /*
e090: 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74 6f 72   Constant factor
e0a0: 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20  ing */./*       
e0b0: 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75 73 65           not use
e0c0: 64 20 20 20 20 30 78 30 30 31 30 20 20 20 2f 2f  d    0x0010   //
e0d0: 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49 64 78   Was: SQLITE_Idx
e0e0: 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65  RealAsInt */.#de
e0f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69 73 74  fine SQLITE_Dist
e100: 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30 30 32  inctOpt    0x002
e110: 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20  0   /* DISTINCT 
e120: 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f  using indexes */
e130: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e140: 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20 20 30  CoverIdxScan   0
e150: 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76 65 72  x0040   /* Cover
e160: 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e 73 20  ing index scans 
e170: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e180: 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f 69 6e  E_OrderByIdxJoin
e190: 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f 52 44   0x0080   /* ORD
e1a0: 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76  ER BY of joins v
e1b0: 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66  ia index */.#def
e1c0: 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62 71 43  ine SQLITE_SubqC
e1d0: 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31 30 30  oroutine  0x0100
e1e0: 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65 20 73     /* Evaluate s
e1f0: 75 62 71 75 65 72 69 65 73 20 61 73 20 63 6f 72  ubqueries as cor
e200: 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69  outines */.#defi
e210: 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e 73 69  ne SQLITE_Transi
e220: 74 69 76 65 20 20 20 20 20 30 78 30 32 30 30 20  tive     0x0200 
e230: 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76 65 20    /* Transitive 
e240: 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23  constraints */.#
e250: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d  define SQLITE_Om
e260: 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30  itNoopJoin   0x0
e270: 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e  400   /* Omit un
e280: 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e 20 6a  used tables in j
e290: 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  oins */.#define 
e2a0: 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20 20 20  SQLITE_Stat34   
e2b0: 20 20 20 20 20 20 30 78 30 38 30 30 20 20 20 2f        0x0800   /
e2c0: 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72 20 53  * Use STAT3 or S
e2d0: 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23 64 65  TAT4 data */.#de
e2e0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e  fine SQLITE_Coun
e2f0: 74 4f 66 56 69 65 77 20 20 20 20 30 78 31 30 30  tOfView    0x100
e300: 30 20 20 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74  0   /* The count
e310: 2d 6f 66 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a  -of-view optimiz
e320: 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
e330: 20 53 51 4c 49 54 45 5f 43 75 72 73 6f 72 48 69   SQLITE_CursorHi
e340: 6e 74 73 20 20 20 20 30 78 32 30 30 30 20 20 20  nts    0x2000   
e350: 2f 2a 20 41 64 64 20 4f 50 5f 43 75 72 73 6f 72  /* Add OP_Cursor
e360: 48 69 6e 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a  Hint opcodes */.
e370: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41  #define SQLITE_A
e380: 6c 6c 4f 70 74 73 20 20 20 20 20 20 20 20 30 78  llOpts        0x
e390: 66 66 66 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70  ffff   /* All op
e3a0: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a  timizations */..
e3b0: 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72  /*.** Macros for
e3c0: 20 74 65 73 74 69 6e 67 20 77 68 65 74 68 65 72   testing whether
e3d0: 20 6f 72 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61   or not optimiza
e3e0: 74 69 6f 6e 73 20 61 72 65 20 65 6e 61 62 6c 65  tions are enable
e3f0: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a  d or disabled..*
e400: 2f 0a 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69  /.#define Optimi
e410: 7a 61 74 69 6f 6e 44 69 73 61 62 6c 65 64 28 64  zationDisabled(d
e420: 62 2c 20 6d 61 73 6b 29 20 20 28 28 28 64 62 29  b, mask)  (((db)
e430: 2d 3e 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61  ->dbOptFlags&(ma
e440: 73 6b 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  sk))!=0).#define
e450: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61   OptimizationEna
e460: 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20  bled(db, mask)  
e470: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
e480: 61 67 73 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a  ags&(mask))==0).
e490: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72  ./*.** Return tr
e4a0: 75 65 20 69 66 20 69 74 20 4f 4b 20 74 6f 20 66  ue if it OK to f
e4b0: 61 63 74 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65  actor constant e
e4c0: 78 70 72 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20  xpressions into 
e4d0: 74 68 65 20 69 6e 69 74 69 61 6c 69 7a 61 74 69  the initializati
e4e0: 6f 6e 0a 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20  on.** code. The 
e4f0: 61 72 67 75 6d 65 6e 74 20 69 73 20 61 20 50 61  argument is a Pa
e500: 72 73 65 20 6f 62 6a 65 63 74 20 66 6f 72 20 74  rse object for t
e510: 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
e520: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f  r..*/.#define Co
e530: 6e 73 74 46 61 63 74 6f 72 4f 6b 28 50 29 20 28  nstFactorOk(P) (
e540: 28 50 29 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74  (P)->okConstFact
e550: 6f 72 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  or)../*.** Possi
e560: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ble values for t
e570: 68 65 20 73 71 6c 69 74 65 2e 6d 61 67 69 63 20  he sqlite.magic 
e580: 66 69 65 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75  field..** The nu
e590: 6d 62 65 72 73 20 61 72 65 20 6f 62 74 61 69 6e  mbers are obtain
e5a0: 65 64 20 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64  ed at random and
e5b0: 20 68 61 76 65 20 6e 6f 20 73 70 65 63 69 61 6c   have no special
e5c0: 20 6d 65 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a   meaning, other.
e5d0: 2a 2a 20 74 68 61 6e 20 62 65 69 6e 67 20 64 69  ** than being di
e5e0: 73 74 69 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20  stinct from one 
e5f0: 61 6e 6f 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  another..*/.#def
e600: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43  ine SQLITE_MAGIC
e610: 5f 4f 50 45 4e 20 20 20 20 20 30 78 61 30 32 39  _OPEN     0xa029
e620: 61 36 39 37 20 20 2f 2a 20 44 61 74 61 62 61 73  a697  /* Databas
e630: 65 20 69 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65  e is open */.#de
e640: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
e650: 43 5f 43 4c 4f 53 45 44 20 20 20 30 78 39 66 33  C_CLOSED   0x9f3
e660: 63 32 64 33 33 20 20 2f 2a 20 44 61 74 61 62 61  c2d33  /* Databa
e670: 73 65 20 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a  se is closed */.
e680: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
e690: 41 47 49 43 5f 53 49 43 4b 20 20 20 20 20 30 78  AGIC_SICK     0x
e6a0: 34 62 37 37 31 32 39 30 20 20 2f 2a 20 45 72 72  4b771290  /* Err
e6b0: 6f 72 20 61 6e 64 20 61 77 61 69 74 69 6e 67 20  or and awaiting 
e6c0: 63 6c 6f 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65  close */.#define
e6d0: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55   SQLITE_MAGIC_BU
e6e0: 53 59 20 20 20 20 20 30 78 66 30 33 62 37 39 30  SY     0xf03b790
e6f0: 36 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 63  6  /* Database c
e700: 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20  urrently in use 
e710: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e720: 45 5f 4d 41 47 49 43 5f 45 52 52 4f 52 20 20 20  E_MAGIC_ERROR   
e730: 20 30 78 62 35 33 35 37 39 33 30 20 20 2f 2a 20   0xb5357930  /* 
e740: 41 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  An SQLITE_MISUSE
e750: 20 65 72 72 6f 72 20 6f 63 63 75 72 72 65 64 20   error occurred 
e760: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
e770: 45 5f 4d 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20  E_MAGIC_ZOMBIE  
e780: 20 30 78 36 34 63 66 66 63 37 66 20 20 2f 2a 20   0x64cffc7f  /* 
e790: 43 6c 6f 73 65 20 77 69 74 68 20 6c 61 73 74 20  Close with last 
e7a0: 73 74 61 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20  statement close 
e7b0: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53  */../*.** Each S
e7c0: 51 4c 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 64  QL function is d
e7d0: 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e 73  efined by an ins
e7e0: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
e7f0: 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74  lowing.** struct
e800: 75 72 65 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c  ure.  For global
e810: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
e820: 6f 6e 73 20 28 65 78 3a 20 73 75 62 73 74 72 28  ons (ex: substr(
e830: 29 2c 20 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28  ), max(), count(
e840: 29 29 0a 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20  )).** a pointer 
e850: 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75 72  to this structur
e860: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65  e is held in the
e870: 20 73 71 6c 69 74 65 33 42 75 69 6c 74 69 6e 46   sqlite3BuiltinF
e880: 75 6e 63 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e  unctions object.
e890: 0a 2a 2a 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e  .** For per-conn
e8a0: 65 63 74 69 6f 6e 20 61 70 70 6c 69 63 61 74 69  ection applicati
e8b0: 6f 6e 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  on-defined funct
e8c0: 69 6f 6e 73 2c 20 61 20 70 6f 69 6e 74 65 72 20  ions, a pointer 
e8d0: 74 6f 20 74 68 69 73 0a 2a 2a 20 73 74 72 75 63  to this.** struc
e8e0: 74 75 72 65 20 69 73 20 68 65 6c 64 20 69 6e 20  ture is held in 
e8f0: 74 68 65 20 64 62 2d 3e 61 48 61 73 68 20 68 61  the db->aHash ha
e900: 73 68 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20  sh table..**.** 
e910: 54 68 65 20 75 2e 70 48 61 73 68 20 66 69 65 6c  The u.pHash fiel
e920: 64 20 69 73 20 75 73 65 64 20 62 79 20 74 68 65  d is used by the
e930: 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e   global built-in
e940: 73 2e 20 20 54 68 65 20 75 2e 70 44 65 73 74 72  s.  The u.pDestr
e950: 75 63 74 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69  uctor.** field i
e960: 73 20 75 73 65 64 20 62 79 20 70 65 72 2d 63 6f  s used by per-co
e970: 6e 6e 65 63 74 69 6f 6e 20 61 70 70 2d 64 65 66  nnection app-def
e980: 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73   functions..*/.s
e990: 74 72 75 63 74 20 46 75 6e 63 44 65 66 20 7b 0a  truct FuncDef {.
e9a0: 20 20 69 38 20 6e 41 72 67 3b 20 20 20 20 20 20    i8 nArg;      
e9b0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
e9c0: 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 2e 20 20   of arguments.  
e9d0: 2d 31 20 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74  -1 means unlimit
e9e0: 65 64 20 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63  ed */.  u16 func
e9f0: 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f 2a 20  Flags;       /* 
ea00: 53 6f 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  Some combination
ea10: 20 6f 66 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f   of SQLITE_FUNC_
ea20: 2a 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  * */.  void *pUs
ea30: 65 72 44 61 74 61 3b 20 20 20 20 20 2f 2a 20 55  erData;     /* U
ea40: 73 65 72 20 64 61 74 61 20 70 61 72 61 6d 65 74  ser data paramet
ea50: 65 72 20 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20  er */.  FuncDef 
ea60: 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
ea70: 4e 65 78 74 20 66 75 6e 63 74 69 6f 6e 20 77 69  Next function wi
ea80: 74 68 20 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a  th same name */.
ea90: 20 20 76 6f 69 64 20 28 2a 78 53 46 75 6e 63 29    void (*xSFunc)
eaa0: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
eab0: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
eac0: 6c 75 65 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20  lue**); /* func 
ead0: 6f 72 20 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20  or agg-step */. 
eae0: 20 76 6f 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a   void (*xFinaliz
eaf0: 65 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  e)(sqlite3_conte
eb00: 78 74 2a 29 3b 20 20 20 20 20 20 20 20 20 20 20  xt*);           
eb10: 20 20 20 20 20 20 20 2f 2a 20 41 67 67 20 66 69         /* Agg fi
eb20: 6e 61 6c 69 7a 65 72 20 2a 2f 0a 20 20 63 6f 6e  nalizer */.  con
eb30: 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20  st char *zName; 
eb40: 20 20 2f 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66    /* SQL name of
eb50: 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a   the function. *
eb60: 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
eb70: 46 75 6e 63 44 65 66 20 2a 70 48 61 73 68 3b 20  FuncDef *pHash; 
eb80: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 77 69 74       /* Next wit
eb90: 68 20 61 20 64 69 66 66 65 72 65 6e 74 20 6e 61  h a different na
eba0: 6d 65 20 62 75 74 20 74 68 65 20 73 61 6d 65 20  me but the same 
ebb0: 68 61 73 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63  hash */.    Func
ebc0: 44 65 73 74 72 75 63 74 6f 72 20 2a 70 44 65 73  Destructor *pDes
ebd0: 74 72 75 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65  tructor;   /* Re
ebe0: 66 65 72 65 6e 63 65 20 63 6f 75 6e 74 65 64 20  ference counted 
ebf0: 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63 74  destructor funct
ec00: 69 6f 6e 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b  ion */.  } u;.};
ec10: 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72  ../*.** This str
ec20: 75 63 74 75 72 65 20 65 6e 63 61 70 73 75 6c 61  ucture encapsula
ec30: 74 65 73 20 61 20 75 73 65 72 2d 66 75 6e 63 74  tes a user-funct
ec40: 69 6f 6e 20 64 65 73 74 72 75 63 74 6f 72 20 63  ion destructor c
ec50: 61 6c 6c 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63  allback (as.** c
ec60: 6f 6e 66 69 67 75 72 65 64 20 75 73 69 6e 67 20  onfigured using 
ec70: 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f  create_function_
ec80: 76 32 28 29 29 20 61 6e 64 20 61 20 72 65 66 65  v2()) and a refe
ec90: 72 65 6e 63 65 20 63 6f 75 6e 74 65 72 2e 20 57  rence counter. W
eca0: 68 65 6e 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75  hen.** create_fu
ecb0: 6e 63 74 69 6f 6e 5f 76 32 28 29 20 69 73 20 63  nction_v2() is c
ecc0: 61 6c 6c 65 64 20 74 6f 20 63 72 65 61 74 65 20  alled to create 
ecd0: 61 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  a function with 
ece0: 61 20 64 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a  a destructor,.**
ecf0: 20 61 20 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74   a single object
ed00: 20 6f 66 20 74 68 69 73 20 74 79 70 65 20 69 73   of this type is
ed10: 20 61 6c 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63   allocated. Func
ed20: 44 65 73 74 72 75 63 74 6f 72 2e 6e 52 65 66 20  Destructor.nRef 
ed30: 69 73 20 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65  is set to.** the
ed40: 20 6e 75 6d 62 65 72 20 6f 66 20 46 75 6e 63 44   number of FuncD
ed50: 65 66 20 6f 62 6a 65 63 74 73 20 63 72 65 61 74  ef objects creat
ed60: 65 64 20 28 65 69 74 68 65 72 20 31 20 6f 72 20  ed (either 1 or 
ed70: 33 2c 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  3, depending on 
ed80: 77 68 65 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f  whether.** or no
ed90: 74 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  t the specified 
eda0: 65 6e 63 6f 64 69 6e 67 20 69 73 20 53 51 4c 49  encoding is SQLI
edb0: 54 45 5f 41 4e 59 29 2e 20 54 68 65 20 46 75 6e  TE_ANY). The Fun
edc0: 63 44 65 66 2e 70 44 65 73 74 72 75 63 74 6f 72  cDef.pDestructor
edd0: 0a 2a 2a 20 6d 65 6d 62 65 72 20 6f 66 20 65 61  .** member of ea
ede0: 63 68 20 6f 66 20 74 68 65 20 6e 65 77 20 46 75  ch of the new Fu
edf0: 6e 63 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73  ncDef objects is
ee00: 20 73 65 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f   set to point to
ee10: 20 74 68 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a   the allocated.*
ee20: 2a 20 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72  * FuncDestructor
ee30: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74  ..**.** Thereaft
ee40: 65 72 2c 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20  er, when one of 
ee50: 74 68 65 20 46 75 6e 63 44 65 66 20 6f 62 6a 65  the FuncDef obje
ee60: 63 74 73 20 69 73 20 64 65 6c 65 74 65 64 2c 20  cts is deleted, 
ee70: 74 68 65 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a  the reference.**
ee80: 20 63 6f 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f   count on this o
ee90: 62 6a 65 63 74 20 69 73 20 64 65 63 72 65 6d 65  bject is decreme
eea0: 6e 74 65 64 2e 20 57 68 65 6e 20 69 74 20 72 65  nted. When it re
eeb0: 61 63 68 65 73 20 30 2c 20 74 68 65 20 64 65 73  aches 0, the des
eec0: 74 72 75 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e  tructor.** is in
eed0: 76 6f 6b 65 64 20 61 6e 64 20 74 68 65 20 46 75  voked and the Fu
eee0: 6e 63 44 65 73 74 72 75 63 74 6f 72 20 73 74 72  ncDestructor str
eef0: 75 63 74 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f  ucture freed..*/
ef00: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 73 74  .struct FuncDest
ef10: 72 75 63 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e  ructor {.  int n
ef20: 52 65 66 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  Ref;.  void (*xD
ef30: 65 73 74 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b  estroy)(void *);
ef40: 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44 61  .  void *pUserDa
ef50: 74 61 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f  ta;.};../*.** Po
ef60: 73 73 69 62 6c 65 20 76 61 6c 75 65 73 20 66 6f  ssible values fo
ef70: 72 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e  r FuncDef.flags.
ef80: 20 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20    Note that the 
ef90: 5f 4c 45 4e 47 54 48 20 61 6e 64 20 5f 54 59 50  _LENGTH and _TYP
efa0: 45 4f 46 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75  EOF.** values mu
efb0: 73 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  st correspond to
efc0: 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52   OPFLAG_LENGTHAR
efd0: 47 20 61 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50  G and OPFLAG_TYP
efe0: 45 4f 46 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20  EOFARG.  And.** 
eff0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f000: 54 41 4e 54 20 6d 75 73 74 20 62 65 20 74 68 65  TANT must be the
f010: 20 73 61 6d 65 20 61 73 20 53 51 4c 49 54 45 5f   same as SQLITE_
f020: 44 45 54 45 52 4d 49 4e 49 53 54 49 43 2e 20 20  DETERMINISTIC.  
f030: 54 68 65 72 65 0a 2a 2a 20 61 72 65 20 61 73 73  There.** are ass
f040: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
f050: 20 69 6e 20 74 68 65 20 63 6f 64 65 20 74 6f 20   in the code to 
f060: 76 65 72 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a  verify this..**.
f070: 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61  ** Value constra
f080: 69 6e 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76  ints (enforced v
f090: 69 61 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a  ia assert()):.**
f0a0: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
f0b0: 5f 4d 49 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e  _MINMAX    ==  N
f0c0: 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
f0d0: 20 3d 3d 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67   == SF_MinMaxAgg
f0e0: 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46  .**     SQLITE_F
f0f0: 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d  UNC_LENGTH    ==
f100: 20 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41    OPFLAG_LENGTHA
f110: 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45  RG.**     SQLITE
f120: 5f 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 20  _FUNC_TYPEOF    
f130: 3d 3d 20 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ==  OPFLAG_TYPEO
f140: 46 41 52 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49  FARG.**     SQLI
f150: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f160: 20 20 3d 3d 20 20 53 51 4c 49 54 45 5f 44 45 54    ==  SQLITE_DET
f170: 45 52 4d 49 4e 49 53 54 49 43 20 66 72 6f 6d 20  ERMINISTIC from 
f180: 74 68 65 20 41 50 49 0a 2a 2a 20 20 20 20 20 53  the API.**     S
f190: 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41  QLITE_FUNC_ENCMA
f1a0: 53 4b 20 20 20 64 65 70 65 6e 64 73 20 6f 6e 20  SK   depends on 
f1b0: 53 51 4c 49 54 45 5f 55 54 46 2a 20 6d 61 63 72  SQLITE_UTF* macr
f1c0: 6f 73 20 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f  os in the API.*/
f1d0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f1e0: 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78  FUNC_ENCMASK  0x
f1f0: 30 30 30 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55  0003 /* SQLITE_U
f200: 54 46 38 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  TF8, SQLITE_UTF1
f210: 36 42 45 20 6f 72 20 55 54 46 31 36 4c 45 20 2a  6BE or UTF16LE *
f220: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f230: 5f 46 55 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30  _FUNC_LIKE     0
f240: 78 30 30 30 34 20 2f 2a 20 43 61 6e 64 69 64 61  x0004 /* Candida
f250: 74 65 20 66 6f 72 20 74 68 65 20 4c 49 4b 45 20  te for the LIKE 
f260: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a  optimization */.
f270: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f280: 55 4e 43 5f 43 41 53 45 20 20 20 20 20 30 78 30  UNC_CASE     0x0
f290: 30 30 38 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73  008 /* Case-sens
f2a0: 69 74 69 76 65 20 4c 49 4b 45 2d 74 79 70 65 20  itive LIKE-type 
f2b0: 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  function */.#def
f2c0: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
f2d0: 45 50 48 45 4d 20 20 20 20 30 78 30 30 31 30 20  EPHEM    0x0010 
f2e0: 2f 2a 20 45 70 68 65 6d 65 72 61 6c 2e 20 20 44  /* Ephemeral.  D
f2f0: 65 6c 65 74 65 20 77 69 74 68 20 56 44 42 45 20  elete with VDBE 
f300: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f310: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20  E_FUNC_NEEDCOLL 
f320: 30 78 30 30 32 30 20 2f 2a 20 73 71 6c 69 74 65  0x0020 /* sqlite
f330: 33 47 65 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28  3GetFuncCollSeq(
f340: 29 20 6d 69 67 68 74 20 62 65 20 63 61 6c 6c 65  ) might be calle
f350: 64 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  d*/.#define SQLI
f360: 54 45 5f 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20  TE_FUNC_LENGTH  
f370: 20 30 78 30 30 34 30 20 2f 2a 20 42 75 69 6c 74   0x0040 /* Built
f380: 2d 69 6e 20 6c 65 6e 67 74 68 28 29 20 66 75 6e  -in length() fun
f390: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
f3a0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
f3b0: 45 4f 46 20 20 20 30 78 30 30 38 30 20 2f 2a 20  EOF   0x0080 /* 
f3c0: 42 75 69 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28  Built-in typeof(
f3d0: 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64  ) function */.#d
f3e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f3f0: 43 5f 43 4f 55 4e 54 20 20 20 20 30 78 30 31 30  C_COUNT    0x010
f400: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f  0 /* Built-in co
f410: 75 6e 74 28 2a 29 20 61 67 67 72 65 67 61 74 65  unt(*) aggregate
f420: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f430: 54 45 5f 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45  TE_FUNC_COALESCE
f440: 20 30 78 30 32 30 30 20 2f 2a 20 42 75 69 6c 74   0x0200 /* Built
f450: 2d 69 6e 20 63 6f 61 6c 65 73 63 65 28 29 20 6f  -in coalesce() o
f460: 72 20 69 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64  r ifnull() */.#d
f470: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f480: 43 5f 55 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30  C_UNLIKELY 0x040
f490: 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e  0 /* Built-in un
f4a0: 6c 69 6b 65 6c 79 28 29 20 66 75 6e 63 74 69 6f  likely() functio
f4b0: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
f4c0: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
f4d0: 54 20 30 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73  T 0x0800 /* Cons
f4e0: 74 61 6e 74 20 69 6e 70 75 74 73 20 67 69 76 65  tant inputs give
f4f0: 20 61 20 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70   a constant outp
f500: 75 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ut */.#define SQ
f510: 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58  LITE_FUNC_MINMAX
f520: 20 20 20 30 78 31 30 30 30 20 2f 2a 20 54 72 75     0x1000 /* Tru
f530: 65 20 66 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20  e for min() and 
f540: 6d 61 78 28 29 20 61 67 67 72 65 67 61 74 65 73  max() aggregates
f550: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
f560: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20  TE_FUNC_SLOCHNG 
f570: 20 30 78 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77   0x2000 /* "Slow
f580: 20 43 68 61 6e 67 65 22 2e 20 56 61 6c 75 65 20   Change". Value 
f590: 63 6f 6e 73 74 61 6e 74 20 64 75 72 69 6e 67 20  constant during 
f5a0: 61 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  a.              
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5c0: 20 20 20 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20        ** single 
f5d0: 71 75 65 72 79 20 2d 20 6d 69 67 68 74 20 63 68  query - might ch
f5e0: 61 6e 67 65 20 6f 76 65 72 20 74 69 6d 65 20 2a  ange over time *
f5f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f600: 5f 46 55 4e 43 5f 41 46 46 49 4e 49 54 59 20 30  _FUNC_AFFINITY 0
f610: 78 34 30 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69  x4000 /* Built-i
f620: 6e 20 61 66 66 69 6e 69 74 79 28 29 20 66 75 6e  n affinity() fun
f630: 63 74 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  ction */../*.** 
f640: 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68  The following th
f650: 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43  ree macros, FUNC
f660: 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43  TION(), LIKEFUNC
f670: 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54 45  () and AGGREGATE
f680: 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20 74  () are.** used t
f690: 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e 69  o create the ini
f6a0: 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74 68  tializers for th
f6b0: 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63 74  e FuncDef struct
f6c0: 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55  ures..**.**   FU
f6d0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
f6e0: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
f6f0: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73 65  Func).**     Use
f700: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
f710: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
f720: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
f730: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
f740: 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20      implemented 
f750: 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78 46  by C function xF
f760: 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74 73  unc that accepts
f770: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 2e   nArg arguments.
f780: 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75   The.**     valu
f790: 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72 67  e passed as iArg
f7a0: 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28 76   is cast to a (v
f7b0: 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20 61  oid*) and made a
f7c0: 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20  vailable.**     
f7d0: 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74 61  as the user-data
f7e0: 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64   (sqlite3_user_d
f7f0: 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20 66  ata()) for the f
f800: 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20  unction. If.**  
f810: 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43 20     argument bNC 
f820: 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74 68  is true, then th
f830: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  e SQLITE_FUNC_NE
f840: 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73  EDCOLL flag is s
f850: 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e  et..**.**   VFUN
f860: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f870: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f880: 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65  unc).**     Like
f890: 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70 74   FUNCTION except
f8a0: 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53 51   it omits the SQ
f8b0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f8c0: 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20  NT flag..**.**  
f8d0: 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65   DFUNCTION(zName
f8e0: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
f8f0: 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20  C, xFunc).**    
f900: 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65   Like FUNCTION e
f910: 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20 74  xcept it omits t
f920: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  he SQLITE_FUNC_C
f930: 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e 64  ONSTANT flag and
f940: 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68 65  .**     adds the
f950: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f   SQLITE_FUNC_SLO
f960: 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65 64  CHNG flag.  Used
f970: 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d 65   for date & time
f980: 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20   functions.**   
f990: 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20    and functions 
f9a0: 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72 73  like sqlite_vers
f9b0: 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20 63  ion() that can c
f9c0: 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20 64  hange, but not d
f9d0: 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73  uring.**     a s
f9e0: 69 6e 67 6c 65 20 71 75 65 72 79 2e 20 20 54 68  ingle query.  Th
f9f0: 65 20 69 41 72 67 20 69 73 20 69 67 6e 6f 72 65  e iArg is ignore
fa00: 64 2e 20 20 54 68 65 20 75 73 65 72 2d 64 61 74  d.  The user-dat
fa10: 61 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 0a  a is always set.
fa20: 2a 2a 20 20 20 20 20 74 6f 20 61 20 4e 55 4c 4c  **     to a NULL
fa30: 20 70 6f 69 6e 74 65 72 2e 20 20 54 68 65 20 62   pointer.  The b
fa40: 4e 43 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  NC parameter is 
fa50: 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20  not used..**.** 
fa60: 20 20 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d    PURE_DATE(zNam
fa70: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
fa80: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
fa90: 20 20 55 73 65 64 20 66 6f 72 20 22 70 75 72 65    Used for "pure
faa0: 22 20 64 61 74 65 2f 74 69 6d 65 20 66 75 6e 63  " date/time func
fab0: 74 69 6f 6e 73 2c 20 74 68 69 73 20 6d 61 63 72  tions, this macr
fac0: 6f 20 69 73 20 6c 69 6b 65 20 44 46 55 4e 43 54  o is like DFUNCT
fad0: 49 4f 4e 0a 2a 2a 20 20 20 20 20 65 78 63 65 70  ION.**     excep
fae0: 74 20 74 68 61 74 20 69 74 20 64 6f 65 73 20 73  t that it does s
faf0: 65 74 20 74 68 65 20 53 51 4c 49 54 45 5f 46 55  et the SQLITE_FU
fb00: 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67  NC_CONSTANT flag
fb10: 73 2e 20 20 69 41 72 67 20 69 73 0a 2a 2a 20 20  s.  iArg is.**  
fb20: 20 20 20 69 67 6e 6f 72 65 64 20 61 6e 64 20 74     ignored and t
fb30: 68 65 20 75 73 65 72 2d 64 61 74 61 20 66 6f 72  he user-data for
fb40: 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73   these functions
fb50: 20 69 73 20 73 65 74 20 74 6f 20 61 6e 20 0a 2a   is set to an .*
fb60: 2a 20 20 20 20 20 61 72 62 69 74 72 61 72 79 20  *     arbitrary 
fb70: 6e 6f 6e 2d 4e 55 4c 4c 20 70 6f 69 6e 74 65 72  non-NULL pointer
fb80: 2e 20 20 54 68 65 20 62 4e 43 20 70 61 72 61 6d  .  The bNC param
fb90: 65 74 65 72 20 69 73 20 6e 6f 74 20 75 73 65 64  eter is not used
fba0: 2e 0a 2a 2a 0a 2a 2a 20 20 20 41 47 47 52 45 47  ..**.**   AGGREG
fbb0: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
fbc0: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 53 74 65   iArg, bNC, xSte
fbd0: 70 2c 20 78 46 69 6e 61 6c 29 0a 2a 2a 20 20 20  p, xFinal).**   
fbe0: 20 20 55 73 65 64 20 74 6f 20 63 72 65 61 74 65    Used to create
fbf0: 20 61 6e 20 61 67 67 72 65 67 61 74 65 20 66 75   an aggregate fu
fc00: 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f  nction definitio
fc10: 6e 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79  n implemented by
fc20: 0a 2a 2a 20 20 20 20 20 74 68 65 20 43 20 66 75  .**     the C fu
fc30: 6e 63 74 69 6f 6e 73 20 78 53 74 65 70 20 61 6e  nctions xStep an
fc40: 64 20 78 46 69 6e 61 6c 2e 20 54 68 65 20 66 69  d xFinal. The fi
fc50: 72 73 74 20 66 6f 75 72 20 70 61 72 61 6d 65 74  rst four paramet
fc60: 65 72 73 0a 2a 2a 20 20 20 20 20 61 72 65 20 69  ers.**     are i
fc70: 6e 74 65 72 70 72 65 74 65 64 20 69 6e 20 74 68  nterpreted in th
fc80: 65 20 73 61 6d 65 20 77 61 79 20 61 73 20 74 68  e same way as th
fc90: 65 20 66 69 72 73 74 20 34 20 70 61 72 61 6d 65  e first 4 parame
fca0: 74 65 72 73 20 74 6f 0a 2a 2a 20 20 20 20 20 46  ters to.**     F
fcb0: 55 4e 43 54 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a  UNCTION()..**.**
fcc0: 20 20 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d     LIKEFUNC(zNam
fcd0: 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20 66  e, nArg, pArg, f
fce0: 6c 61 67 73 29 0a 2a 2a 20 20 20 20 20 55 73 65  lags).**     Use
fcf0: 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73 63  d to create a sc
fd00: 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64 65  alar function de
fd10: 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66 75  finition of a fu
fd20: 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20  nction zName.** 
fd30: 20 20 20 20 74 68 61 74 20 61 63 63 65 70 74 73      that accepts
fd40: 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73 20   nArg arguments 
fd50: 61 6e 64 20 69 73 20 69 6d 70 6c 65 6d 65 6e 74  and is implement
fd60: 65 64 20 62 79 20 61 20 63 61 6c 6c 20 74 6f 20  ed by a call to 
fd70: 43 0a 2a 2a 20 20 20 20 20 66 75 6e 63 74 69 6f  C.**     functio
fd80: 6e 20 6c 69 6b 65 46 75 6e 63 2e 20 41 72 67 75  n likeFunc. Argu
fd90: 6d 65 6e 74 20 70 41 72 67 20 69 73 20 63 61 73  ment pArg is cas
fda0: 74 20 74 6f 20 61 20 28 76 6f 69 64 20 2a 29 20  t to a (void *) 
fdb0: 61 6e 64 20 6d 61 64 65 0a 2a 2a 20 20 20 20 20  and made.**     
fdc0: 61 76 61 69 6c 61 62 6c 65 20 61 73 20 74 68 65  available as the
fdd0: 20 66 75 6e 63 74 69 6f 6e 20 75 73 65 72 2d 64   function user-d
fde0: 61 74 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65  ata (sqlite3_use
fdf0: 72 5f 64 61 74 61 28 29 29 2e 20 54 68 65 0a 2a  r_data()). The.*
fe00: 2a 20 20 20 20 20 46 75 6e 63 44 65 66 2e 66 6c  *     FuncDef.fl
fe10: 61 67 73 20 76 61 72 69 61 62 6c 65 20 69 73 20  ags variable is 
fe20: 73 65 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  set to the value
fe30: 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20 66   passed as the f
fe40: 6c 61 67 73 0a 2a 2a 20 20 20 20 20 70 61 72 61  lags.**     para
fe50: 6d 65 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e  meter..*/.#defin
fe60: 65 20 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65  e FUNCTION(zName
fe70: 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e  , nArg, iArg, bN
fe80: 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e  C, xFunc) \.  {n
fe90: 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43  Arg, SQLITE_FUNC
fea0: 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c 49 54 45  _CONSTANT|SQLITE
feb0: 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54  _UTF8|(bNC*SQLIT
fec0: 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29  E_FUNC_NEEDCOLL)
fed0: 2c 20 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e  , \.   SQLITE_IN
fee0: 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c 20  T_TO_PTR(iArg), 
fef0: 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e  0, xFunc, 0, #zN
ff00: 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69  ame, {0} }.#defi
ff10: 6e 65 20 56 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  ne VFUNCTION(zNa
ff20: 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20  me, nArg, iArg, 
ff30: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
ff40: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55 54  {nArg, SQLITE_UT
ff50: 46 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46  F8|(bNC*SQLITE_F
ff60: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
ff70: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
ff80: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
ff90: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
ffa0: 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
ffb0: 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c  DFUNCTION(zName,
ffc0: 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
ffd0: 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
ffe0: 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
fff0: 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
10000 54 46 38 2c 20 5c 0a 20 20 20 30 2c 20 30 2c 20  TF8, \.   0, 0, 
10010 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
10020 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
10030 50 55 52 45 5f 44 41 54 45 28 7a 4e 61 6d 65 2c  PURE_DATE(zName,
10040 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43   nArg, iArg, bNC
10050 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41  , xFunc) \.  {nA
10060 72 67 2c 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  rg, SQLITE_FUNC_
10070 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54 45 5f 55  SLOCHNG|SQLITE_U
10080 54 46 38 7c 53 51 4c 49 54 45 5f 46 55 4e 43 5f  TF8|SQLITE_FUNC_
10090 43 4f 4e 53 54 41 4e 54 2c 20 5c 0a 20 20 20 28  CONSTANT, \.   (
100a0 76 6f 69 64 2a 29 26 73 71 6c 69 74 65 33 43 6f  void*)&sqlite3Co
100b0 6e 66 69 67 2c 20 30 2c 20 78 46 75 6e 63 2c 20  nfig, 0, xFunc, 
100c0 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
100d0 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
100e0 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  N2(zName, nArg, 
100f0 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
10100 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
10110 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46    {nArg,SQLITE_F
10120 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
10130 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
10140 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
10150 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c  LL)|extraFlags,\
10160 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
10170 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
10180 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
10190 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
101a0 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
101b0 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
101c0 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
101d0 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
101e0 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
101f0 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
10200 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
10210 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
10220 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
10230 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b  e, }.#define LIK
10240 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
10250 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c  g, arg, flags) \
10260 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
10270 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
10280 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
10290 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61  , \.   (void *)a
102a0 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
102b0 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
102c0 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
102d0 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
102e0 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
102f0 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
10300 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
10310 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
10320 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
10330 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
10340 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
10350 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20  ,xFinal,#zName, 
10360 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  {0}}.#define AGG
10370 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e  REGATE2(zName, n
10380 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
10390 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74  tep, xFinal, ext
103a0 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
103b0 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
103c0 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
103d0 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
103e0 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54  lags, \.   SQLIT
103f0 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
10400 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  ), 0, xStep,xFin
10410 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  al,#zName, {0}}.
10420 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65  ./*.** All curre
10430 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  nt savepoints ar
10440 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  e stored in a li
10450 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
10460 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33  ng at.** sqlite3
10470 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65  .pSavepoint. The
10480 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69   first element i
10490 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68  n the list is th
104a0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a  e most recently.
104b0 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f  ** opened savepo
104c0 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20  int. Savepoints 
104d0 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65  are added to the
104e0 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62   list by the vdb
104f0 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e  e.** OP_Savepoin
10500 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
10510 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  /.struct Savepoi
10520 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  nt {.  char *zNa
10530 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
10540 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61             /* Sa
10550 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75  vepoint name (nu
10560 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f  l-terminated) */
10570 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
10580 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
10590 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
105a0 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20   of deferred fk 
105b0 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  violations */.  
105c0 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
105d0 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
105e0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
105f0 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b   deferred imm fk
10600 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  . */.  Savepoint
10610 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
10620 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
10630 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28  rent savepoint (
10640 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f  if any) */.};../
10650 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
10660 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74  ng are used as t
10670 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
10680 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61  ter to sqlite3Sa
10690 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e  vepoint(),.** an
106a0 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75  d as the P1 argu
106b0 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53  ment to the OP_S
106c0 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
106d0 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  tion..*/.#define
106e0 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
106f0 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
10700 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
10710 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  E    1.#define S
10720 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
10730 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  K   2.../*.** Ea
10740 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65  ch SQLite module
10750 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20   (virtual table 
10760 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64  definition) is d
10770 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20  efined by an.** 
10780 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
10790 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
107a0 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74  ure, stored in t
107b0 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75  he sqlite3.aModu
107c0 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  le.** hash table
107d0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75  ..*/.struct Modu
107e0 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  le {.  const sql
107f0 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
10800 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43  dule;       /* C
10810 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73  allback pointers
10820 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
10830 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
10840 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
10850 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  me passed to cre
10860 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
10870 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20    void *pAux;   
10880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10890 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70         /* pAux p
108a0 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
108b0 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
108c0 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
108d0 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20  oid *);         
108e0 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73     /* Module des
108f0 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
10900 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70   */.  Table *pEp
10910 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  oTab;           
10920 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
10930 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f  onymous table fo
10940 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f  r this module */
10950 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72  .};../*.** infor
10960 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
10970 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53  h column of an S
10980 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  QL table is held
10990 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   in an instance.
109a0 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
109b0 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
109c0 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20  Column {.  char 
109d0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
109e0 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ame of this colu
109f0 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74  mn, \000, then t
10a00 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70  he type */.  Exp
10a10 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
10a20 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
10a30 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
10a40 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
10a50 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
10a60 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
10a70 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
10a80 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
10a90 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
10aa0 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
10ab0 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
10ac0 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
10ad0 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
10ae0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
10af0 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
10b00 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
10b10 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
10b20 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
10b30 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20  f value in this 
10b40 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49  column. sizeof(I
10b50 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  NT)==1 */.  u8 c
10b60 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
10b70 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
10b80 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
10b90 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
10ba0 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
10bb0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
10bc0 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
10bd0 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
10be0 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
10bf0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
10c00 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
10c10 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
10c20 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
10c30 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
10c40 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
10c50 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
10c60 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
10c70 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20  COLFLAG_HASTYPE 
10c80 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79   0x0004    /* Ty
10c90 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20  pe name follows 
10ca0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a  column name */..
10cb0 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
10cc0 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
10cd0 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
10ce0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10cf0 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
10d00 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
10d10 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
10d20 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
10d30 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
10d40 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
10d50 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
10d60 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
10d70 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
10d80 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
10d90 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
10da0 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
10db0 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
10dc0 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
10dd0 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
10de0 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
10df0 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
10e00 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
10e10 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
10e20 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
10e30 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
10e40 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
10e50 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
10e60 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
10e70 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
10e80 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
10e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10ea0 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
10eb0 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
10ec0 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
10ed0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
10ee0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
10ef0 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
10f00 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
10f10 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
10f20 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
10f30 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
10f40 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
10f50 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
10f60 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
10f70 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
10f80 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
10f90 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
10fa0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
10fb0 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
10fc0 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
10fd0 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
10fe0 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
10ff0 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
11000 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
11010 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
11020 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e  QLITE_SO_UNDEFIN
11030 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74  ED -1 /* No sort
11040 20 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64   order specified
11050 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d   */../*.** Colum
11060 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  n affinity types
11070 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73  ..**.** These us
11080 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f  ed to have mnemo
11090 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69  nic name like 'i
110a0 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
110b0 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20  _INTEGER and.** 
110c0 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  't' for SQLITE_A
110d0 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65  FF_TEXT.  But we
110e0 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74   can save a litt
110f0 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70  le space and imp
11100 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65  rove.** the spee
11110 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75  d a little by nu
11120 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75  mbering the valu
11130 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  es consecutively
11140 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68  ..**.** But rath
11150 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
11160 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
11170 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
11180 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
11190 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
111a0 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
111b0 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
111c0 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
111d0 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
111e0 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
111f0 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
11200 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
11210 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
11220 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
11230 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
11240 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
11250 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
11260 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
11270 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
11280 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20  d the BLOB type 
11290 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
112a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
112b0 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65  BLOB     'A'.#de
112c0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
112d0 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
112e0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
112f0 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
11300 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
11310 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
11320 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
11330 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
11340 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
11350 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
11360 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
11370 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
11380 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
11390 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
113a0 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
113b0 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
113c0 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
113d0 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  value..*/.#defin
113e0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
113f0 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a  K     0x47../*.*
11400 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74  * Additional bit
11410 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e   values that can
11420 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e   be ORed with an
11430 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75   affinity withou
11440 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68  t.** changing th
11450 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a  e affinity..**.*
11460 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54  * The SQLITE_NOT
11470 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63  NULL flag is a c
11480 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55  ombination of NU
11490 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e  LLEQ and JUMPIFN
114a0 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65  ULL..** It cause
114b0 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f  s an assert() to
114c0 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20   fire if either 
114d0 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d  operand to a com
114e0 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61  parison.** opera
114f0 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74  tor is NULL.  It
11500 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72   is added to cer
11510 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20  tain comparison 
11520 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20  operators to.** 
11530 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f  prove that the o
11540 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61  perands are alwa
11550 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ys NOT NULL..*/.
11560 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b  #define SQLITE_K
11570 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38  EEPNULL     0x08
11580 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63    /* Used by vec
11590 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a  tor == or <> */.
115a0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
115b0 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30  UMPIFNULL   0x10
115c0 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
115d0 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
115e0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
115f0 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
11600 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f      0x20  /* Sto
11610 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
11620 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
11630 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
11640 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
11650 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
11660 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  LL=NULL */.#defi
11670 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  ne SQLITE_NOTNUL
11680 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20  L      0x90  /* 
11690 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72  Assert that oper
116a0 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e  ands are never N
116b0 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ULL */../*.** An
116c0 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
116d0 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20  type is created 
116e0 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c  for each virtual
116f0 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69   table present i
11700 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  n.** the databas
11710 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
11720 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
11730 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
11740 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
11750 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
11760 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
11770 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
11780 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
11790 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
117a0 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
117b0 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
117c0 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
117d0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
117e0 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
117f0 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
11800 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
11810 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
11820 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
11830 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
11840 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  ble.** implement
11850 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76  ation. sqlite3_v
11860 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e  tab* handles can
11870 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62   not be shared b
11880 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61  etween.** databa
11890 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
118a0 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
118b0 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
118c0 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ory database.** 
118d0 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
118e0 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65  , as the impleme
118f0 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74  ntation often st
11900 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ores the databas
11910 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
11920 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f  handle passed to
11930 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e   it via the xCon
11940 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74  nect() or xCreat
11950 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75  e() method.** du
11960 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
11970 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20  ion internally. 
11980 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  This database co
11990 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
119a0 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75  may.** then be u
119b0 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75  sed by the virtu
119c0 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
119d0 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73  ntation to acces
119e0 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a  s real tables.**
119f0 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
11a00 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68  base. So that th
11a10 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72  ey appear as par
11a20 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73  t of the callers
11a30 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
11a40 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
11a50 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
11a60 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
11a70 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
11a80 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
11a90 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
11aa0 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
11ab0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
11ac0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
11ad0 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
11ae0 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
11af0 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
11b00 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
11b10 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
11b20 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
11b30 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
11b40 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
11b50 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
11b60 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
11b70 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
11b80 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
11b90 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
11ba0 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
11bb0 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
11bc0 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
11bd0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
11be0 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
11bf0 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
11c00 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
11c10 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
11c20 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
11c30 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
11c40 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
11c50 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
11c60 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
11c70 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
11c80 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
11c90 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
11ca0 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
11cb0 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
11cc0 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
11cd0 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
11ce0 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
11cf0 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
11d00 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
11d10 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
11d20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74  are not.** delet
11d30 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
11d40 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
11d50 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
11d60 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65  nect()ed.** imme
11d70 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
11d80 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
11d90 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
11da0 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
11db0 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
11dc0 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
11dd0 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
11de0 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
11df0 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
11e00 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
11e10 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
11e20 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
11e30 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a  /xDisconnected.*
11e40 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
11e50 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
11e60 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
11e70 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
11e80 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
11e90 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
11ea0 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
11eb0 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
11ec0 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
11ed0 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
11ee0 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
11ef0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
11f00 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
11f10 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
11f20 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
11f30 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
11f40 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
11f50 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
11f60 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
11f70 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
11f80 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
11f90 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
11fa0 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
11fb0 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
11fc0 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
11fd0 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20  allocated by.** 
11fe0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
11ff0 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
12000 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
12010 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
12020 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72  db as.** the fir
12030 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
12040 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
12050 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
12060 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
12070 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
12080 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
12090 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
120a0 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
120b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
120c0 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
120d0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
120e0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
120f0 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
12100 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
12110 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
12120 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
12130 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
12140 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
12150 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
12160 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
12170 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
12180 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
12190 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
121a0 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
121b0 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
121c0 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
121d0 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
121e0 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
121f0 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
12200 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
12210 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
12220 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
12230 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20  *.** The schema 
12240 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62  for each SQL tab
12250 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72  le and view is r
12260 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
12270 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e  mory.** by an in
12280 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
12290 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
122a0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  e..*/.struct Tab
122b0 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
122c0 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
122d0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
122e0 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f   or view */.  Co
122f0 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20  lumn *aCol;     
12300 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
12310 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
12320 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
12330 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
12340 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
12350 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
12360 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
12370 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
12380 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
12390 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
123a0 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
123b0 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
123c0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
123d0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
123e0 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
123f0 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
12400 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
12410 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
12420 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
12430 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
12440 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72  column */.  Expr
12450 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
12460 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
12470 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20  nstraints */.   
12480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12490 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73      /*   ... als
124a0 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e  o used as column
124b0 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20   name list in a 
124c0 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  VIEW */.  int tn
124d0 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
124e0 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67  * Root BTree pag
124f0 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
12500 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65   */.  u32 nTabRe
12510 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  f;         /* Nu
12520 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
12530 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
12540 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73  /.  u32 tabFlags
12550 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
12560 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
12570 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
12580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
12590 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
125a0 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
125b0 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20   the rowid */.  
125c0 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  i16 nCol;       
125d0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
125e0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
125f0 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  s table */.  Log
12600 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
12610 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
12620 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
12630 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
12640 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
12650 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
12660 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
12670 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
12680 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
12690 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
126a0 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
126b0 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
126c0 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
126d0 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
126e0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
126f0 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79  .#endif.  u8 key
12700 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  Conf;          /
12710 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20  * What to do in 
12720 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65  case of uniquene
12730 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69  ss conflict on i
12740 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  PKey */.#ifndef 
12750 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
12760 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64  RTABLE.  int add
12770 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a  ColOffset;    /*
12780 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54   Offset in CREAT
12790 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20  E TABLE stmt to 
127a0 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
127b0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
127c0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
127d0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
127e0 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  t nModuleArg;   
127f0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12800 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
12810 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61   module */.  cha
12820 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b  r **azModuleArg;
12830 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31    /* 0: module 1
12840 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62  : schema 2: vtab
12850 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73   name 3...: args
12860 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56   */.  VTable *pV
12870 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69  Table;     /* Li
12880 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a  st of VTable obj
12890 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ects. */.#endif.
128a0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
128b0 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ger;   /* List o
128c0 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65  f triggers store
128d0 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a  d in pSchema */.
128e0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
128f0 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
12900 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
12910 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  his table */.  T
12920 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69  able *pNextZombi
12930 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74  e;  /* Next on t
12940 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65  he Parse.pZombie
12950 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  Tab list */.};..
12960 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
12970 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74  lues for Table.t
12980 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54  abFlags..**.** T
12990 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c  F_OOOHidden appl
129a0 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72  ies to tables or
129b0 20 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20   view that have 
129c0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74  hidden columns t
129d0 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f  hat are.** follo
129e0 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65  wed by non-hidde
129f0 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d  n columns.  Exam
12a00 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49  ple:  "CREATE VI
12a10 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53  RTUAL TABLE x US
12a20 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48  ING.** vtab1(a H
12a30 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69  IDDEN, b);".  Si
12a40 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e  nce "b" is a non
12a50 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62  -hidden column b
12a60 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e  ut "a" is hidden
12a70 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48  ,.** the TF_OOOH
12a80 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20  idden attribute 
12a90 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74  would apply in t
12aa0 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20  his case.  Such 
12ab0 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a  tables require.*
12ac0 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  * special handli
12ad0 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54  ng during INSERT
12ae0 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a   processing..*/.
12af0 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
12b00 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30  nly        0x000
12b10 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c  1    /* Read-onl
12b20 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a  y system table *
12b30 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68  /.#define TF_Eph
12b40 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30  emeral       0x0
12b50 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  002    /* An eph
12b60 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
12b70 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
12b80 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30  imaryKey   0x000
12b90 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
12ba0 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
12bb0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
12bc0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
12bd0 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67  0008    /* Integ
12be0 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
12bf0 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  s autoincrement 
12c00 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
12c10 73 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78  sStat1        0x
12c20 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c  0010    /* nRowL
12c30 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73  ogEst set from s
12c40 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23  qlite_stat1 */.#
12c50 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75  define TF_Withou
12c60 74 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30  tRowid    0x0020
12c70 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e      /* No rowid.
12c80 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73    PRIMARY KEY is
12c90 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66   the key */.#def
12ca0 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  ine TF_NoVisible
12cb0 52 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20  Rowid  0x0040   
12cc0 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69   /* No user-visi
12cd0 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75  ble "rowid" colu
12ce0 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  mn */.#define TF
12cf0 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20  _OOOHidden      
12d00 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75   0x0080    /* Ou
12d10 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65  t-of-Order hidde
12d20 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65  n columns */.#de
12d30 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65  fine TF_StatsUse
12d40 64 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20  d       0x0100  
12d50 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e    /* Query plann
12d60 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66  er decisions aff
12d70 65 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20  ected by.       
12d80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
12da0 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45   Index.aiRowLogE
12db0 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23  st[] values */.#
12dc0 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74  define TF_HasNot
12dd0 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30  Null      0x0200
12de0 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20      /* Contains 
12df0 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
12e00 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ints */../*.** T
12e10 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
12e20 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
12e30 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
12e40 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
12e50 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
12e60 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
12e70 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
12e80 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
12e90 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
12ea0 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
12eb0 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
12ec0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12ed0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
12ee0 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
12ef0 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29  ual(X)      ((X)
12f00 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65  ->nModuleArg).#e
12f10 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
12f20 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
12f30 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
12f40 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
12f50 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20  ine if a column 
12f60 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72  is hidden.  IsOr
12f70 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
12f80 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72  mn().** only wor
12f90 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75  ks for non-virtu
12fa0 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e  al tables (ordin
12fb0 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76  ary tables and v
12fc0 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20  iews) and is.** 
12fd0 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c  always false unl
12fe0 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ess SQLITE_ENABL
12ff0 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
13000 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
13010 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c  e.** IsHiddenCol
13020 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67  umn() macro is g
13030 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a  eneral purpose..
13040 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
13050 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
13060 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20  DEN_COLUMNS).#  
13070 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
13080 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
13090 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
130a0 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
130b0 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
130c0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
130d0 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
130e0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
130f0 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
13100 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
13110 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
13120 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66  UALTABLE).#  def
13130 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
13140 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
13150 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
13160 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
13170 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
13180 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
13190 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a  lumn(X) 0.#else.
131a0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
131b0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
131c0 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
131d0 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
131e0 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
131f0 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65  if.../* Does the
13200 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f   table have a ro
13210 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48  wid */.#define H
13220 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28  asRowid(X)     (
13230 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
13240 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
13250 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69  )==0).#define Vi
13260 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28  sibleRowid(X) ((
13270 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
13280 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
13290 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
132a0 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
132b0 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
132c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
132d0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
132e0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
132f0 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
13300 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
13310 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
13320 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
13330 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
13340 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
13350 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
13360 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
13370 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
13380 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
13390 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
133a0 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
133b0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
133c0 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
133d0 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
133e0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
133f0 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
13400 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
13410 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
13420 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
13430 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
13440 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
13450 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
13460 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
13470 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
13480 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
13490 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
134a0 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
134b0 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
134c0 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
134d0 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
134e0 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
134f0 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
13500 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
13510 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
13520 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
13530 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
13540 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13550 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
13560 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
13570 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
13580 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
13590 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
135a0 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
135b0 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
135c0 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
135d0 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
135e0 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
135f0 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
13600 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
13610 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
13620 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
13630 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
13640 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
13650 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
13660 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
13670 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
13680 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
13690 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
136a0 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
136b0 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
136c0 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
136d0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
136e0 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
136f0 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
13700 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
13710 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
13720 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
13730 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
13740 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
13750 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
13760 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
13770 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
13780 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
13790 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
137a0 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
137b0 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
137c0 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
137d0 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
137e0 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
137f0 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
13800 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
13810 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
13820 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
13830 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13840 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
13850 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
13860 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
13870 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
13880 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
13890 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
138a0 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
138b0 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
138c0 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
138d0 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
138e0 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
138f0 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
13900 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
13910 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
13920 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
13930 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
13940 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
13950 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
13960 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
13970 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
13980 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
13990 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
139a0 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
139b0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
139c0 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
139d0 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
139e0 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
139f0 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
13a00 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
13a10 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
13a20 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
13a30 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
13a40 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
13a50 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
13a60 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
13a70 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
13a80 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
13a90 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
13aa0 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
13ab0 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
13ac0 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
13ad0 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
13ae0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
13af0 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
13b00 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
13b10 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
13b20 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
13b30 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
13b40 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
13b50 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
13b60 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
13b70 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
13b80 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
13b90 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
13ba0 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
13bb0 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
13bc0 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
13bd0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
13be0 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
13bf0 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
13c00 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
13c10 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
13c20 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
13c30 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
13c40 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
13c50 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
13c60 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
13c70 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
13c80 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
13c90 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
13ca0 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
13cb0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
13cc0 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
13cd0 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
13ce0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
13cf0 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
13d00 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
13d10 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
13d20 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
13d30 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
13d40 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
13d50 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
13d60 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
13d70 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
13d80 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
13d90 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
13da0 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
13db0 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
13dc0 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
13dd0 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
13de0 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
13df0 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
13e00 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
13e10 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
13e20 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
13e30 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
13e40 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
13e50 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
13e60 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
13e70 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
13e80 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
13e90 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
13ea0 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
13eb0 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
13ec0 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
13ed0 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
13ee0 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
13ef0 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
13f00 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
13f10 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
13f20 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
13f30 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
13f40 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
13f50 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
13f60 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
13f70 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
13f80 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
13f90 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
13fa0 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
13fb0 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
13fc0 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
13fd0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
13fe0 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
13ff0 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
14000 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
14010 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
14020 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
14030 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
14040 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
14050 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
14060 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
14070 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
14080 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
14090 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
140a0 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
140b0 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
140c0 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
140d0 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
140e0 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
140f0 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
14100 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
14110 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
14120 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
14130 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
14140 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
14150 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
14160 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
14170 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
14180 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
14190 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  TE */..#define O
141a0 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f  E_Restrict 6   /
141b0 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
141c0 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
141d0 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
141e0 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
141f0 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a  _SetNull  7   /*
14200 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
14210 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
14220 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
14230 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a  _SetDflt  8   /*
14240 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
14250 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
14260 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
14270 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
14280 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20   9   /* Cascade 
14290 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  the changes */..
142a0 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
142b0 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68  lt  10  /* Do wh
142c0 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
142d0 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
142e0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
142f0 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
14300 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
14310 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
14320 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
14330 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
14340 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
14350 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
14360 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  l the.** compari
14370 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
14380 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
14390 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
143a0 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
143b0 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
143c0 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
143d0 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
143e0 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
143f0 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
14400 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
14410 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
14420 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
14430 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
14440 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b  fo {.  u32 nRef;
14450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14460 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63  mber of referenc
14470 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e  es to this KeyIn
14480 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75  fo object */.  u
14490 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
144a0 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
144b0 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
144c0 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
144d0 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 4b 65  ues */.  u16 nKe
144e0 79 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20  yField;      /* 
144f0 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f  Number of key co
14500 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64  lumns in the ind
14510 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 41 6c 6c  ex */.  u16 nAll
14520 46 69 65 6c 64 3b 20 20 20 20 20 20 2f 2a 20 54  Field;      /* T
14530 6f 74 61 6c 20 63 6f 6c 75 6d 6e 73 2c 20 69 6e  otal columns, in
14540 63 6c 75 64 69 6e 67 20 6b 65 79 20 70 6c 75 73  cluding key plus
14550 20 6f 74 68 65 72 73 20 2a 2f 0a 20 20 73 71 6c   others */.  sql
14560 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
14570 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
14580 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
14590 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
145a0 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64       /* Sort ord
145b0 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  er for each colu
145c0 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  mn. */.  CollSeq
145d0 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
145e0 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
145f0 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
14600 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
14610 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62  ;../*.** This ob
14620 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63  ject holds a rec
14630 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65  ord which has be
14640 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e  en parsed out in
14650 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a  to individual.**
14660 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65   fields, for the
14670 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69   purposes of doi
14680 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ng a comparison.
14690 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
146a0 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
146b0 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
146c0 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
146d0 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
146e0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
146f0 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
14700 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
14710 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
14720 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
14730 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
14740 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
14750 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
14760 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
14770 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
14780 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
14790 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
147a0 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
147b0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  pcode..**.** An 
147c0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
147d0 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61   object serves a
147e0 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f  s a "key" for do
147f0 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a  ing a search on.
14800 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72  ** an index b+tr
14810 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20  ee. The goal of 
14820 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f  the search is to
14830 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20   find the entry 
14840 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65  that.** is close
14850 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73  d to the key des
14860 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f  cribed by this o
14870 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a  bject.  This obj
14880 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a  ect might hold.*
14890 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20  * just a prefix 
148a0 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65  of the key.  The
148b0 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
148c0 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a  s is given by.**
148d0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
148e0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  d..**.** The r1 
148f0 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72  and r2 fields ar
14900 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20  e the values to 
14910 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b  return if this k
14920 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a  ey is less than.
14930 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  ** or greater th
14940 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  an a key in the 
14950 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76  btree, respectiv
14960 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20  ely.  These are 
14970 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61  normally.** -1 a
14980 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65  nd +1 respective
14990 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65  ly, but might be
149a0 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20   inverted to +1 
149b0 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d  and -1 if the b-
149c0 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45  tree.** is in DE
149d0 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  SC order..**.** 
149e0 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
149f0 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74  on functions act
14a00 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66  ually return def
14a10 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65  ault_rc when the
14a20 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75  y find.** an equ
14a30 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  als comparison. 
14a40 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
14a50 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e  be -1, 0, or +1.
14a60 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a    If there are.*
14a70 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69  * multiple entri
14a80 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65  es in the b-tree
14a90 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
14aa0 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f  ey (when only lo
14ab0 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20  oking.** at the 
14ac0 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e  first pKeyInfo->
14ad0 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64  nFields,) then d
14ae0 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
14af0 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a   set to -1 to.**
14b00 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
14b10 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  h to find the la
14b20 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20  st match, or +1 
14b30 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61  to cause the sea
14b40 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74  rch to.** find t
14b50 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a  he first match..
14b60 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
14b70 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
14b80 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65  ns will set eqSe
14b90 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68  en to true if th
14ba0 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61  ey ever.** get a
14bb0 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73  nd equal results
14bc0 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20   when comparing 
14bd0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74  this structure t
14be0 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72  o a b-tree recor
14bf0 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75  d..** When defau
14c00 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65  lt_rc!=0, the se
14c10 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75  arch might end u
14c20 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20  p on the record 
14c30 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62  immediately.** b
14c40 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  efore the first 
14c50 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61  match or immedia
14c60 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c  tely after the l
14c70 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a  ast match.  The.
14c80 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20  ** eqSeen field 
14c90 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68  will indicate wh
14ca0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
14cb0 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73  exact match exis
14cc0 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74  ts in the.** b-t
14cd0 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ree..*/.struct U
14ce0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
14cf0 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
14d00 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
14d10 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
14d20 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
14d30 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
14d40 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
14d50 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
14d60 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
14d70 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
14d80 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69  n apMem[] */.  i
14d90 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20  8 default_rc;   
14da0 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
14db0 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20   result if keys 
14dc0 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75  are equal */.  u
14dd0 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  8 errCode;      
14de0 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65     /* Error dete
14df0 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43  cted by xRecordC
14e00 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20  ompare (CORRUPT 
14e10 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69  or NOMEM) */.  i
14e20 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  8 r1;           
14e30 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
14e40 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3c 20  eturn if (lhs < 
14e50 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b  rhs) */.  i8 r2;
14e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14e70 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
14e80 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29 20   if (lhs > rhs) 
14e90 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20  */.  u8 eqSeen; 
14ea0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
14eb0 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20   if an equality 
14ec0 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62  comparison has b
14ed0 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a  een seen */.};..
14ee0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
14ef0 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
14f00 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
14f10 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
14f20 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
14f30 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
14f40 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
14f50 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
14f60 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
14f70 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
14f80 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
14f90 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
14fa0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
14fb0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
14fc0 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
14fd0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
14fe0 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
14ff0 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
15000 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
15010 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
15020 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
15030 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
15040 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
15050 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
15060 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
15070 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
15080 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
15090 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
150a0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
150b0 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
150c0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
150d0 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
150e0 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
150f0 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
15100 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
15110 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
15120 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
15130 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
15140 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
15150 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c  the.** first col
15160 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
15170 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e  d (c3) has an in
15180 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e  dex of 2 in Ex1.
15190 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73  aCol[]..** The s
151a0 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20  econd column to 
151b0 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20  be indexed (c1) 
151c0 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
151d0 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c  0 in.** Ex1.aCol
151e0 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69  [], hence Ex2.ai
151f0 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a  Column[1]==0..**
15200 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e  .** The Index.on
15210 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65  Error field dete
15220 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
15230 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65  r not the indexe
15240 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73  d columns.** mus
15250 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20  t be unique and 
15260 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68  what to do if th
15270 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65  ey are not.  Whe
15280 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d  n Index.onError=
15290 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d  OE_None,.** it m
152a0 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74  eans this is not
152b0 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e   a unique index.
152c0 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69    Otherwise it i
152d0 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  s a unique index
152e0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75  .** and the valu
152f0 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72  e of Index.onErr
15300 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20  or indicate the 
15310 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72  which conflict r
15320 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67  esolution.** alg
15330 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
15340 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
15350 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
15360 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
15370 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
15380 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73  **.** While pars
15390 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42  ing a CREATE TAB
153a0 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44  LE or CREATE IND
153b0 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  EX statement in 
153c0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65  order to.** gene
153d0 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28  rate VDBE code (
153e0 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61  as opposed to pa
153f0 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66  rsing one read f
15400 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61  rom an sqlite_ma
15410 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73  ster.** table as
15420 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67   part of parsing
15430 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74   an existing dat
15440 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74  abase schema), t
15450 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63  ransient instanc
15460 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  es.** of this st
15470 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63  ructure may be c
15480 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20  reated. In this 
15490 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74  case the Index.t
154a0 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a  num variable is.
154b0 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
154c0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
154d0 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  a VDBE instructi
154e0 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61  on, not a databa
154f0 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65  se page.** numbe
15500 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74  r (it cannot - t
15510 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
15520 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65   is not allocate
15530 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45  d until the VDBE
15540 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65  .** program is e
15550 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f  xecuted). See co
15560 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f  nvertToWithoutRo
15570 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64  widTable() for d
15580 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63  etails..*/.struc
15590 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
155a0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
155b0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
155c0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
155d0 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
155e0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
155f0 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
15600 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
15610 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
15620 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
15630 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
15640 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
15650 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
15660 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
15670 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
15680 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
15690 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
156a0 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
156b0 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
156c0 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
156d0 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
156e0 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
156f0 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
15700 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
15710 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
15720 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
15730 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
15740 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
15750 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
15760 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
15770 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
15780 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
15790 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
157a0 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
157b0 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
157c0 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
157d0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61    const char **a
157e0 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72  zColl;     /* Ar
157f0 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
15800 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
15810 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
15820 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
15830 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
15840 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
15850 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
15860 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45   ExprList *aColE
15870 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c  xpr;      /* Col
15880 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  umn expressions 
15890 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
158a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
158b0 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
158c0 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
158d0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
158e0 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
158f0 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
15900 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
15910 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
15920 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
15930 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15940 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
15950 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
15960 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
15970 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15980 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
15990 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
159a0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
159b0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
159c0 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
159d0 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
159e0 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
159f0 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
15a00 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
15a10 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
15a20 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
15a30 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
15a40 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
15a50 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
15a60 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
15a70 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
15a80 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
15a90 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
15aa0 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
15ab0 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
15ac0 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
15ad0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
15ae0 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
15af0 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
15b00 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
15b10 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
15b20 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
15b30 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
15b40 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
15b50 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
15b60 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
15b70 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
15b80 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
15b90 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
15ba0 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  n if true */.  u
15bb0 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31  nsigned hasStat1
15bc0 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77  :1;     /* aiRow
15bd0 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f  LogEst values co
15be0 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73  me from sqlite_s
15bf0 74 61 74 31 20 2a 2f 0a 23 69 66 64 65 66 20 53  tat1 */.#ifdef S
15c00 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
15c10 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e  T3_OR_STAT4.  in
15c20 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
15c30 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15c40 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
15c50 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69  aSample[] */.  i
15c60 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20  nt nSampleCol;  
15c70 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
15c80 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61  of IndexSample.a
15c90 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20  nEq[] and so on 
15ca0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41  */.  tRowcnt *aA
15cb0 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a  vgEq;         /*
15cc0 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c   Average nEq val
15cd0 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74  ues for keys not
15ce0 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20   in aSample */. 
15cf0 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53   IndexSample *aS
15d00 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d  ample;    /* Sam
15d10 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
15d20 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74  -most key */.  t
15d30 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
15d40 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c  ;       /* Non-l
15d50 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31  ogarithmic stat1
15d60 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69   data for this i
15d70 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ndex */.  tRowcn
15d80 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20  t nRowEst0;     
15d90 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
15da0 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20  thmic number of 
15db0 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
15dc0 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  x */.#endif.};..
15dd0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
15de0 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69  lues for Index.i
15df0 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e  dxType.*/.#defin
15e00 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
15e10 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20  _APPDEF      0  
15e20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e   /* Created usin
15e30 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  g CREATE INDEX *
15e40 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
15e50 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20  _IDXTYPE_UNIQUE 
15e60 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c       1   /* Impl
15e70 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20  ements a UNIQUE 
15e80 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
15e90 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
15ea0 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20  TYPE_PRIMARYKEY 
15eb0 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50   2   /* Is the P
15ec0 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74  RIMARY KEY for t
15ed0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20  he table */../* 
15ee0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
15ef0 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d  ndex X is a PRIM
15f00 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
15f10 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61  .#define IsPrima
15f20 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28  ryKeyIndex(X)  (
15f30 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51  (X)->idxType==SQ
15f40 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
15f50 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74  MARYKEY)../* Ret
15f60 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
15f70 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20  x X is a UNIQUE 
15f80 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
15f90 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58   IsUniqueIndex(X
15fa0 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45  )      ((X)->onE
15fb0 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a  rror!=OE_None)..
15fc0 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43  /* The Index.aiC
15fd0 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61  olumn[] values a
15fe0 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69  re normally posi
15ff0 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42  tive integer.  B
16000 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  ut.** there are 
16010 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61  some negative va
16020 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73  lues that have s
16030 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a  pecial meaning:.
16040 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f  */.#define XN_RO
16050 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20  WID     (-1)    
16060 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
16070 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  mn is the rowid 
16080 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58  */.#define XN_EX
16090 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20  PR      (-2)    
160a0 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
160b0 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
160c0 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ion */../*.** Ea
160d0 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
160e0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
160f0 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65  tat3 table is re
16100 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
16110 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ory.** using a s
16120 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
16130 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
16140 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
16150 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
16160 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
16170 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
16180 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
16190 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
161a0 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
161b0 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
161c0 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
161d0 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
161e0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
161f0 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
16200 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
16210 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
16220 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
16230 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
16240 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
16250 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
16260 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
16270 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
16280 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
16290 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
162a0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
162b0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
162c0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
162d0 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
162e0 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
162f0 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
16300 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
16310 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
16320 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
16330 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
16340 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
16350 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
16360 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
16370 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
16380 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
16390 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
163a0 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
163b0 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
163c0 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
163d0 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
163e0 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
163f0 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
16400 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
16410 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
16420 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
16430 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
16440 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
16450 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
16460 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
16470 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
16480 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
16490 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
164a0 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
164b0 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
164c0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
164d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
164e0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
164f0 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
16500 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
16510 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
16520 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
16530 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
16540 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
16550 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
16560 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
16570 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
16580 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
16590 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
165a0 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
165b0 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
165c0 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
165d0 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
165e0 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
165f0 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
16600 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
16610 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
16620 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
16630 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
16640 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
16650 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
16660 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
16670 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
16680 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
16690 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
166a0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
166b0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
166c0 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
166d0 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
166e0 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
166f0 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
16700 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
16710 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
16720 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
16730 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
16740 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
16750 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
16760 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
16770 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
16780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16790 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
167a0 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
167b0 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
167c0 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
167d0 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
167e0 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
167f0 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
16800 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
16810 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
16840 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
16850 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
16860 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
16870 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
16880 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
16890 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
168a0 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
168b0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
168c0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
168d0 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
168e0 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
168f0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
16900 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
16910 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
16920 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
16930 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
16940 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
16950 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
16960 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
16970 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
16980 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
16990 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
169a0 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
169b0 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
169c0 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
169d0 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
169e0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
169f0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16a00 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
16a10 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
16a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16a30 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
16a40 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
16a50 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
16a60 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
16a70 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
16a80 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
16a90 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
16aa0 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
16ab0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
16ac0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
16ad0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
16ae0 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
16af0 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
16b00 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
16b10 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
16b20 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
16b30 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
16b40 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16b50 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
16b60 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
16b70 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
16b80 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
16b90 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
16ba0 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
16bb0 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
16bc0 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
16bd0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
16be0 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
16bf0 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
16c00 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
16c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
16c30 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
16c40 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
16c50 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
16c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16c70 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
16c80 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
16c90 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
16ca0 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
16cb0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16cc0 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
16cd0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
16ce0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
16cf0 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
16d00 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
16d10 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
16d20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
16d30 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16d40 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
16d50 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
16d60 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16d70 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
16d80 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
16d90 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
16da0 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
16db0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
16dc0 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
16dd0 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
16de0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
16df0 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
16e00 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
16e10 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16e20 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
16e30 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
16e40 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
16e50 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
16e60 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
16e70 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
16e80 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
16e90 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
16ea0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
16eb0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
16ec0 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
16ed0 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
16ee0 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
16ef0 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
16f00 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
16f10 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
16f20 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
16f30 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
16f40 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
16f50 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
16f60 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
16f70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
16f80 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
16f90 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
16fa0 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
16fb0 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
16fc0 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
16fd0 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
16fe0 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
16ff0 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
17000 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
17010 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
17020 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
17030 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
17040 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
17050 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
17060 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
17070 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
17080 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
17090 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
170a0 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
170b0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
170c0 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
170d0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
170e0 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
170f0 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
17100 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
17110 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
17120 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
17130 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
17140 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
17150 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
17160 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
17170 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
17180 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
17190 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
171a0 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
171b0 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
171c0 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
171d0 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
171e0 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
171f0 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
17200 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
17210 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
17220 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
17230 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
17240 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
17250 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
17260 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
17270 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
17280 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  B,.** or TK_STRI
17290 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
172a0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
172b0 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
172c0 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
172d0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
172e0 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
172f0 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
17300 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
17310 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72  tains the.** var
17320 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
17330 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
17340 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
17350 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
17360 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
17370 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
17380 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
17390 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
173a0 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
173b0 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
173c0 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
173d0 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
173e0 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
173f0 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
17400 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
17410 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
17420 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
17430 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
17440 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
17450 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
17460 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
17470 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
17480 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
17490 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
174a0 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
174b0 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
174c0 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
174d0 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
174e0 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
174f0 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
17500 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
17510 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
17520 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
17530 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
17540 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
17550 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
17560 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
17570 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
17580 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
17590 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
175a0 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a  s.** valid..**.*
175b0 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
175c0 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
175d0 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
175e0 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
175f0 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
17600 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
17610 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
17620 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
17630 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
17640 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
17650 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
17660 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
17670 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
17680 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
17690 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
176a0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
176b0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
176c0 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
176d0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
176e0 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
176f0 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
17700 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
17710 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
17720 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
17730 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
17740 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
17750 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
17760 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
17770 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
17780 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
17790 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
177a0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
177b0 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
177c0 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
177d0 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61  tion mark.** cha
177e0 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
177f0 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
17800 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
17810 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
17820 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  ndex.** number f
17830 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
17840 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
17850 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
17860 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
17870 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
17880 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
17890 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
178a0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
178b0 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
178c0 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
178d0 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
178e0 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
178f0 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
17900 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
17910 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
17920 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
17930 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
17940 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
17950 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
17960 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
17970 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
17980 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
17990 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
179a0 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
179b0 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
179c0 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
179d0 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
179e0 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
179f0 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
17a00 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
17a10 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
17a20 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
17a30 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
17a40 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
17a50 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
17a60 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
17a70 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
17a80 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
17a90 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
17aa0 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
17ab0 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
17ac0 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
17ad0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
17ae0 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
17af0 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
17b00 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
17b10 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
17b20 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
17b30 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
17b40 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
17b50 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
17b60 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
17b70 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
17b80 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
17b90 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
17ba0 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
17bb0 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
17bc0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
17bd0 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
17be0 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
17bf0 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
17c00 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
17c10 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
17c20 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
17c30 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
17c40 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
17c50 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
17c60 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
17c70 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
17c80 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
17c90 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
17ca0 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
17cb0 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
17cc0 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
17cd0 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
17ce0 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
17cf0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
17d00 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
17d10 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
17d20 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
17d30 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
17d40 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
17d50 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
17d60 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
17d70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
17d80 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
17d90 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
17da0 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
17db0 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
17dc0 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
17dd0 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
17de0 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
17df0 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
17e00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
17e10 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
17e20 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
17e30 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
17e40 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
17e50 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
17e60 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
17e70 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
17e80 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
17e90 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
17ea0 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
17eb0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
17ec0 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
17ed0 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
17ee0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
17ef0 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
17f00 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
17f10 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
17f20 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
17f30 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
17f40 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
17f50 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
17f60 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
17f70 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
17f80 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
17f90 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
17fa0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
17fb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17fe0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
17ff0 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
18000 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
18010 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
18020 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
18030 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
18040 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
18050 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
18060 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
18070 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
18080 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
18090 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
180a0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
180b0 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
180c0 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
180d0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
180e0 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
180f0 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
18100 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
18110 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
18120 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
18130 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
18140 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
18150 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
18160 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
18170 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
18180 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
18190 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
181a0 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
181b0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
181c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
181f0 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
18200 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
18210 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
18220 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
18230 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
18240 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
18250 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
18260 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
18270 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
18280 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
18290 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
182a0 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
182b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
182c0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
182d0 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
182e0 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18300 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
18310 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
18320 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
18330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18340 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
18350 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
18360 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20  ikelihood.      
18370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18380 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a     ** TK_SELECT:
18390 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66   1st register of
183a0 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
183b0 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
183c0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
183d0 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
183e0 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
183f0 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
18400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18410 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
18420 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
18430 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20  always >= 1)..  
18440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18450 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
18460 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75  ECT_COLUMN: colu
18470 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
18480 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36   vector */.  i16
18490 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
184a0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
184b0 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
184c0 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
184d0 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
184e0 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
184f0 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
18500 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
18510 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
18520 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
18530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
18540 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
18550 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
18560 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
18570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18580 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
18590 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
185a0 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
185b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
185c0 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
185d0 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
185e0 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
185f0 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
18600 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
18610 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
18620 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
18630 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
18640 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
18650 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
18660 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 43   expressions.  C
18670 61 6e 20 62 65 20 4e 55 4c 4c 0a 20 20 20 20 20  an be NULL.     
18680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18690 20 20 20 20 2a 2a 20 66 6f 72 20 61 20 63 6f 6c      ** for a col
186a0 75 6d 6e 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  umn of an index 
186b0 6f 6e 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  on an expression
186c0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68   */.};../*.** Th
186d0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20  e following are 
186e0 74 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20  the meanings of 
186f0 62 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72  bits in the Expr
18700 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f  .flags field..*/
18710 0a 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d  .#define EP_From
18720 4a 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f  Join  0x000001 /
18730 2a 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20  * Originates in 
18740 4f 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20  ON/USING clause 
18750 6f 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f  of outer join */
18760 0a 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20  .#define EP_Agg 
18770 20 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f        0x000002 /
18780 2a 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  * Contains one o
18790 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
187a0 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20   functions */.  
187b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
187c0 2f 2a 20 30 78 30 30 30 30 30 34 20 2f 2f 20 61  /* 0x000004 // a
187d0 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 75 73 65  vailable for use
187e0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
187f0 20 20 20 20 20 20 2f 2a 20 30 78 30 30 30 30 30        /* 0x00000
18800 38 20 2f 2f 20 61 76 61 69 6c 61 62 6c 65 20 66  8 // available f
18810 6f 72 20 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  or use */.#defin
18820 65 20 45 50 5f 44 69 73 74 69 6e 63 74 20 20 30  e EP_Distinct  0
18830 78 30 30 30 30 31 30 20 2f 2a 20 41 67 67 72 65  x000010 /* Aggre
18840 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 77 69  gate function wi
18850 74 68 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77  th DISTINCT keyw
18860 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ord */.#define E
18870 50 5f 56 61 72 53 65 6c 65 63 74 20 30 78 30 30  P_VarSelect 0x00
18880 30 30 32 30 20 2f 2a 20 70 53 65 6c 65 63 74 20  0020 /* pSelect 
18890 69 73 20 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e  is correlated, n
188a0 6f 74 20 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23  ot constant */.#
188b0 64 65 66 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f  define EP_DblQuo
188c0 74 65 64 20 30 78 30 30 30 30 34 30 20 2f 2a 20  ted 0x000040 /* 
188d0 74 6f 6b 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67  token.z was orig
188e0 69 6e 61 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20  inally in "..." 
188f0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49 6e  */.#define EP_In
18900 66 69 78 46 75 6e 63 20 30 78 30 30 30 30 38 30  fixFunc 0x000080
18910 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 61 6e 20   /* True for an 
18920 69 6e 66 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20  infix function: 
18930 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20  LIKE, GLOB, etc 
18940 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
18950 6c 6c 61 74 65 20 20 20 30 78 30 30 30 31 30 30  llate   0x000100
18960 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e   /* Tree contain
18970 73 20 61 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f  s a TK_COLLATE o
18980 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69  perator */.#defi
18990 6e 65 20 45 50 5f 47 65 6e 65 72 69 63 20 20 20  ne EP_Generic   
189a0 30 78 30 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f  0x000200 /* Igno
189b0 72 65 20 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66  re COLLATE or af
189c0 66 69 6e 69 74 79 20 6f 6e 20 74 68 69 73 20 74  finity on this t
189d0 72 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ree */.#define E
189e0 50 5f 49 6e 74 56 61 6c 75 65 20 20 30 78 30 30  P_IntValue  0x00
189f0 30 34 30 30 20 2f 2a 20 49 6e 74 65 67 65 72 20  0400 /* Integer 
18a00 76 61 6c 75 65 20 63 6f 6e 74 61 69 6e 65 64 20  value contained 
18a10 69 6e 20 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23  in u.iValue */.#
18a20 64 65 66 69 6e 65 20 45 50 5f 78 49 73 53 65 6c  define EP_xIsSel
18a30 65 63 74 20 30 78 30 30 30 38 30 30 20 2f 2a 20  ect 0x000800 /* 
18a40 78 2e 70 53 65 6c 65 63 74 20 69 73 20 76 61 6c  x.pSelect is val
18a50 69 64 20 28 6f 74 68 65 72 77 69 73 65 20 78 2e  id (otherwise x.
18a60 70 4c 69 73 74 20 69 73 29 20 2a 2f 0a 23 64 65  pList is) */.#de
18a70 66 69 6e 65 20 45 50 5f 53 6b 69 70 20 20 20 20  fine EP_Skip    
18a80 20 20 30 78 30 30 31 30 30 30 20 2f 2a 20 43 4f    0x001000 /* CO
18a90 4c 4c 41 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e  LLATE, AS, or UN
18aa0 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e  LIKELY */.#defin
18ab0 65 20 45 50 5f 52 65 64 75 63 65 64 20 20 20 30  e EP_Reduced   0
18ac0 78 30 30 32 30 30 30 20 2f 2a 20 45 78 70 72 20  x002000 /* Expr 
18ad0 73 74 72 75 63 74 20 45 58 50 52 5f 52 45 44 55  struct EXPR_REDU
18ae0 43 45 44 53 49 5a 45 20 62 79 74 65 73 20 6f 6e  CEDSIZE bytes on
18af0 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  ly */.#define EP
18b00 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34  _TokenOnly 0x004
18b10 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72 75  000 /* Expr stru
18b20 63 74 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c  ct EXPR_TOKENONL
18b30 59 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79  YSIZE bytes only
18b40 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53   */.#define EP_S
18b50 74 61 74 69 63 20 20 20 20 30 78 30 30 38 30 30  tatic    0x00800
18b60 30 20 2f 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d  0 /* Held in mem
18b70 6f 72 79 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64  ory not obtained
18b80 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a   from malloc() *
18b90 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d  /.#define EP_Mem
18ba0 54 6f 6b 65 6e 20 20 30 78 30 31 30 30 30 30 20  Token  0x010000 
18bb0 2f 2a 20 4e 65 65 64 20 74 6f 20 73 71 6c 69 74  /* Need to sqlit
18bc0 65 33 44 62 46 72 65 65 28 29 20 45 78 70 72 2e  e3DbFree() Expr.
18bd0 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  zToken */.#defin
18be0 65 20 45 50 5f 4e 6f 52 65 64 75 63 65 20 20 30  e EP_NoReduce  0
18bf0 78 30 32 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f  x020000 /* Canno
18c00 74 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  t EXPRDUP_REDUCE
18c10 20 74 68 69 73 20 45 78 70 72 20 2a 2f 0a 23 64   this Expr */.#d
18c20 65 66 69 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c  efine EP_Unlikel
18c30 79 20 20 30 78 30 34 30 30 30 30 20 2f 2a 20 75  y  0x040000 /* u
18c40 6e 6c 69 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b  nlikely() or lik
18c50 65 6c 69 68 6f 6f 64 28 29 20 66 75 6e 63 74 69  elihood() functi
18c60 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
18c70 5f 43 6f 6e 73 74 46 75 6e 63 20 30 78 30 38 30  _ConstFunc 0x080
18c80 30 30 30 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f  000 /* A SQLITE_
18c90 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72  FUNC_CONSTANT or
18ca0 20 5f 53 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69   _SLOCHNG functi
18cb0 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  on */.#define EP
18cc0 5f 43 61 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30  _CanBeNull 0x100
18cd0 30 30 30 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75  000 /* Can be nu
18ce0 6c 6c 20 64 65 73 70 69 74 65 20 4e 4f 54 20 4e  ll despite NOT N
18cf0 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a  ULL constraint *
18d00 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 75 62  /.#define EP_Sub
18d10 71 75 65 72 79 20 20 30 78 32 30 30 30 30 30 20  query  0x200000 
18d20 2f 2a 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73  /* Tree contains
18d30 20 61 20 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65   a TK_SELECT ope
18d40 72 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  rator */.#define
18d50 20 45 50 5f 41 6c 69 61 73 20 20 20 20 20 30 78   EP_Alias     0x
18d60 34 30 30 30 30 30 20 2f 2a 20 49 73 20 61 6e 20  400000 /* Is an 
18d70 61 6c 69 61 73 20 66 6f 72 20 61 20 72 65 73 75  alias for a resu
18d80 6c 74 20 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f  lt set column */
18d90 0a 23 64 65 66 69 6e 65 20 45 50 5f 4c 65 61 66  .#define EP_Leaf
18da0 20 20 20 20 20 20 30 78 38 30 30 30 30 30 20 2f        0x800000 /
18db0 2a 20 45 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70  * Expr.pLeft, .p
18dc0 52 69 67 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63  Right, .u.pSelec
18dd0 74 20 61 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f  t all NULL */../
18de0 2a 0a 2a 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e  *.** Combination
18df0 73 20 6f 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65  s of two or more
18e00 20 45 50 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23   EP_* flags.*/.#
18e10 64 65 66 69 6e 65 20 45 50 5f 50 72 6f 70 61 67  define EP_Propag
18e20 61 74 65 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c  ate (EP_Collate|
18e30 45 50 5f 53 75 62 71 75 65 72 79 29 20 2f 2a 20  EP_Subquery) /* 
18e40 50 72 6f 70 61 67 61 74 65 20 74 68 65 73 65 20  Propagate these 
18e50 62 69 74 73 20 75 70 20 74 72 65 65 20 2a 2f 0a  bits up tree */.
18e60 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63  ./*.** These mac
18e70 72 6f 73 20 63 61 6e 20 62 65 20 75 73 65 64 20  ros can be used 
18e80 74 6f 20 74 65 73 74 2c 20 73 65 74 2c 20 6f 72  to test, set, or
18e90 20 63 6c 65 61 72 20 62 69 74 73 20 69 6e 20 74   clear bits in t
18ea0 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73  he.** Expr.flags
18eb0 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
18ec0 6e 65 20 45 78 70 72 48 61 73 50 72 6f 70 65 72  ne ExprHasProper
18ed0 74 79 28 45 2c 50 29 20 20 20 20 20 28 28 28 45  ty(E,P)     (((E
18ee0 29 2d 3e 66 6c 61 67 73 26 28 50 29 29 21 3d 30  )->flags&(P))!=0
18ef0 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  ).#define ExprHa
18f00 73 41 6c 6c 50 72 6f 70 65 72 74 79 28 45 2c 50  sAllProperty(E,P
18f10 29 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26  )  (((E)->flags&
18f20 28 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69  (P))==(P)).#defi
18f30 6e 65 20 45 78 70 72 53 65 74 50 72 6f 70 65 72  ne ExprSetProper
18f40 74 79 28 45 2c 50 29 20 20 20 20 20 28 45 29 2d  ty(E,P)     (E)-
18f50 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 64 65 66  >flags|=(P).#def
18f60 69 6e 65 20 45 78 70 72 43 6c 65 61 72 50 72 6f  ine ExprClearPro
18f70 70 65 72 74 79 28 45 2c 50 29 20 20 20 28 45 29  perty(E,P)   (E)
18f80 2d 3e 66 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f  ->flags&=~(P)../
18f90 2a 20 54 68 65 20 45 78 70 72 53 65 74 56 56 41  * The ExprSetVVA
18fa0 50 72 6f 70 65 72 74 79 28 29 20 6d 61 63 72 6f  Property() macro
18fb0 20 69 73 20 75 73 65 64 20 66 6f 72 20 56 65 72   is used for Ver
18fc0 69 66 69 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64  ification, Valid
18fd0 61 74 69 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63  ation,.** and Ac
18fe0 63 72 65 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79  creditation only
18ff0 2e 20 20 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65  .  It works like
19000 20 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79   ExprSetProperty
19010 28 29 20 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a  () during VVA.**
19020 20 70 72 6f 63 65 73 73 65 73 20 62 75 74 20 69   processes but i
19030 73 20 61 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65  s a no-op for de
19040 6c 69 76 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65  livery..*/.#ifde
19050 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 23  f SQLITE_DEBUG.#
19060 20 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56   define ExprSetV
19070 56 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20  VAProperty(E,P) 
19080 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29   (E)->flags|=(P)
19090 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
190a0 45 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72  ExprSetVVAProper
190b0 74 79 28 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a  ty(E,P).#endif..
190c0 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20  /*.** Macros to 
190d0 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 75  determine the nu
190e0 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 72 65  mber of bytes re
190f0 71 75 69 72 65 64 20 62 79 20 61 20 6e 6f 72 6d  quired by a norm
19100 61 6c 20 45 78 70 72 0a 2a 2a 20 73 74 72 75 63  al Expr.** struc
19110 74 2c 20 61 6e 20 45 78 70 72 20 73 74 72 75 63  t, an Expr struc
19120 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 52 65  t with the EP_Re
19130 64 75 63 65 64 20 66 6c 61 67 20 73 65 74 20 69  duced flag set i
19140 6e 20 45 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20  n Expr.flags.** 
19150 61 6e 64 20 61 6e 20 45 78 70 72 20 73 74 72 75  and an Expr stru
19160 63 74 20 77 69 74 68 20 74 68 65 20 45 50 5f 54  ct with the EP_T
19170 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65  okenOnly flag se
19180 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58  t..*/.#define EX
19190 50 52 5f 46 55 4c 4c 53 49 5a 45 20 20 20 20 20  PR_FULLSIZE     
191a0 20 20 20 20 20 20 73 69 7a 65 6f 66 28 45 78 70        sizeof(Exp
191b0 72 29 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r)           /* 
191c0 46 75 6c 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65  Full size */.#de
191d0 66 69 6e 65 20 45 58 50 52 5f 52 45 44 55 43 45  fine EXPR_REDUCE
191e0 44 53 49 5a 45 20 20 20 20 20 20 20 20 6f 66 66  DSIZE        off
191f0 73 65 74 6f 66 28 45 78 70 72 2c 69 54 61 62 6c  setof(Expr,iTabl
19200 65 29 20 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65  e)  /* Common fe
19210 61 74 75 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e  atures */.#defin
19220 65 20 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59  e EXPR_TOKENONLY
19230 53 49 5a 45 20 20 20 20 20 20 6f 66 66 73 65 74  SIZE      offset
19240 6f 66 28 45 78 70 72 2c 70 4c 65 66 74 29 20 20  of(Expr,pLeft)  
19250 20 2f 2a 20 46 65 77 65 72 20 66 65 61 74 75 72   /* Fewer featur
19260 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61  es */../*.** Fla
19270 67 73 20 70 61 73 73 65 64 20 74 6f 20 74 68 65  gs passed to the
19280 20 73 71 6c 69 74 65 33 45 78 70 72 44 75 70 28   sqlite3ExprDup(
19290 29 20 66 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20  ) function. See 
192a0 74 68 65 20 68 65 61 64 65 72 20 63 6f 6d 6d 65  the header comme
192b0 6e 74 0a 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69  nt.** above sqli
192c0 74 65 33 45 78 70 72 44 75 70 28 29 20 66 6f 72  te3ExprDup() for
192d0 20 64 65 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65   details..*/.#de
192e0 66 69 6e 65 20 45 58 50 52 44 55 50 5f 52 45 44  fine EXPRDUP_RED
192f0 55 43 45 20 20 20 20 20 20 20 20 20 30 78 30 30  UCE         0x00
19300 30 31 20 20 2f 2a 20 55 73 65 64 20 72 65 64 75  01  /* Used redu
19310 63 65 64 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f  ced-size Expr no
19320 64 65 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20  des */../*.** A 
19330 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73 69  list of expressi
19340 6f 6e 73 2e 20 20 45 61 63 68 20 65 78 70 72 65  ons.  Each expre
19350 73 73 69 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e  ssion may option
19360 61 6c 6c 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e  ally have a.** n
19370 61 6d 65 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61  ame.  An expr/na
19380 6d 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63  me combination c
19390 61 6e 20 62 65 20 75 73 65 64 20 69 6e 20 73 65  an be used in se
193a0 76 65 72 61 6c 20 77 61 79 73 2c 20 73 75 63 68  veral ways, such
193b0 0a 2a 2a 20 61 73 20 74 68 65 20 6c 69 73 74 20  .** as the list 
193c0 6f 66 20 22 65 78 70 72 20 41 53 20 49 44 22 20  of "expr AS ID" 
193d0 66 69 65 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67  fields following
193e0 20 61 20 22 53 45 4c 45 43 54 22 20 6f 72 20 69   a "SELECT" or i
193f0 6e 20 74 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66  n the.** list of
19400 20 22 49 44 20 3d 20 65 78 70 72 22 20 69 74 65   "ID = expr" ite
19410 6d 73 20 69 6e 20 61 6e 20 55 50 44 41 54 45 2e  ms in an UPDATE.
19420 20 20 41 20 6c 69 73 74 20 6f 66 20 65 78 70 72    A list of expr
19430 65 73 73 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61  essions can.** a
19440 6c 73 6f 20 62 65 20 75 73 65 64 20 61 73 20 74  lso be used as t
19450 68 65 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 61  he argument to a
19460 20 66 75 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68   function, in wh
19470 69 63 68 20 63 61 73 65 20 74 68 65 20 61 2e 7a  ich case the a.z
19480 4e 61 6d 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73  Name.** field is
19490 20 6e 6f 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a   not used..**.**
194a0 20 42 79 20 64 65 66 61 75 6c 74 20 74 68 65 20   By default the 
194b0 45 78 70 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64  Expr.zSpan field
194c0 20 68 6f 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72   holds a human-r
194d0 65 61 64 61 62 6c 65 20 64 65 73 63 72 69 70 74  eadable descript
194e0 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78  ion of.** the ex
194f0 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69 73  pression that is
19500 20 75 73 65 64 20 69 6e 20 74 68 65 20 67 65 6e   used in the gen
19510 65 72 61 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72  eration of error
19520 20 6d 65 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a   messages and.**
19530 20 63 6f 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20   column labels. 
19540 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20 45   In this case, E
19550 78 70 72 2e 7a 53 70 61 6e 20 69 73 20 74 79 70  xpr.zSpan is typ
19560 69 63 61 6c 6c 79 20 74 68 65 20 74 65 78 74 20  ically the text 
19570 6f 66 20 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65  of a.** column e
19580 78 70 72 65 73 73 69 6f 6e 20 61 73 20 69 74 20  xpression as it 
19590 65 78 69 73 74 73 20 69 6e 20 61 20 53 45 4c 45  exists in a SELE
195a0 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 48  CT statement.  H
195b0 6f 77 65 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68  owever, if.** th
195c0 65 20 62 53 70 61 6e 49 73 54 61 62 20 66 6c 61  e bSpanIsTab fla
195d0 67 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 7a  g is set, then z
195e0 53 70 61 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64  Span is overload
195f0 65 64 20 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e  ed to mean the n
19600 61 6d 65 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65  ame.** of the re
19610 73 75 6c 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74  sult column in t
19620 68 65 20 66 6f 72 6d 3a 20 44 41 54 41 42 41 53  he form: DATABAS
19630 45 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20  E.TABLE.COLUMN. 
19640 20 54 68 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66   This later.** f
19650 6f 72 6d 20 69 73 20 75 73 65 64 20 66 6f 72 20  orm is used for 
19660 6e 61 6d 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20  name resolution 
19670 77 69 74 68 20 6e 65 73 74 65 64 20 46 52 4f 4d  with nested FROM
19680 20 63 6c 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72   clauses..*/.str
19690 75 63 74 20 45 78 70 72 4c 69 73 74 20 7b 0a 20  uct ExprList {. 
196a0 20 69 6e 74 20 6e 45 78 70 72 3b 20 20 20 20 20   int nExpr;     
196b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
196c0 72 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  r of expressions
196d0 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   on the list */.
196e0 20 20 69 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20    int nAlloc;   
196f0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
19700 65 72 20 6f 66 20 61 5b 5d 20 73 6c 6f 74 73 20  er of a[] slots 
19710 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 73  allocated */.  s
19720 74 72 75 63 74 20 45 78 70 72 4c 69 73 74 5f 69  truct ExprList_i
19730 74 65 6d 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63  tem { /* For eac
19740 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e 20  h expression in 
19750 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20  the list */.    
19760 45 78 70 72 20 2a 70 45 78 70 72 3b 20 20 20 20  Expr *pExpr;    
19770 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70          /* The p
19780 61 72 73 65 20 74 72 65 65 20 66 6f 72 20 74 68  arse tree for th
19790 69 73 20 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f  is expression */
197a0 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
197b0 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
197c0 54 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64  Token associated
197d0 20 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65   with this expre
197e0 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61  ssion */.    cha
197f0 72 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20  r *zSpan;       
19800 20 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c       /* Original
19810 20 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70   text of the exp
19820 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75  ression */.    u
19830 38 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  8 sortOrder;    
19840 20 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20         /* 1 for 
19850 44 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53  DESC or 0 for AS
19860 43 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  C */.    unsigne
19870 64 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20  d done :1;      
19880 20 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e   /* A flag to in
19890 64 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63  dicate when proc
198a0 65 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68  essing is finish
198b0 65 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e  ed */.    unsign
198c0 65 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31  ed bSpanIsTab :1
198d0 3b 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73  ; /* zSpan holds
198e0 20 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e   DB.TABLE.COLUMN
198f0 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
19900 20 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20   reusable :1;   
19910 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72  /* Constant expr
19920 65 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62  ession is reusab
19930 6c 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  le */.    union 
19940 7b 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b  {.      struct {
19950 0a 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72  .        u16 iOr
19960 64 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f  derByCol;      /
19970 2a 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20  * For ORDER BY, 
19980 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  column number in
19990 20 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20   result set */. 
199a0 20 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61         u16 iAlia
199b0 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
199c0 49 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65  Index into Parse
199d0 2e 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e  .aAlias[] for zN
199e0 61 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78  ame */.      } x
199f0 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e  ;.      int iCon
19a00 73 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20  stExprReg;      
19a10 2f 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77  /* Register in w
19a20 68 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20  hich Expr value 
19a30 69 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20  is cached */.   
19a40 20 7d 20 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20   } u;.  } a[1]; 
19a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19a60 20 2f 2a 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72   /* One slot for
19a70 20 65 61 63 68 20 65 78 70 72 65 73 73 69 6f 6e   each expression
19a80 20 69 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a   in the list */.
19a90 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  };../*.** An ins
19aa0 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74  tance of this st
19ab0 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64 20  ructure is used 
19ac0 62 79 20 74 68 65 20 70 61 72 73 65 72 20 74 6f  by the parser to
19ad0 20 72 65 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20   record both.** 
19ae0 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20 66  the parse tree f
19af0 6f 72 20 61 6e 20 65 78 70 72 65 73 73 69 6f 6e  or an expression
19b00 20 61 6e 64 20 74 68 65 20 73 70 61 6e 20 6f 66   and the span of
19b10 20 69 6e 70 75 74 20 74 65 78 74 20 66 6f 72 20   input text for 
19b20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e  an.** expression
19b30 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
19b40 53 70 61 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70  Span {.  Expr *p
19b50 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20 2f  Expr;          /
19b60 2a 20 54 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * The expression
19b70 20 70 61 72 73 65 20 74 72 65 65 20 2a 2f 0a 20   parse tree */. 
19b80 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74   const char *zSt
19b90 61 72 74 3b 20 20 20 2f 2a 20 46 69 72 73 74 20  art;   /* First 
19ba0 63 68 61 72 61 63 74 65 72 20 6f 66 20 69 6e 70  character of inp
19bb0 75 74 20 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e  ut text */.  con
19bc0 73 74 20 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20  st char *zEnd;  
19bd0 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63     /* One charac
19be0 74 65 72 20 70 61 73 74 20 74 68 65 20 65 6e 64  ter past the end
19bf0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 2a   of input text *
19c00 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  /.};../*.** An i
19c10 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20  nstance of this 
19c20 73 74 72 75 63 74 75 72 65 20 63 61 6e 20 68 6f  structure can ho
19c30 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c 69 73 74  ld a simple list
19c40 20 6f 66 20 69 64 65 6e 74 69 66 69 65 72 73 2c   of identifiers,
19c50 0a 2a 2a 20 73 75 63 68 20 61 73 20 74 68 65 20  .** such as the 
19c60 6c 69 73 74 20 22 61 2c 62 2c 63 22 20 69 6e 20  list "a,b,c" in 
19c70 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
19c80 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20  atements:.**.** 
19c90 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e 54 4f       INSERT INTO
19ca0 20 74 28 61 2c 62 2c 63 29 20 56 41 4c 55 45 53   t(a,b,c) VALUES
19cb0 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52   ...;.**      CR
19cc0 45 41 54 45 20 49 4e 44 45 58 20 69 64 78 20 4f  EATE INDEX idx O
19cd0 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20  N t(a,b,c);.**  
19ce0 20 20 20 20 43 52 45 41 54 45 20 54 52 49 47 47      CREATE TRIGG
19cf0 45 52 20 74 72 69 67 20 42 45 46 4f 52 45 20 55  ER trig BEFORE U
19d00 50 44 41 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63  PDATE ON t(a,b,c
19d10 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65  ) ...;.**.** The
19d20 20 49 64 4c 69 73 74 2e 61 2e 69 64 78 20 66 69   IdList.a.idx fi
19d30 65 6c 64 20 69 73 20 75 73 65 64 20 77 68 65 6e  eld is used when
19d40 20 74 68 65 20 49 64 4c 69 73 74 20 72 65 70 72   the IdList repr
19d50 65 73 65 6e 74 73 20 74 68 65 20 6c 69 73 74 20  esents the list 
19d60 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d  of.** column nam
19d70 65 73 20 61 66 74 65 72 20 61 20 74 61 62 6c 65  es after a table
19d80 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45   name in an INSE
19d90 52 54 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 49  RT statement.  I
19da0 6e 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 0a  n the statement.
19db0 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53 45 52 54  **.**     INSERT
19dc0 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e   INTO t(a,b,c) .
19dd0 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20  ...**.** If "a" 
19de0 69 73 20 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75  is the k-th colu
19df0 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22 74 22 2c  mn of table "t",
19e00 20 74 68 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30   then IdList.a[0
19e10 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72  ].idx==k..*/.str
19e20 75 63 74 20 49 64 4c 69 73 74 20 7b 0a 20 20 73  uct IdList {.  s
19e30 74 72 75 63 74 20 49 64 4c 69 73 74 5f 69 74 65  truct IdList_ite
19e40 6d 20 7b 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e  m {.    char *zN
19e50 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
19e60 65 20 6f 66 20 74 68 65 20 69 64 65 6e 74 69 66  e of the identif
19e70 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ier */.    int i
19e80 64 78 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  dx;          /* 
19e90 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65 20 54 61  Index in some Ta
19ea0 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20  ble.aCol[] of a 
19eb0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61  column named zNa
19ec0 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20  me */.  } *a;.  
19ed0 69 6e 74 20 6e 49 64 3b 20 20 20 20 20 20 20 20  int nId;        
19ee0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 69 64   /* Number of id
19ef0 65 6e 74 69 66 69 65 72 73 20 6f 6e 20 74 68 65  entifiers on the
19f00 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a   list */.};../*.
19f10 2a 2a 20 54 68 65 20 62 69 74 6d 61 73 6b 20 64  ** The bitmask d
19f20 61 74 61 74 79 70 65 20 64 65 66 69 6e 65 64 20  atatype defined 
19f30 62 65 6c 6f 77 20 69 73 20 75 73 65 64 20 66 6f  below is used fo
19f40 72 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69  r various optimi
19f50 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43  zations..**.** C
19f60 68 61 6e 67 69 6e 67 20 74 68 69 73 20 66 72 6f  hanging this fro
19f70 6d 20 61 20 36 34 2d 62 69 74 20 74 6f 20 61 20  m a 64-bit to a 
19f80 33 32 2d 62 69 74 20 74 79 70 65 20 6c 69 6d 69  32-bit type limi
19f90 74 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ts the number of
19fa0 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e 20 61 20  .** tables in a 
19fb0 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e 73 74 65  join to 32 inste
19fc0 61 64 20 6f 66 20 36 34 2e 20 20 42 75 74 20 69  ad of 64.  But i
19fd0 74 20 61 6c 73 6f 20 72 65 64 75 63 65 73 20 74  t also reduces t
19fe0 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68  he size.** of th
19ff0 65 20 6c 69 62 72 61 72 79 20 62 79 20 37 33 38  e library by 738
1a000 20 62 79 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a   bytes on ix86..
1a010 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
1a020 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20  _BITMASK_TYPE.  
1a030 74 79 70 65 64 65 66 20 53 51 4c 49 54 45 5f 42  typedef SQLITE_B
1a040 49 54 4d 41 53 4b 5f 54 59 50 45 20 42 69 74 6d  ITMASK_TYPE Bitm
1a050 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70  ask;.#else.  typ
1a060 65 64 65 66 20 75 36 34 20 42 69 74 6d 61 73 6b  edef u64 Bitmask
1a070 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ;.#endif../*.** 
1a080 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 69  The number of bi
1a090 74 73 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e  ts in a Bitmask.
1a0a0 20 20 22 42 4d 53 22 20 6d 65 61 6e 73 20 22 42    "BMS" means "B
1a0b0 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f  itMask Size"..*/
1a0c0 0a 23 64 65 66 69 6e 65 20 42 4d 53 20 20 28 28  .#define BMS  ((
1a0d0 69 6e 74 29 28 73 69 7a 65 6f 66 28 42 69 74 6d  int)(sizeof(Bitm
1a0e0 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20  ask)*8))../*.** 
1a0f0 41 20 62 69 74 20 69 6e 20 61 20 42 69 74 6d 61  A bit in a Bitma
1a100 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41  sk.*/.#define MA
1a110 53 4b 42 49 54 28 6e 29 20 20 20 28 28 28 42 69  SKBIT(n)   (((Bi
1a120 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23  tmask)1)<<(n)).#
1a130 64 65 66 69 6e 65 20 4d 41 53 4b 42 49 54 33 32  define MASKBIT32
1a140 28 6e 29 20 28 28 28 75 6e 73 69 67 6e 65 64 20  (n) (((unsigned 
1a150 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65  int)1)<<(n)).#de
1a160 66 69 6e 65 20 41 4c 4c 42 49 54 53 20 20 20 20  fine ALLBITS    
1a170 20 20 28 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a    ((Bitmask)-1).
1a180 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
1a190 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 64  wing structure d
1a1a0 65 73 63 72 69 62 65 73 20 74 68 65 20 46 52 4f  escribes the FRO
1a1b0 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45  M clause of a SE
1a1c0 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a  LECT statement..
1a1d0 2a 2a 20 45 61 63 68 20 74 61 62 6c 65 20 6f 72  ** Each table or
1a1e0 20 73 75 62 71 75 65 72 79 20 69 6e 20 74 68 65   subquery in the
1a1f0 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 69 73 20   FROM clause is 
1a200 61 20 73 65 70 61 72 61 74 65 20 65 6c 65 6d 65  a separate eleme
1a210 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63  nt of.** the Src
1a220 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a  List.a[] array..
1a230 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68 65 20 61  **.** With the a
1a240 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69  ddition of multi
1a250 70 6c 65 20 64 61 74 61 62 61 73 65 20 73 75 70  ple database sup
1a260 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77  port, the follow
1a270 69 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a  ing structure.**
1a280 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 75 73 65   can also be use
1a290 64 20 74 6f 20 64 65 73 63 72 69 62 65 20 61 20  d to describe a 
1a2a0 70 61 72 74 69 63 75 6c 61 72 20 74 61 62 6c 65  particular table
1a2b0 20 73 75 63 68 20 61 73 20 74 68 65 20 74 61 62   such as the tab
1a2c0 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f  le that.** is mo
1a2d0 64 69 66 69 65 64 20 62 79 20 61 6e 20 49 4e 53  dified by an INS
1a2e0 45 52 54 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20  ERT, DELETE, or 
1a2f0 55 50 44 41 54 45 20 73 74 61 74 65 6d 65 6e 74  UPDATE statement
1a300 2e 20 20 49 6e 20 73 74 61 6e 64 61 72 64 20 53  .  In standard S
1a310 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61 20 74 61  QL,.** such a ta
1a320 62 6c 65 20 6d 75 73 74 20 62 65 20 61 20 73 69  ble must be a si
1a330 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20  mple name: ID.  
1a340 42 75 74 20 69 6e 20 53 51 4c 69 74 65 2c 20 74  But in SQLite, t
1a350 68 65 20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20  he table can.** 
1a360 6e 6f 77 20 62 65 20 69 64 65 6e 74 69 66 69 65  now be identifie
1a370 64 20 62 79 20 61 20 64 61 74 61 62 61 73 65 20  d by a database 
1a380 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20 74 68 65  name, a dot, the
1a390 6e 20 74 68 65 20 74 61 62 6c 65 20 6e 61 6d 65  n the table name
1a3a0 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54  : ID.ID..**.** T
1a3b0 68 65 20 6a 6f 69 6e 74 79 70 65 20 73 74 61 72  he jointype star
1a3c0 74 73 20 6f 75 74 20 73 68 6f 77 69 6e 67 20 74  ts out showing t
1a3d0 68 65 20 6a 6f 69 6e 20 74 79 70 65 20 62 65 74  he join type bet
1a3e0 77 65 65 6e 20 74 68 65 20 63 75 72 72 65 6e 74  ween the current
1a3f0 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68   table.** and th
1a400 65 20 6e 65 78 74 20 74 61 62 6c 65 20 6f 6e 20  e next table on 
1a410 74 68 65 20 6c 69 73 74 2e 20 20 54 68 65 20 70  the list.  The p
1a420 61 72 73 65 72 20 62 75 69 6c 64 73 20 74 68 65  arser builds the
1a430 20 6c 69 73 74 20 74 68 69 73 20 77 61 79 2e 0a   list this way..
1a440 2a 2a 20 42 75 74 20 73 71 6c 69 74 65 33 53 72  ** But sqlite3Sr
1a450 63 4c 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79  cListShiftJoinTy
1a460 70 65 28 29 20 6c 61 74 65 72 20 73 68 69 66 74  pe() later shift
1a470 73 20 74 68 65 20 6a 6f 69 6e 74 79 70 65 73 20  s the jointypes 
1a480 73 6f 20 74 68 61 74 20 65 61 63 68 0a 2a 2a 20  so that each.** 
1a490 6a 6f 69 6e 74 79 70 65 20 65 78 70 72 65 73 73  jointype express
1a4a0 65 73 20 74 68 65 20 6a 6f 69 6e 20 62 65 74 77  es the join betw
1a4b0 65 65 6e 20 74 68 65 20 74 61 62 6c 65 20 61 6e  een the table an
1a4c0 64 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 74  d the previous t
1a4d0 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74  able..**.** In t
1a4e0 68 65 20 63 6f 6c 55 73 65 64 20 66 69 65 6c 64  he colUsed field
1a4f0 2c 20 74 68 65 20 68 69 67 68 2d 6f 72 64 65 72  , the high-order
1a500 20 62 69 74 20 28 62 69 74 20 36 33 29 20 69 73   bit (bit 63) is
1a510 20 73 65 74 20 69 66 20 74 68 65 20 74 61 62 6c   set if the tabl
1a520 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f  e.** contains mo
1a530 72 65 20 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d  re than 63 colum
1a540 6e 73 20 61 6e 64 20 74 68 65 20 36 34 2d 74 68  ns and the 64-th
1a550 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e   or later column
1a560 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72   is used..*/.str
1a570 75 63 74 20 53 72 63 4c 69 73 74 20 7b 0a 20 20  uct SrcList {.  
1a580 69 6e 74 20 6e 53 72 63 3b 20 20 20 20 20 20 20  int nSrc;       
1a590 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 61   /* Number of ta
1a5a0 62 6c 65 73 20 6f 72 20 73 75 62 71 75 65 72 69  bles or subqueri
1a5b0 65 73 20 69 6e 20 74 68 65 20 46 52 4f 4d 20 63  es in the FROM c
1a5c0 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e  lause */.  u32 n
1a5d0 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e  Alloc;      /* N
1a5e0 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73  umber of entries
1a5f0 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b   allocated in a[
1a600 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72  ] below */.  str
1a610 75 63 74 20 53 72 63 4c 69 73 74 5f 69 74 65 6d  uct SrcList_item
1a620 20 7b 0a 20 20 20 20 53 63 68 65 6d 61 20 2a 70   {.    Schema *p
1a630 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65  Schema;  /* Sche
1a640 6d 61 20 74 6f 20 77 68 69 63 68 20 74 68 69 73  ma to which this
1a650 20 69 74 65 6d 20 69 73 20 66 69 78 65 64 20 2a   item is fixed *
1a660 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 44 61 74  /.    char *zDat
1a670 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20  abase;  /* Name 
1a680 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f 6c 64  of database hold
1a690 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ing this table *
1a6a0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
1a6b0 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20  e;      /* Name 
1a6c0 6f 66 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a  of the table */.
1a6d0 20 20 20 20 63 68 61 72 20 2a 7a 41 6c 69 61 73      char *zAlias
1a6e0 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 22 42 22  ;     /* The "B"
1a6f0 20 70 61 72 74 20 6f 66 20 61 20 22 41 20 41 53   part of a "A AS
1a700 20 42 22 20 70 68 72 61 73 65 2e 20 20 7a 4e 61   B" phrase.  zNa
1a710 6d 65 20 69 73 20 74 68 65 20 22 41 22 20 2a 2f  me is the "A" */
1a720 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
1a730 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c  ;      /* An SQL
1a740 20 74 61 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e   table correspon
1a750 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f  ding to zName */
1a760 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70 53 65  .    Select *pSe
1a770 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45  lect;  /* A SELE
1a780 43 54 20 73 74 61 74 65 6d 65 6e 74 20 75 73 65  CT statement use
1a790 64 20 69 6e 20 70 6c 61 63 65 20 6f 66 20 61 20  d in place of a 
1a7a0 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  table name */.  
1a7b0 20 20 69 6e 74 20 61 64 64 72 46 69 6c 6c 53 75    int addrFillSu
1a7c0 62 3b 20 20 2f 2a 20 41 64 64 72 65 73 73 20 6f  b;  /* Address o
1a7d0 66 20 73 75 62 72 6f 75 74 69 6e 65 20 74 6f 20  f subroutine to 
1a7e0 6d 61 6e 69 66 65 73 74 20 61 20 73 75 62 71 75  manifest a subqu
1a7f0 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ery */.    int r
1a800 65 67 52 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20  egReturn;    /* 
1a810 52 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  Register holding
1a820 20 72 65 74 75 72 6e 20 61 64 64 72 65 73 73 20   return address 
1a830 6f 66 20 61 64 64 72 46 69 6c 6c 53 75 62 20 2a  of addrFillSub *
1a840 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
1a850 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65 67 69 73  ult;    /* Regis
1a860 74 65 72 73 20 68 6f 6c 64 69 6e 67 20 72 65 73  ters holding res
1a870 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75  ults of a co-rou
1a880 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73 74 72 75  tine */.    stru
1a890 63 74 20 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f  ct {.      u8 jo
1a8a0 69 6e 74 79 70 65 3b 20 20 20 20 20 20 2f 2a 20  intype;      /* 
1a8b0 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74  Type of join bet
1a8c0 77 65 65 6e 20 74 68 69 73 20 74 61 62 6c 65 20  ween this table 
1a8d0 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75 73  and the previous
1a8e0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1a8f0 65 64 20 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31  ed notIndexed :1
1a900 3b 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  ;    /* True if 
1a910 74 68 65 72 65 20 69 73 20 61 20 4e 4f 54 20 49  there is a NOT I
1a920 4e 44 45 58 45 44 20 63 6c 61 75 73 65 20 2a 2f  NDEXED clause */
1a930 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1a940 69 73 49 6e 64 65 78 65 64 42 79 20 3a 31 3b 20  isIndexedBy :1; 
1a950 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1a960 72 65 20 69 73 20 61 6e 20 49 4e 44 45 58 45 44  re is an INDEXED
1a970 20 42 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20   BY clause */.  
1a980 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 54      unsigned isT
1a990 61 62 46 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f  abFunc :1;     /
1a9a0 2a 20 54 72 75 65 20 69 66 20 74 61 62 6c 65 2d  * True if table-
1a9b0 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20  valued-function 
1a9c0 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20 20 20 20  syntax */.      
1a9d0 75 6e 73 69 67 6e 65 64 20 69 73 43 6f 72 72 65  unsigned isCorre
1a9e0 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72  lated :1;  /* Tr
1a9f0 75 65 20 69 66 20 73 75 62 2d 71 75 65 72 79 20  ue if sub-query 
1aa00 69 73 20 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f  is correlated */
1aa10 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1aa20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b  viaCoroutine :1;
1aa30 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64    /* Implemented
1aa40 20 61 73 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65   as a co-routine
1aa50 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
1aa60 65 64 20 69 73 52 65 63 75 72 73 69 76 65 20 3a  ed isRecursive :
1aa70 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 66 6f 72  1;   /* True for
1aa80 20 72 65 63 75 72 73 69 76 65 20 72 65 66 65 72   recursive refer
1aa90 65 6e 63 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a  ence in WITH */.
1aaa0 20 20 20 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65      } fg;.#ifnde
1aab0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58  f SQLITE_OMIT_EX
1aac0 50 4c 41 49 4e 0a 20 20 20 20 75 38 20 69 53 65  PLAIN.    u8 iSe
1aad0 6c 65 63 74 49 64 3b 20 20 20 20 20 2f 2a 20 49  lectId;     /* I
1aae0 66 20 70 53 65 6c 65 63 74 21 3d 30 2c 20 74 68  f pSelect!=0, th
1aaf0 65 20 69 64 20 6f 66 20 74 68 65 20 73 75 62 2d  e id of the sub-
1ab00 73 65 6c 65 63 74 20 69 6e 20 45 51 50 20 2a 2f  select in EQP */
1ab10 0a 23 65 6e 64 69 66 0a 20 20 20 20 69 6e 74 20  .#endif.    int 
1ab20 69 43 75 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a  iCursor;      /*
1ab30 20 54 68 65 20 56 44 42 45 20 63 75 72 73 6f 72   The VDBE cursor
1ab40 20 6e 75 6d 62 65 72 20 75 73 65 64 20 74 6f 20   number used to 
1ab50 61 63 63 65 73 73 20 74 68 69 73 20 74 61 62 6c  access this tabl
1ab60 65 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a 70  e */.    Expr *p
1ab70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  On;        /* Th
1ab80 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f 66 20 61  e ON clause of a
1ab90 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c   join */.    IdL
1aba0 69 73 74 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f  ist *pUsing;   /
1abb0 2a 20 54 68 65 20 55 53 49 4e 47 20 63 6c 61 75  * The USING clau
1abc0 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a  se of a join */.
1abd0 20 20 20 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55      Bitmask colU
1abe0 73 65 64 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28  sed;  /* Bit N (
1abf0 31 3c 3c 4e 29 20 73 65 74 20 69 66 20 63 6f 6c  1<<N) set if col
1ac00 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62 20 69 73  umn N of pTab is
1ac10 20 75 73 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69   used */.    uni
1ac20 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  on {.      char 
1ac30 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20 20 20 20  *zIndexedBy;    
1ac40 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 20 66 72  /* Identifier fr
1ac50 6f 6d 20 22 49 4e 44 45 58 45 44 20 42 59 20 3c  om "INDEXED BY <
1ac60 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75 73 65 20  zIndex>" clause 
1ac70 2a 2f 0a 20 20 20 20 20 20 45 78 70 72 4c 69 73  */.      ExprLis
1ac80 74 20 2a 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a  t *pFuncArg;  /*
1ac90 20 41 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 61   Arguments to ta
1aca0 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74  ble-valued-funct
1acb0 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b  ion */.    } u1;
1acc0 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 42 49  .    Index *pIBI
1acd0 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20  ndex;  /* Index 
1ace0 73 74 72 75 63 74 75 72 65 20 63 6f 72 72 65 73  structure corres
1acf0 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49  ponding to u1.zI
1ad00 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20  ndexedBy */.  } 
1ad10 61 5b 31 5d 3b 20 20 20 20 20 20 20 20 20 20 20  a[1];           
1ad20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66    /* One entry f
1ad30 6f 72 20 65 61 63 68 20 69 64 65 6e 74 69 66 69  or each identifi
1ad40 65 72 20 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a  er on the list *
1ad50 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d  /.};../*.** Perm
1ad60 69 74 74 65 64 20 76 61 6c 75 65 73 20 6f 66 20  itted values of 
1ad70 74 68 65 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f  the SrcList.a.jo
1ad80 69 6e 74 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a  intype field.*/.
1ad90 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52  #define JT_INNER
1ada0 20 20 20 20 20 30 78 30 30 30 31 20 20 20 20 2f       0x0001    /
1adb0 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e  * Any kind of in
1adc0 6e 65 72 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69  ner or cross joi
1add0 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f  n */.#define JT_
1ade0 43 52 4f 53 53 20 20 20 20 20 30 78 30 30 30 32  CROSS     0x0002
1adf0 20 20 20 20 2f 2a 20 45 78 70 6c 69 63 69 74 20      /* Explicit 
1ae00 75 73 65 20 6f 66 20 74 68 65 20 43 52 4f 53 53  use of the CROSS
1ae10 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66   keyword */.#def
1ae20 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20  ine JT_NATURAL  
1ae30 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 72   0x0004    /* Tr
1ae40 75 65 20 66 6f 72 20 61 20 22 6e 61 74 75 72 61  ue for a "natura
1ae50 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69  l" join */.#defi
1ae60 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20 20 20 20  ne JT_LEFT      
1ae70 30 78 30 30 30 38 20 20 20 20 2f 2a 20 4c 65 66  0x0008    /* Lef
1ae80 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  t outer join */.
1ae90 23 64 65 66 69 6e 65 20 4a 54 5f 52 49 47 48 54  #define JT_RIGHT
1aea0 20 20 20 20 20 30 78 30 30 31 30 20 20 20 20 2f       0x0010    /
1aeb0 2a 20 52 69 67 68 74 20 6f 75 74 65 72 20 6a 6f  * Right outer jo
1aec0 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54  in */.#define JT
1aed0 5f 4f 55 54 45 52 20 20 20 20 20 30 78 30 30 32  _OUTER     0x002
1aee0 30 20 20 20 20 2f 2a 20 54 68 65 20 22 4f 55 54  0    /* The "OUT
1aef0 45 52 22 20 6b 65 79 77 6f 72 64 20 69 73 20 70  ER" keyword is p
1af00 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  resent */.#defin
1af10 65 20 4a 54 5f 45 52 52 4f 52 20 20 20 20 20 30  e JT_ERROR     0
1af20 78 30 30 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e  x0040    /* unkn
1af30 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70 6f 72 74  own or unsupport
1af40 65 64 20 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a  ed join type */.
1af50 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70  ../*.** Flags ap
1af60 70 72 6f 70 72 69 61 74 65 20 66 6f 72 20 74 68  propriate for th
1af70 65 20 77 63 74 72 6c 46 6c 61 67 73 20 70 61 72  e wctrlFlags par
1af80 61 6d 65 74 65 72 20 6f 66 20 73 71 6c 69 74 65  ameter of sqlite
1af90 33 57 68 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a  3WhereBegin().**
1afa0 20 61 6e 64 20 74 68 65 20 57 68 65 72 65 49 6e   and the WhereIn
1afb0 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73 20 6d 65  fo.wctrlFlags me
1afc0 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  mber..**.** Valu
1afd0 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65  e constraints (e
1afe0 6e 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65  nforced via asse
1aff0 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48  rt()):.**     WH
1b000 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d  ERE_USE_LIMIT  =
1b010 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a  = SF_FixedLimit.
1b020 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b030 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20  _ORDERBY_NORMAL 
1b040 20 20 30 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f    0x0000 /* No-o
1b050 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  p */.#define WHE
1b060 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20  RE_ORDERBY_MIN  
1b070 20 20 20 20 30 78 30 30 30 31 20 2f 2a 20 4f 52      0x0001 /* OR
1b080 44 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e  DER BY processin
1b090 67 20 66 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63  g for min() func
1b0a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1b0b0 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58 20 20 20  E_ORDERBY_MAX   
1b0c0 20 20 20 30 78 30 30 30 32 20 2f 2a 20 4f 52 44     0x0002 /* ORD
1b0d0 45 52 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67  ER BY processing
1b0e0 20 66 6f 72 20 6d 61 78 28 29 20 66 75 6e 63 20   for max() func 
1b0f0 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b100 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49 52 45 44  _ONEPASS_DESIRED
1b110 20 20 30 78 30 30 30 34 20 2f 2a 20 57 61 6e 74    0x0004 /* Want
1b120 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20   to do one-pass 
1b130 55 50 44 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f  UPDATE/DELETE */
1b140 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1b150 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20  NEPASS_MULTIROW 
1b160 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53  0x0008 /* ONEPAS
1b170 53 20 69 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c  S is ok with mul
1b180 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64  tiple rows */.#d
1b190 65 66 69 6e 65 20 57 48 45 52 45 5f 44 55 50 4c  efine WHERE_DUPL
1b1a0 49 43 41 54 45 53 5f 4f 4b 20 20 20 20 30 78 30  ICATES_OK    0x0
1b1b0 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74  010 /* Ok to ret
1b1c0 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72 65 20 74  urn a row more t
1b1d0 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66  han once */.#def
1b1e0 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f 53 55 42  ine WHERE_OR_SUB
1b1f0 43 4c 41 55 53 45 20 20 20 20 20 30 78 30 30 32  CLAUSE     0x002
1b200 30 20 2f 2a 20 50 72 6f 63 65 73 73 69 6e 67 20  0 /* Processing 
1b210 61 20 73 75 62 2d 57 48 45 52 45 20 61 73 20 70  a sub-WHERE as p
1b220 61 72 74 20 6f 66 0a 20 20 20 20 20 20 20 20 20  art of.         
1b230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b240 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20               ** 
1b250 74 68 65 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74  the OR optimizat
1b260 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ion  */.#define 
1b270 57 48 45 52 45 5f 47 52 4f 55 50 42 59 20 20 20  WHERE_GROUPBY   
1b280 20 20 20 20 20 20 20 30 78 30 30 34 30 20 2f 2a         0x0040 /*
1b290 20 70 4f 72 64 65 72 42 79 20 69 73 20 72 65 61   pOrderBy is rea
1b2a0 6c 6c 79 20 61 20 47 52 4f 55 50 20 42 59 20 2a  lly a GROUP BY *
1b2b0 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b2c0 44 49 53 54 49 4e 43 54 42 59 20 20 20 20 20 20  DISTINCTBY      
1b2d0 20 30 78 30 30 38 30 20 2f 2a 20 70 4f 72 64 65   0x0080 /* pOrde
1b2e0 72 62 79 20 69 73 20 72 65 61 6c 6c 79 20 61 20  rby is really a 
1b2f0 44 49 53 54 49 4e 43 54 20 63 6c 61 75 73 65 20  DISTINCT clause 
1b300 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b310 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43 54 20 20  _WANT_DISTINCT  
1b320 20 20 30 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20    0x0100 /* All 
1b330 6f 75 74 70 75 74 20 6e 65 65 64 73 20 74 6f 20  output needs to 
1b340 62 65 20 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23  be distinct */.#
1b350 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 4f 52  define WHERE_SOR
1b360 54 42 59 47 52 4f 55 50 20 20 20 20 20 20 30 78  TBYGROUP      0x
1b370 30 32 30 30 20 2f 2a 20 53 75 70 70 6f 72 74 20  0200 /* Support 
1b380 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f  sqlite3WhereIsSo
1b390 72 74 65 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e  rted() */.#defin
1b3a0 65 20 57 48 45 52 45 5f 53 45 45 4b 5f 54 41 42  e WHERE_SEEK_TAB
1b3b0 4c 45 20 20 20 20 20 20 20 30 78 30 34 30 30 20  LE       0x0400 
1b3c0 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66 65 72 20  /* Do not defer 
1b3d0 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61  seeks on main ta
1b3e0 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ble */.#define W
1b3f0 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d  HERE_ORDERBY_LIM
1b400 49 54 20 20 20 20 30 78 30 38 30 30 20 2f 2a 20  IT    0x0800 /* 
1b410 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e  ORDERBY+LIMIT on
1b420 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20   the inner loop 
1b430 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b440 5f 53 45 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45  _SEEK_UNIQ_TABLE
1b450 20 20 30 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e    0x1000 /* Do n
1b460 6f 74 20 64 65 66 65 72 20 73 65 65 6b 73 20 69  ot defer seeks i
1b470 66 20 75 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20  f unique */.    
1b480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b490 20 20 20 20 2f 2a 20 20 20 20 20 30 78 32 30 30      /*     0x200
1b4a0 30 20 20 20 20 6e 6f 74 20 63 75 72 72 65 6e 74  0    not current
1b4b0 6c 79 20 75 73 65 64 20 2a 2f 0a 23 64 65 66 69  ly used */.#defi
1b4c0 6e 65 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d  ne WHERE_USE_LIM
1b4d0 49 54 20 20 20 20 20 20 20 20 30 78 34 30 30 30  IT        0x4000
1b4e0 20 2f 2a 20 55 73 65 20 74 68 65 20 4c 49 4d 49   /* Use the LIMI
1b4f0 54 20 69 6e 20 63 6f 73 74 20 65 73 74 69 6d 61  T in cost estima
1b500 74 65 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  tes */.         
1b510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1b520 2a 20 20 20 20 20 30 78 38 30 30 30 20 20 20 20  *     0x8000    
1b530 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73  not currently us
1b540 65 64 20 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  ed */../* Allowe
1b550 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
1b560 66 72 6f 6d 20 73 71 6c 69 74 65 33 57 68 65 72  from sqlite3Wher
1b570 65 49 73 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f  eIsDistinct().*/
1b580 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1b590 49 53 54 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20  ISTINCT_NOOP    
1b5a0 20 20 30 20 20 2f 2a 20 44 49 53 54 49 4e 43 54    0  /* DISTINCT
1b5b0 20 6b 65 79 77 6f 72 64 20 6e 6f 74 20 75 73 65   keyword not use
1b5c0 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  d */.#define WHE
1b5d0 52 45 5f 44 49 53 54 49 4e 43 54 5f 55 4e 49 51  RE_DISTINCT_UNIQ
1b5e0 55 45 20 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64  UE    1  /* No d
1b5f0 75 70 6c 69 63 61 74 65 73 20 2a 2f 0a 23 64 65  uplicates */.#de
1b600 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49  fine WHERE_DISTI
1b610 4e 43 54 5f 4f 52 44 45 52 45 44 20 20 20 32 20  NCT_ORDERED   2 
1b620 20 2f 2a 20 41 6c 6c 20 64 75 70 6c 69 63 61 74   /* All duplicat
1b630 65 73 20 61 72 65 20 61 64 6a 61 63 65 6e 74 20  es are adjacent 
1b640 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45  */.#define WHERE
1b650 5f 44 49 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45  _DISTINCT_UNORDE
1b660 52 45 44 20 33 20 20 2f 2a 20 44 75 70 6c 69 63  RED 3  /* Duplic
1b670 61 74 65 73 20 61 72 65 20 73 63 61 74 74 65 72  ates are scatter
1b680 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e  ed */../*.** A N
1b690 61 6d 65 43 6f 6e 74 65 78 74 20 64 65 66 69 6e  ameContext defin
1b6a0 65 73 20 61 20 63 6f 6e 74 65 78 74 20 69 6e 20  es a context in 
1b6b0 77 68 69 63 68 20 74 6f 20 72 65 73 6f 6c 76 65  which to resolve
1b6c0 20 74 61 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d   table and colum
1b6d0 6e 0a 2a 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65  n.** names.  The
1b6e0 20 63 6f 6e 74 65 78 74 20 63 6f 6e 73 69 73 74   context consist
1b6f0 73 20 6f 66 20 61 20 6c 69 73 74 20 6f 66 20 74  s of a list of t
1b700 61 62 6c 65 73 20 28 74 68 65 20 70 53 72 63 4c  ables (the pSrcL
1b710 69 73 74 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a  ist) field and.*
1b720 2a 20 61 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65  * a list of name
1b730 64 20 65 78 70 72 65 73 73 69 6f 6e 20 28 70 45  d expression (pE
1b740 4c 69 73 74 29 2e 20 20 54 68 65 20 6e 61 6d 65  List).  The name
1b750 64 20 65 78 70 72 65 73 73 69 6f 6e 20 6c 69 73  d expression lis
1b760 74 20 6d 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c  t may.** be NULL
1b770 2e 20 20 54 68 65 20 70 53 72 63 20 63 6f 72 72  .  The pSrc corr
1b780 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 20 46  esponds to the F
1b790 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61 20  ROM clause of a 
1b7a0 53 45 4c 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20  SELECT or.** to 
1b7b0 74 68 65 20 74 61 62 6c 65 20 62 65 69 6e 67 20  the table being 
1b7c0 6f 70 65 72 61 74 65 64 20 6f 6e 20 62 79 20 49  operated on by I
1b7d0 4e 53 45 52 54 2c 20 55 50 44 41 54 45 2c 20 6f  NSERT, UPDATE, o
1b7e0 72 20 44 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a  r DELETE.  The.*
1b7f0 2a 20 70 45 4c 69 73 74 20 63 6f 72 72 65 73 70  * pEList corresp
1b800 6f 6e 64 73 20 74 6f 20 74 68 65 20 72 65 73 75  onds to the resu
1b810 6c 74 20 73 65 74 20 6f 66 20 61 20 53 45 4c 45  lt set of a SELE
1b820 43 54 20 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66  CT and is NULL f
1b830 6f 72 0a 2a 2a 20 6f 74 68 65 72 20 73 74 61 74  or.** other stat
1b840 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61  ements..**.** Na
1b850 6d 65 43 6f 6e 74 65 78 74 73 20 63 61 6e 20 62  meContexts can b
1b860 65 20 6e 65 73 74 65 64 2e 20 20 57 68 65 6e 20  e nested.  When 
1b870 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c  resolving names,
1b880 20 74 68 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a   the inner-most.
1b890 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 73 65  ** context is se
1b8a0 61 72 63 68 65 64 20 66 69 72 73 74 2e 20 20 49  arched first.  I
1b8b0 66 20 6e 6f 20 6d 61 74 63 68 20 69 73 20 66 6f  f no match is fo
1b8c0 75 6e 64 2c 20 74 68 65 20 6e 65 78 74 20 6f 75  und, the next ou
1b8d0 74 65 72 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69  ter.** context i
1b8e0 73 20 63 68 65 63 6b 65 64 2e 20 20 49 66 20 74  s checked.  If t
1b8f0 68 65 72 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f  here is still no
1b900 20 6d 61 74 63 68 2c 20 74 68 65 20 6e 65 78 74   match, the next
1b910 20 63 6f 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63   context.** is c
1b920 68 65 63 6b 65 64 2e 20 20 54 68 69 73 20 70 72  hecked.  This pr
1b930 6f 63 65 73 73 20 63 6f 6e 74 69 6e 75 65 73 20  ocess continues 
1b940 75 6e 74 69 6c 20 65 69 74 68 65 72 20 61 20 6d  until either a m
1b950 61 74 63 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a  atch is found.**
1b960 20 6f 72 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73   or all contexts
1b970 20 61 72 65 20 63 68 65 63 6b 2e 20 20 57 68 65   are check.  Whe
1b980 6e 20 61 20 6d 61 74 63 68 20 69 73 20 66 6f 75  n a match is fou
1b990 6e 64 2c 20 74 68 65 20 6e 52 65 66 20 6d 65 6d  nd, the nRef mem
1b9a0 62 65 72 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f  ber of.** the co
1b9b0 6e 74 65 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67  ntext containing
1b9c0 20 74 68 65 20 6d 61 74 63 68 20 69 73 20 69 6e   the match is in
1b9d0 63 72 65 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a  cremented..**.**
1b9e0 20 45 61 63 68 20 73 75 62 71 75 65 72 79 20 67   Each subquery g
1b9f0 65 74 73 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f  ets a new NameCo
1ba00 6e 74 65 78 74 2e 20 20 54 68 65 20 70 4e 65 78  ntext.  The pNex
1ba10 74 20 66 69 65 6c 64 20 70 6f 69 6e 74 73 20 74  t field points t
1ba20 6f 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e  o the.** NameCon
1ba30 74 65 78 74 20 69 6e 20 74 68 65 20 70 61 72 65  text in the pare
1ba40 6e 74 20 71 75 65 72 79 2e 20 20 54 68 75 73 20  nt query.  Thus 
1ba50 74 68 65 20 70 72 6f 63 65 73 73 20 6f 66 20 73  the process of s
1ba60 63 61 6e 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e  canning the.** N
1ba70 61 6d 65 43 6f 6e 74 65 78 74 20 6c 69 73 74 20  ameContext list 
1ba80 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f 20 73  corresponds to s
1ba90 65 61 72 63 68 69 6e 67 20 74 68 72 6f 75 67 68  earching through
1baa0 20 73 75 63 63 65 73 73 69 76 65 6c 79 20 6f 75   successively ou
1bab0 74 65 72 0a 2a 2a 20 73 75 62 71 75 65 72 69 65  ter.** subquerie
1bac0 73 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20  s looking for a 
1bad0 6d 61 74 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74  match..*/.struct
1bae0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20   NameContext {. 
1baf0 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20   Parse *pParse; 
1bb00 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
1bb10 73 65 72 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74  ser */.  SrcList
1bb20 20 2a 70 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a   *pSrcList;   /*
1bb30 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 74 61 62   One or more tab
1bb40 6c 65 73 20 75 73 65 64 20 74 6f 20 72 65 73 6f  les used to reso
1bb50 6c 76 65 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45  lve names */.  E
1bb60 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b  xprList *pEList;
1bb70 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20      /* Optional 
1bb80 6c 69 73 74 20 6f 66 20 72 65 73 75 6c 74 2d 73  list of result-s
1bb90 65 74 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20  et columns */.  
1bba0 41 67 67 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66  AggInfo *pAggInf
1bbb0 6f 3b 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74  o;   /* Informat
1bbc0 69 6f 6e 20 61 62 6f 75 74 20 61 67 67 72 65 67  ion about aggreg
1bbd0 61 74 65 73 20 61 74 20 74 68 69 73 20 6c 65 76  ates at this lev
1bbe0 65 6c 20 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74  el */.  NameCont
1bbf0 65 78 74 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20  ext *pNext;  /* 
1bc00 4e 65 78 74 20 6f 75 74 65 72 20 6e 61 6d 65 20  Next outer name 
1bc10 63 6f 6e 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66  context.  NULL f
1bc20 6f 72 20 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a  or outermost */.
1bc30 20 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20    int nRef;     
1bc40 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1bc50 20 6f 66 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76   of names resolv
1bc60 65 64 20 62 79 20 74 68 69 73 20 63 6f 6e 74 65  ed by this conte
1bc70 78 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72  xt */.  int nErr
1bc80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
1bc90 4e 75 6d 62 65 72 20 6f 66 20 65 72 72 6f 72 73  Number of errors
1bca0 20 65 6e 63 6f 75 6e 74 65 72 65 64 20 77 68 69   encountered whi
1bcb0 6c 65 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d  le resolving nam
1bcc0 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c  es */.  u16 ncFl
1bcd0 61 67 73 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ags;         /* 
1bce0 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f  Zero or more NC_
1bcf0 2a 20 66 6c 61 67 73 20 64 65 66 69 6e 65 64 20  * flags defined 
1bd00 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  below */.};../*.
1bd10 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65  ** Allowed value
1bd20 73 20 66 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f  s for the NameCo
1bd30 6e 74 65 78 74 2c 20 6e 63 46 6c 61 67 73 20 66  ntext, ncFlags f
1bd40 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75  ield..**.** Valu
1bd50 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 61  e constraints (a
1bd60 6c 6c 20 63 68 65 63 6b 65 64 20 76 69 61 20 61  ll checked via a
1bd70 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
1bd80 4e 43 5f 48 61 73 41 67 67 20 20 20 20 3d 3d 20  NC_HasAgg    == 
1bd90 53 46 5f 48 61 73 41 67 67 0a 2a 2a 20 20 20 20  SF_HasAgg.**    
1bda0 4e 43 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  NC_MinMaxAgg == 
1bdb0 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20  SF_MinMaxAgg == 
1bdc0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1bdd0 41 58 0a 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65  AX.**.*/.#define
1bde0 20 4e 43 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78   NC_AllowAgg  0x
1bdf0 30 30 30 31 20 20 2f 2a 20 41 67 67 72 65 67 61  0001  /* Aggrega
1be00 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  te functions are
1be10 20 61 6c 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f   allowed here */
1be20 0a 23 64 65 66 69 6e 65 20 4e 43 5f 50 61 72 74  .#define NC_Part
1be30 49 64 78 20 20 20 30 78 30 30 30 32 20 20 2f 2a  Idx   0x0002  /*
1be40 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69   True if resolvi
1be50 6e 67 20 61 20 70 61 72 74 69 61 6c 20 69 6e 64  ng a partial ind
1be60 65 78 20 57 48 45 52 45 20 2a 2f 0a 23 64 65 66  ex WHERE */.#def
1be70 69 6e 65 20 4e 43 5f 49 73 43 68 65 63 6b 20 20  ine NC_IsCheck  
1be80 20 30 78 30 30 30 34 20 20 2f 2a 20 54 72 75 65   0x0004  /* True
1be90 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61   if resolving na
1bea0 6d 65 73 20 69 6e 20 61 20 43 48 45 43 4b 20 63  mes in a CHECK c
1beb0 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65  onstraint */.#de
1bec0 66 69 6e 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e  fine NC_InAggFun
1bed0 63 20 30 78 30 30 30 38 20 20 2f 2a 20 54 72 75  c 0x0008  /* Tru
1bee0 65 20 69 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61  e if analyzing a
1bef0 72 67 75 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61  rguments to an a
1bf00 67 67 20 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69  gg func */.#defi
1bf10 6e 65 20 4e 43 5f 48 61 73 41 67 67 20 20 20 20  ne NC_HasAgg    
1bf20 30 78 30 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f  0x0010  /* One o
1bf30 72 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65  r more aggregate
1bf40 20 66 75 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20   functions seen 
1bf50 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 49 64  */.#define NC_Id
1bf60 78 45 78 70 72 20 20 20 30 78 30 30 32 30 20 20  xExpr   0x0020  
1bf70 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 6f 6c  /* True if resol
1bf80 76 69 6e 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20  ving columns of 
1bf90 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a  CREATE INDEX */.
1bfa0 23 64 65 66 69 6e 65 20 4e 43 5f 56 61 72 53 65  #define NC_VarSe
1bfb0 6c 65 63 74 20 30 78 30 30 34 30 20 20 2f 2a 20  lect 0x0040  /* 
1bfc0 41 20 63 6f 72 72 65 6c 61 74 65 64 20 73 75 62  A correlated sub
1bfd0 71 75 65 72 79 20 68 61 73 20 62 65 65 6e 20 73  query has been s
1bfe0 65 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e  een */.#define N
1bff0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 30 78 31 30  C_MinMaxAgg 0x10
1c000 30 30 20 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61  00  /* min/max a
1c010 67 67 72 65 67 61 74 65 73 20 73 65 65 6e 2e 20  ggregates seen. 
1c020 20 53 65 65 20 6e 6f 74 65 20 61 62 6f 76 65 20   See note above 
1c030 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73  */../*.** An ins
1c040 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
1c050 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
1c060 20 63 6f 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e   contains all in
1c070 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65  formation.** nee
1c080 64 65 64 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ded to generate 
1c090 63 6f 64 65 20 66 6f 72 20 61 20 73 69 6e 67 6c  code for a singl
1c0a0 65 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  e SELECT stateme
1c0b0 6e 74 2e 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74  nt..**.** nLimit
1c0c0 20 69 73 20 73 65 74 20 74 6f 20 2d 31 20 69 66   is set to -1 if
1c0d0 20 74 68 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d   there is no LIM
1c0e0 49 54 20 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66  IT clause.  nOff
1c0f0 73 65 74 20 69 73 20 73 65 74 20 74 6f 20 30 2e  set is set to 0.
1c100 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 69 73 20  .** If there is 
1c110 61 20 4c 49 4d 49 54 20 63 6c 61 75 73 65 2c 20  a LIMIT clause, 
1c120 74 68 65 20 70 61 72 73 65 72 20 73 65 74 73 20  the parser sets 
1c130 6e 4c 69 6d 69 74 20 74 6f 20 74 68 65 20 76 61  nLimit to the va
1c140 6c 75 65 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69  lue of the.** li
1c150 6d 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20  mit and nOffset 
1c160 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
1c170 74 68 65 20 6f 66 66 73 65 74 20 28 6f 72 20 30  the offset (or 0
1c180 20 69 66 20 74 68 65 72 65 20 69 73 20 6e 6f 74   if there is not
1c190 0a 2a 2a 20 6f 66 66 73 65 74 29 2e 20 20 42 75  .** offset).  Bu
1c1a0 74 20 6c 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d  t later on, nLim
1c1b0 69 74 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 62  it and nOffset b
1c1c0 65 63 6f 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79  ecome the memory
1c1d0 20 6c 6f 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e   locations.** in
1c1e0 20 74 68 65 20 56 44 42 45 20 74 68 61 74 20 72   the VDBE that r
1c1f0 65 63 6f 72 64 20 74 68 65 20 6c 69 6d 69 74 20  ecord the limit 
1c200 61 6e 64 20 6f 66 66 73 65 74 20 63 6f 75 6e 74  and offset count
1c210 65 72 73 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f  ers..**.** addrO
1c220 70 65 6e 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65  penEphm[] entrie
1c230 73 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 61 64  s contain the ad
1c240 64 72 65 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e  dress of OP_Open
1c250 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65  Ephemeral opcode
1c260 73 2e 0a 2a 2a 20 54 68 65 73 65 20 61 64 64 72  s..** These addr
1c270 65 73 73 65 73 20 6d 75 73 74 20 62 65 20 73 74  esses must be st
1c280 6f 72 65 64 20 73 6f 20 74 68 61 74 20 77 65 20  ored so that we 
1c290 63 61 6e 20 67 6f 20 62 61 63 6b 20 61 6e 64 20  can go back and 
1c2a0 66 69 6c 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50  fill in.** the P
1c2b0 34 5f 4b 45 59 49 4e 46 4f 20 61 6e 64 20 50 32  4_KEYINFO and P2
1c2c0 20 70 61 72 61 6d 65 74 65 72 73 20 6c 61 74 65   parameters late
1c2d0 72 2e 20 20 4e 65 69 74 68 65 72 20 74 68 65 20  r.  Neither the 
1c2e0 4b 65 79 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74  KeyInfo nor.** t
1c2f0 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c  he number of col
1c300 75 6d 6e 73 20 69 6e 20 50 32 20 63 61 6e 20 62  umns in P2 can b
1c310 65 20 63 6f 6d 70 75 74 65 64 20 61 74 20 74 68  e computed at th
1c320 65 20 73 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61  e same time.** a
1c330 73 20 74 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68  s the OP_OpenEph
1c340 6d 20 69 6e 73 74 72 75 63 74 69 6f 6e 20 69 73  m instruction is
1c350 20 63 6f 64 65 64 20 62 65 63 61 75 73 65 20 6e   coded because n
1c360 6f 74 0a 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66  ot.** enough inf
1c370 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 74  ormation about t
1c380 68 65 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72  he compound quer
1c390 79 20 69 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68  y is known at th
1c3a0 61 74 20 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65  at point..** The
1c3b0 20 4b 65 79 49 6e 66 6f 20 66 6f 72 20 61 64 64   KeyInfo for add
1c3c0 72 4f 70 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64  rOpenTran[0] and
1c3d0 20 5b 31 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f   [1] contains co
1c3e0 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
1c3f0 73 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72 65 73  s.** for the res
1c400 75 6c 74 20 73 65 74 2e 20 20 54 68 65 20 4b 65  ult set.  The Ke
1c410 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1c420 65 6e 45 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69  enEphm[2] contai
1c430 6e 73 20 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20  ns collating.** 
1c440 73 65 71 75 65 6e 63 65 73 20 66 6f 72 20 74 68  sequences for th
1c450 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1c460 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c  e..*/.struct Sel
1c470 65 63 74 20 7b 0a 20 20 45 78 70 72 4c 69 73 74  ect {.  ExprList
1c480 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 20 20 2f   *pEList;      /
1c490 2a 20 54 68 65 20 66 69 65 6c 64 73 20 6f 66 20  * The fields of 
1c4a0 74 68 65 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20  the result */.  
1c4b0 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20  u8 op;          
1c4c0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
1c4d0 3a 20 54 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c  : TK_UNION TK_AL
1c4e0 4c 20 54 4b 5f 49 4e 54 45 52 53 45 43 54 20 54  L TK_INTERSECT T
1c4f0 4b 5f 45 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f  K_EXCEPT */.  Lo
1c500 67 45 73 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b  gEst nSelectRow;
1c510 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
1c520 64 20 6e 75 6d 62 65 72 20 6f 66 20 72 65 73 75  d number of resu
1c530 6c 74 20 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32  lt rows */.  u32
1c540 20 73 65 6c 46 6c 61 67 73 3b 20 20 20 20 20 20   selFlags;      
1c550 20 20 20 20 2f 2a 20 56 61 72 69 6f 75 73 20 53      /* Various S
1c560 46 5f 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  F_* values */.  
1c570 69 6e 74 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66  int iLimit, iOff
1c580 73 65 74 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79  set;   /* Memory
1c590 20 72 65 67 69 73 74 65 72 73 20 68 6f 6c 64 69   registers holdi
1c5a0 6e 67 20 4c 49 4d 49 54 20 26 20 4f 46 46 53 45  ng LIMIT & OFFSE
1c5b0 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69  T counters */.#i
1c5c0 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e  f SELECTTRACE_EN
1c5d0 41 42 4c 45 44 0a 20 20 63 68 61 72 20 7a 53 65  ABLED.  char zSe
1c5e0 6c 4e 61 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f  lName[12];     /
1c5f0 2a 20 53 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20  * Symbolic name 
1c600 6f 66 20 74 68 69 73 20 53 45 4c 45 43 54 20 75  of this SELECT u
1c610 73 65 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67  se for debugging
1c620 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
1c630 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d   addrOpenEphm[2]
1c640 3b 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70  ;   /* OP_OpenEp
1c650 68 65 6d 20 6f 70 63 6f 64 65 73 20 72 65 6c 61  hem opcodes rela
1c660 74 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65  ted to this sele
1c670 63 74 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20  ct */.  SrcList 
1c680 2a 70 53 72 63 3b 20 20 20 20 20 20 20 20 20 2f  *pSrc;         /
1c690 2a 20 54 68 65 20 46 52 4f 4d 20 63 6c 61 75 73  * The FROM claus
1c6a0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68  e */.  Expr *pWh
1c6b0 65 72 65 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ere;          /*
1c6c0 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73   The WHERE claus
1c6d0 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74 20  e */.  ExprList 
1c6e0 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a  *pGroupBy;    /*
1c6f0 20 54 68 65 20 47 52 4f 55 50 20 42 59 20 63 6c   The GROUP BY cl
1c700 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a  ause */.  Expr *
1c710 70 48 61 76 69 6e 67 3b 20 20 20 20 20 20 20 20  pHaving;        
1c720 20 2f 2a 20 54 68 65 20 48 41 56 49 4e 47 20 63   /* The HAVING c
1c730 6c 61 75 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c  lause */.  ExprL
1c740 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20  ist *pOrderBy;  
1c750 20 20 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42    /* The ORDER B
1c760 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65  Y clause */.  Se
1c770 6c 65 63 74 20 2a 70 50 72 69 6f 72 3b 20 20 20  lect *pPrior;   
1c780 20 20 20 20 20 2f 2a 20 50 72 69 6f 72 20 73 65       /* Prior se
1c790 6c 65 63 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75  lect in a compou
1c7a0 6e 64 20 73 65 6c 65 63 74 20 73 74 61 74 65 6d  nd select statem
1c7b0 65 6e 74 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  ent */.  Select 
1c7c0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20  *pNext;         
1c7d0 2f 2a 20 4e 65 78 74 20 73 65 6c 65 63 74 20 74  /* Next select t
1c7e0 6f 20 74 68 65 20 6c 65 66 74 20 69 6e 20 61 20  o the left in a 
1c7f0 63 6f 6d 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78  compound */.  Ex
1c800 70 72 20 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20  pr *pLimit;     
1c810 20 20 20 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78       /* LIMIT ex
1c820 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1c830 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1c840 2f 0a 20 20 45 78 70 72 20 2a 70 4f 66 66 73 65  /.  Expr *pOffse
1c850 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 46  t;         /* OF
1c860 46 53 45 54 20 65 78 70 72 65 73 73 69 6f 6e 2e  FSET expression.
1c870 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20   NULL means not 
1c880 75 73 65 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20  used. */.  With 
1c890 2a 70 57 69 74 68 3b 20 20 20 20 20 20 20 20 20  *pWith;         
1c8a0 20 20 2f 2a 20 57 49 54 48 20 63 6c 61 75 73 65    /* WITH clause
1c8b0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 69   attached to thi
1c8c0 73 20 73 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c  s select. Or NUL
1c8d0 4c 2e 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  L. */.};../*.** 
1c8e0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1c8f0 6f 72 20 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61  or Select.selFla
1c900 67 73 2e 20 20 54 68 65 20 22 53 46 22 20 70 72  gs.  The "SF" pr
1c910 65 66 69 78 20 73 74 61 6e 64 73 20 66 6f 72 0a  efix stands for.
1c920 2a 2a 20 22 53 65 6c 65 63 74 20 46 6c 61 67 22  ** "Select Flag"
1c930 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
1c940 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20 63  nstraints (all c
1c950 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65 72  hecked via asser
1c960 74 28 29 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48  t()).**     SF_H
1c970 61 73 41 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f  asAgg     == NC_
1c980 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 20 53 46  HasAgg.**     SF
1c990 5f 4d 69 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e  _MinMaxAgg  == N
1c9a0 43 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  C_MinMaxAgg     
1c9b0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d  == SQLITE_FUNC_M
1c9c0 49 4e 4d 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f  INMAX.**     SF_
1c9d0 46 69 78 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48  FixedLimit == WH
1c9e0 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f  ERE_USE_LIMIT.*/
1c9f0 0a 23 64 65 66 69 6e 65 20 53 46 5f 44 69 73 74  .#define SF_Dist
1ca00 69 6e 63 74 20 20 20 20 20 20 20 30 78 30 30 30  inct       0x000
1ca10 30 31 20 20 2f 2a 20 4f 75 74 70 75 74 20 73 68  01  /* Output sh
1ca20 6f 75 6c 64 20 62 65 20 44 49 53 54 49 4e 43 54  ould be DISTINCT
1ca30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 41   */.#define SF_A
1ca40 6c 6c 20 20 20 20 20 20 20 20 20 20 20 20 30 78  ll            0x
1ca50 30 30 30 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64  00002  /* Includ
1ca60 65 73 20 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f  es the ALL keywo
1ca70 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  rd */.#define SF
1ca80 5f 52 65 73 6f 6c 76 65 64 20 20 20 20 20 20 20  _Resolved       
1ca90 30 78 30 30 30 30 34 20 20 2f 2a 20 49 64 65 6e  0x00004  /* Iden
1caa0 74 69 66 69 65 72 73 20 68 61 76 65 20 62 65 65  tifiers have bee
1cab0 6e 20 72 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64  n resolved */.#d
1cac0 65 66 69 6e 65 20 53 46 5f 41 67 67 72 65 67 61  efine SF_Aggrega
1cad0 74 65 20 20 20 20 20 20 30 78 30 30 30 30 38 20  te      0x00008 
1cae0 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67   /* Contains agg
1caf0 20 66 75 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20   functions or a 
1cb00 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23 64 65 66  GROUP BY */.#def
1cb10 69 6e 65 20 53 46 5f 48 61 73 41 67 67 20 20 20  ine SF_HasAgg   
1cb20 20 20 20 20 20 20 30 78 30 30 30 31 30 20 20 2f        0x00010  /
1cb30 2a 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 72 65  * Contains aggre
1cb40 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a  gate functions *
1cb50 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 55 73 65  /.#define SF_Use
1cb60 73 45 70 68 65 6d 65 72 61 6c 20 20 30 78 30 30  sEphemeral  0x00
1cb70 30 32 30 20 20 2f 2a 20 55 73 65 73 20 74 68 65  020  /* Uses the
1cb80 20 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f   OpenEphemeral o
1cb90 70 63 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pcode */.#define
1cba0 20 53 46 5f 45 78 70 61 6e 64 65 64 20 20 20 20   SF_Expanded    
1cbb0 20 20 20 30 78 30 30 30 34 30 20 20 2f 2a 20 73     0x00040  /* s
1cbc0 71 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 61  qlite3SelectExpa
1cbd0 6e 64 28 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74  nd() called on t
1cbe0 68 69 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  his */.#define S
1cbf0 46 5f 48 61 73 54 79 70 65 49 6e 66 6f 20 20 20  F_HasTypeInfo   
1cc00 20 30 78 30 30 30 38 30 20 20 2f 2a 20 46 52 4f   0x00080  /* FRO
1cc10 4d 20 73 75 62 71 75 65 72 69 65 73 20 68 61 76  M subqueries hav
1cc20 65 20 54 61 62 6c 65 20 6d 65 74 61 64 61 74 61  e Table metadata
1cc30 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43   */.#define SF_C
1cc40 6f 6d 70 6f 75 6e 64 20 20 20 20 20 20 20 30 78  ompound       0x
1cc50 30 30 31 30 30 20 20 2f 2a 20 50 61 72 74 20 6f  00100  /* Part o
1cc60 66 20 61 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65  f a compound que
1cc70 72 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ry */.#define SF
1cc80 5f 56 61 6c 75 65 73 20 20 20 20 20 20 20 20 20  _Values         
1cc90 30 78 30 30 32 30 30 20 20 2f 2a 20 53 79 6e 74  0x00200  /* Synt
1cca0 68 65 73 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c  hesized from VAL
1ccb0 55 45 53 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64  UES clause */.#d
1ccc0 65 66 69 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61  efine SF_MultiVa
1ccd0 6c 75 65 20 20 20 20 20 30 78 30 30 34 30 30 20  lue     0x00400 
1cce0 20 2f 2a 20 53 69 6e 67 6c 65 20 56 41 4c 55 45   /* Single VALUE
1ccf0 53 20 74 65 72 6d 20 77 69 74 68 20 6d 75 6c 74  S term with mult
1cd00 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65  iple rows */.#de
1cd10 66 69 6e 65 20 53 46 5f 4e 65 73 74 65 64 46 72  fine SF_NestedFr
1cd20 6f 6d 20 20 20 20 20 30 78 30 30 38 30 30 20 20  om     0x00800  
1cd30 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 70 61 72  /* Part of a par
1cd40 65 6e 74 68 65 73 69 7a 65 64 20 46 52 4f 4d 20  enthesized FROM 
1cd50 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e  clause */.#defin
1cd60 65 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20  e SF_MinMaxAgg  
1cd70 20 20 20 20 30 78 30 31 30 30 30 20 20 2f 2a 20      0x01000  /* 
1cd80 41 67 67 72 65 67 61 74 65 20 63 6f 6e 74 61 69  Aggregate contai
1cd90 6e 69 6e 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61  ning min() or ma
1cda0 78 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  x() */.#define S
1cdb0 46 5f 52 65 63 75 72 73 69 76 65 20 20 20 20 20  F_Recursive     
1cdc0 20 30 78 30 32 30 30 30 20 20 2f 2a 20 54 68 65   0x02000  /* The
1cdd0 20 72 65 63 75 72 73 69 76 65 20 70 61 72 74 20   recursive part 
1cde0 6f 66 20 61 20 72 65 63 75 72 73 69 76 65 20 43  of a recursive C
1cdf0 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  TE */.#define SF
1ce00 5f 46 69 78 65 64 4c 69 6d 69 74 20 20 20 20 20  _FixedLimit     
1ce10 30 78 30 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c  0x04000  /* nSel
1ce20 65 63 74 52 6f 77 20 73 65 74 20 62 79 20 61 20  ectRow set by a 
1ce30 63 6f 6e 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a  constant LIMIT *
1ce40 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 61 79  /.#define SF_May
1ce50 62 65 43 6f 6e 76 65 72 74 20 20 20 30 78 30 38  beConvert   0x08
1ce60 30 30 30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e  000  /* Need con
1ce70 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65  vertCompoundSele
1ce80 63 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a  ctToSubquery() *
1ce90 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e  /.#define SF_Con
1cea0 76 65 72 74 65 64 20 20 20 20 20 20 30 78 31 30  verted      0x10
1ceb0 30 30 30 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65  000  /* By conve
1cec0 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74  rtCompoundSelect
1ced0 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a  ToSubquery() */.
1cee0 23 64 65 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75  #define SF_Inclu
1cef0 64 65 48 69 64 64 65 6e 20 20 30 78 32 30 30 30  deHidden  0x2000
1cf00 30 20 20 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69  0  /* Include hi
1cf10 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20  dden columns in 
1cf20 6f 75 74 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a  output */.../*.*
1cf30 2a 20 54 68 65 20 72 65 73 75 6c 74 73 20 6f 66  * The results of
1cf40 20 61 20 53 45 4c 45 43 54 20 63 61 6e 20 62 65   a SELECT can be
1cf50 20 64 69 73 74 72 69 62 75 74 65 64 20 69 6e 20   distributed in 
1cf60 73 65 76 65 72 61 6c 20 77 61 79 73 2c 20 61 73  several ways, as
1cf70 20 64 65 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f   defined.** by o
1cf80 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ne of the follow
1cf90 69 6e 67 20 6d 61 63 72 6f 73 2e 20 20 54 68 65  ing macros.  The
1cfa0 20 22 53 52 54 22 20 70 72 65 66 69 78 20 6d 65   "SRT" prefix me
1cfb0 61 6e 73 20 22 53 45 4c 45 43 54 20 52 65 73 75  ans "SELECT Resu
1cfc0 6c 74 0a 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a  lt.** Type"..**.
1cfd0 2a 2a 20 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e  **     SRT_Union
1cfe0 20 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73         Store res
1cff0 75 6c 74 73 20 61 73 20 61 20 6b 65 79 20 69 6e  ults as a key in
1d000 20 61 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64   a temporary ind
1d010 65 78 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  ex.**           
1d020 20 20 20 20 20 20 20 20 20 20 69 64 65 6e 74 69            identi
1d030 66 69 65 64 20 62 79 20 70 44 65 73 74 2d 3e 69  fied by pDest->i
1d040 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20  SDParm..**.**   
1d050 20 20 53 52 54 5f 45 78 63 65 70 74 20 20 20 20    SRT_Except    
1d060 20 20 52 65 6d 6f 76 65 20 72 65 73 75 6c 74 73    Remove results
1d070 20 66 72 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72   from the tempor
1d080 61 72 79 20 69 6e 64 65 78 20 70 44 65 73 74 2d  ary index pDest-
1d090 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20  >iSDParm..**.** 
1d0a0 20 20 20 20 53 52 54 5f 45 78 69 73 74 73 20 20      SRT_Exists  
1d0b0 20 20 20 20 53 74 6f 72 65 20 61 20 31 20 69 6e      Store a 1 in
1d0c0 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65   memory cell pDe
1d0d0 73 74 2d 3e 69 53 44 50 61 72 6d 20 69 66 20 74  st->iSDParm if t
1d0e0 68 65 20 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20  he result.**    
1d0f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d100 20 73 65 74 20 69 73 20 6e 6f 74 20 65 6d 70 74   set is not empt
1d110 79 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  y..**.**     SRT
1d120 5f 44 69 73 63 61 72 64 20 20 20 20 20 54 68 72  _Discard     Thr
1d130 6f 77 20 74 68 65 20 72 65 73 75 6c 74 73 20 61  ow the results a
1d140 77 61 79 2e 20 20 54 68 69 73 20 69 73 20 75 73  way.  This is us
1d150 65 64 20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20  ed by SELECT.** 
1d160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d170 20 20 20 20 73 74 61 74 65 6d 65 6e 74 73 20 77      statements w
1d180 69 74 68 69 6e 20 74 72 69 67 67 65 72 73 20 77  ithin triggers w
1d190 68 6f 73 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73  hose only purpos
1d1a0 65 20 69 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  e is.**         
1d1b0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1d1c0 73 69 64 65 2d 65 66 66 65 63 74 73 20 6f 66 20  side-effects of 
1d1d0 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
1d1e0 20 41 6c 6c 20 6f 66 20 74 68 65 20 61 62 6f 76   All of the abov
1d1f0 65 20 61 72 65 20 66 72 65 65 20 74 6f 20 69 67  e are free to ig
1d200 6e 6f 72 65 20 74 68 65 69 72 20 4f 52 44 45 52  nore their ORDER
1d210 20 42 59 20 63 6c 61 75 73 65 2e 20 54 68 6f 73   BY clause. Thos
1d220 65 20 74 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77  e that.** follow
1d230 20 6d 75 73 74 20 68 6f 6e 6f 72 20 74 68 65 20   must honor the 
1d240 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e  ORDER BY clause.
1d250 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f  .**.**     SRT_O
1d260 75 74 70 75 74 20 20 20 20 20 20 47 65 6e 65 72  utput      Gener
1d270 61 74 65 20 61 20 72 6f 77 20 6f 66 20 6f 75 74  ate a row of out
1d280 70 75 74 20 28 75 73 69 6e 67 20 74 68 65 20 4f  put (using the O
1d290 50 5f 52 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20  P_ResultRow.**  
1d2a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d2b0 20 20 20 6f 70 63 6f 64 65 29 20 66 6f 72 20 65     opcode) for e
1d2c0 61 63 68 20 72 6f 77 20 69 6e 20 74 68 65 20 72  ach row in the r
1d2d0 65 73 75 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a  esult set..**.**
1d2e0 20 20 20 20 20 53 52 54 5f 4d 65 6d 20 20 20 20       SRT_Mem    
1d2f0 20 20 20 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20       Only valid 
1d300 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69 73  if the result is
1d310 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e   a single column
1d320 2e 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  ..**            
1d330 20 20 20 20 20 20 20 20 20 53 74 6f 72 65 20 74           Store t
1d340 68 65 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  he first column 
1d350 6f 66 20 74 68 65 20 66 69 72 73 74 20 72 65 73  of the first res
1d360 75 6c 74 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20  ult row.**      
1d370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
1d380 6e 20 72 65 67 69 73 74 65 72 20 70 44 65 73 74  n register pDest
1d390 2d 3e 69 53 44 50 61 72 6d 20 74 68 65 6e 20 61  ->iSDParm then a
1d3a0 62 61 6e 64 6f 6e 20 74 68 65 20 72 65 73 74 0a  bandon the rest.
1d3b0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d3c0 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 71 75         of the qu
1d3d0 65 72 79 2e 20 20 54 68 69 73 20 64 65 73 74 69  ery.  This desti
1d3e0 6e 61 74 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22  nation implies "
1d3f0 4c 49 4d 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20  LIMIT 1"..**.** 
1d400 20 20 20 20 53 52 54 5f 53 65 74 20 20 20 20 20      SRT_Set     
1d410 20 20 20 20 54 68 65 20 72 65 73 75 6c 74 20 6d      The result m
1d420 75 73 74 20 62 65 20 61 20 73 69 6e 67 6c 65 20  ust be a single 
1d430 63 6f 6c 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65  column.  Store e
1d440 61 63 68 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ach.**          
1d450 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 6f             row o
1d460 66 20 72 65 73 75 6c 74 20 61 73 20 74 68 65 20  f result as the 
1d470 6b 65 79 20 69 6e 20 74 61 62 6c 65 20 70 44 65  key in table pDe
1d480 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d4a0 20 20 20 20 41 70 70 6c 79 20 74 68 65 20 61 66      Apply the af
1d4b0 66 69 6e 69 74 79 20 70 44 65 73 74 2d 3e 61 66  finity pDest->af
1d4c0 66 53 64 73 74 20 62 65 66 6f 72 65 20 73 74 6f  fSdst before sto
1d4d0 72 69 6e 67 0a 2a 2a 20 20 20 20 20 20 20 20 20  ring.**         
1d4e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
1d4f0 6c 74 73 2e 20 20 55 73 65 64 20 74 6f 20 69 6d  lts.  Used to im
1d500 70 6c 65 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c  plement "IN (SEL
1d510 45 43 54 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a  ECT ...)"..**.**
1d520 20 20 20 20 20 53 52 54 5f 45 70 68 65 6d 54 61       SRT_EphemTa
1d530 62 20 20 20 20 43 72 65 61 74 65 20 61 6e 20 74  b    Create an t
1d540 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1d550 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e  Dest->iSDParm an
1d560 64 20 73 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20  d store.**      
1d570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1d580 68 65 20 72 65 73 75 6c 74 20 74 68 65 72 65 2e  he result there.
1d590 20 54 68 65 20 63 75 72 73 6f 72 20 69 73 20 6c   The cursor is l
1d5a0 65 66 74 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a  eft open after.*
1d5b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d5c0 20 20 20 20 20 20 72 65 74 75 72 6e 69 6e 67 2e        returning.
1d5d0 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1d5e0 52 54 5f 54 61 62 6c 65 20 65 78 63 65 70 74 20  RT_Table except 
1d5f0 74 68 61 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  that.**         
1d600 20 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73              this
1d610 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 75 73 65   destination use
1d620 73 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  s OP_OpenEphemer
1d630 61 6c 20 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20  al to create.** 
1d640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d650 20 20 20 20 74 68 65 20 74 61 62 6c 65 20 66 69      the table fi
1d660 72 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  rst..**.**     S
1d670 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 47  RT_Coroutine   G
1d680 65 6e 65 72 61 74 65 20 61 20 63 6f 2d 72 6f 75  enerate a co-rou
1d690 74 69 6e 65 20 74 68 61 74 20 72 65 74 75 72 6e  tine that return
1d6a0 73 20 61 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a  s a new row of.*
1d6b0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1d6c0 20 20 20 20 20 20 72 65 73 75 6c 74 73 20 65 61        results ea
1d6d0 63 68 20 74 69 6d 65 20 69 74 20 69 73 20 69 6e  ch time it is in
1d6e0 76 6f 6b 65 64 2e 20 20 54 68 65 20 65 6e 74 72  voked.  The entr
1d6f0 79 20 70 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20  y point.**      
1d700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f                 o
1d710 66 20 74 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65  f the co-routine
1d720 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20 72 65   is stored in re
1d730 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69 53  gister pDest->iS
1d740 44 50 61 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20  DParm.**        
1d750 20 20 20 20 20 20 20 20 20 20 20 20 20 61 6e 64               and
1d760 20 74 68 65 20 72 65 73 75 6c 74 20 72 6f 77 20   the result row 
1d770 69 73 20 73 74 6f 72 65 64 20 69 6e 20 70 44 65  is stored in pDe
1d780 73 74 2d 3e 6e 44 65 73 74 20 72 65 67 69 73 74  st->nDest regist
1d790 65 72 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ers.**          
1d7a0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 72 74             start
1d7b0 69 6e 67 20 77 69 74 68 20 70 44 65 73 74 2d 3e  ing with pDest->
1d7c0 69 53 64 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  iSdst..**.**    
1d7d0 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1d7e0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69   Store results i
1d7f0 6e 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c  n temporary tabl
1d800 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1d810 2e 0a 2a 2a 20 20 20 20 20 53 52 54 5f 46 69 66  ..**     SRT_Fif
1d820 6f 20 20 20 20 20 20 20 20 54 68 69 73 20 69 73  o        This is
1d830 20 6c 69 6b 65 20 53 52 54 5f 45 70 68 65 6d 54   like SRT_EphemT
1d840 61 62 20 65 78 63 65 70 74 20 74 68 61 74 20 74  ab except that t
1d850 68 65 20 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20  he table.**     
1d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d870 69 73 20 61 73 73 75 6d 65 64 20 74 6f 20 61 6c  is assumed to al
1d880 72 65 61 64 79 20 62 65 20 6f 70 65 6e 2e 20 20  ready be open.  
1d890 53 52 54 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20  SRT_Fifo has.** 
1d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d8b0 20 20 20 20 74 68 65 20 61 64 64 69 74 69 6f 6e      the addition
1d8c0 61 6c 20 70 72 6f 70 65 72 74 79 20 6f 66 20 62  al property of b
1d8d0 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 69 67 6e  eing able to ign
1d8e0 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20  ore.**          
1d8f0 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20 4f             the O
1d900 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1d910 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1d920 73 74 46 69 66 6f 20 20 20 20 53 74 6f 72 65 20  stFifo    Store 
1d930 72 65 73 75 6c 74 73 20 69 6e 20 61 20 74 65 6d  results in a tem
1d940 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65  porary table pDe
1d950 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20  st->iSDParm..** 
1d960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d970 20 20 20 20 42 75 74 20 61 6c 73 6f 20 75 73 65      But also use
1d980 20 74 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65   temporary table
1d990 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b   pDest->iSDParm+
1d9a0 31 20 61 73 0a 2a 2a 20 20 20 20 20 20 20 20 20  1 as.**         
1d9b0 20 20 20 20 20 20 20 20 20 20 20 20 61 20 72 65              a re
1d9c0 63 6f 72 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f  cord of all prio
1d9d0 72 20 72 65 73 75 6c 74 73 20 61 6e 64 20 69 67  r results and ig
1d9e0 6e 6f 72 65 20 61 6e 79 20 64 75 70 6c 69 63 61  nore any duplica
1d9f0 74 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  te.**           
1da00 20 20 20 20 20 20 20 20 20 20 72 6f 77 73 2e 20            rows. 
1da10 20 4e 61 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44   Name means:  "D
1da20 69 73 74 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a  istinct Fifo"..*
1da30 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 51 75 65  *.**     SRT_Que
1da40 75 65 20 20 20 20 20 20 20 53 74 6f 72 65 20 72  ue       Store r
1da50 65 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69  esults in priori
1da60 74 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e  ty queue pDest->
1da70 69 53 44 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a  iSDParm (really.
1da80 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1da90 20 20 20 20 20 20 20 61 6e 20 69 6e 64 65 78 29         an index)
1daa0 2e 20 20 41 70 70 65 6e 64 20 61 20 73 65 71 75  .  Append a sequ
1dab0 65 6e 63 65 20 6e 75 6d 62 65 72 20 73 6f 20 74  ence number so t
1dac0 68 61 74 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a  hat all entries.
1dad0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1dae0 20 20 20 20 20 20 20 61 72 65 20 64 69 73 74 69         are disti
1daf0 6e 63 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  nct..**.**     S
1db00 52 54 5f 44 69 73 74 51 75 65 75 65 20 20 20 53  RT_DistQueue   S
1db10 74 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20  tore results in 
1db20 70 72 69 6f 72 69 74 79 20 71 75 65 75 65 20 70  priority queue p
1db30 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e  Dest->iSDParm on
1db40 6c 79 20 69 66 0a 2a 2a 20 20 20 20 20 20 20 20  ly if.**        
1db50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1db60 20 73 61 6d 65 20 72 65 63 6f 72 64 20 68 61 73   same record has
1db70 20 6e 65 76 65 72 20 62 65 65 6e 20 73 74 6f 72   never been stor
1db80 65 64 20 62 65 66 6f 72 65 2e 20 20 54 68 65 0a  ed before.  The.
1db90 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1dba0 20 20 20 20 20 20 20 69 6e 64 65 78 20 61 74 20         index at 
1dbb0 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31  pDest->iSDParm+1
1dbc0 20 68 6f 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20   hold all prior 
1dbd0 73 74 6f 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69  stores..*/.#defi
1dbe0 6e 65 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20  ne SRT_Union    
1dbf0 20 20 20 20 31 20 20 2f 2a 20 53 74 6f 72 65 20      1  /* Store 
1dc00 72 65 73 75 6c 74 20 61 73 20 6b 65 79 73 20 69  result as keys i
1dc10 6e 20 61 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  n an index */.#d
1dc20 65 66 69 6e 65 20 53 52 54 5f 45 78 63 65 70 74  efine SRT_Except
1dc30 20 20 20 20 20 20 20 32 20 20 2f 2a 20 52 65 6d         2  /* Rem
1dc40 6f 76 65 20 72 65 73 75 6c 74 20 66 72 6f 6d 20  ove result from 
1dc50 61 20 55 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f  a UNION index */
1dc60 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45 78 69  .#define SRT_Exi
1dc70 73 74 73 20 20 20 20 20 20 20 33 20 20 2f 2a 20  sts       3  /* 
1dc80 53 74 6f 72 65 20 31 20 69 66 20 74 68 65 20 72  Store 1 if the r
1dc90 65 73 75 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70  esult is not emp
1dca0 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ty */.#define SR
1dcb0 54 5f 44 69 73 63 61 72 64 20 20 20 20 20 20 34  T_Discard      4
1dcc0 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65    /* Do not save
1dcd0 20 74 68 65 20 72 65 73 75 6c 74 73 20 61 6e 79   the results any
1dce0 77 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65  where */.#define
1dcf0 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20 20   SRT_Fifo       
1dd00 20 20 35 20 20 2f 2a 20 53 74 6f 72 65 20 72 65    5  /* Store re
1dd10 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1dd20 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1dd30 6f 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  owid */.#define 
1dd40 53 52 54 5f 44 69 73 74 46 69 66 6f 20 20 20 20  SRT_DistFifo    
1dd50 20 36 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f   6  /* Like SRT_
1dd60 46 69 66 6f 2c 20 62 75 74 20 75 6e 69 71 75 65  Fifo, but unique
1dd70 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f   results only */
1dd80 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 51 75 65  .#define SRT_Que
1dd90 75 65 20 20 20 20 20 20 20 20 37 20 20 2f 2a 20  ue        7  /* 
1dda0 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20  Store result in 
1ddb0 61 6e 20 71 75 65 75 65 20 2a 2f 0a 23 64 65 66  an queue */.#def
1ddc0 69 6e 65 20 53 52 54 5f 44 69 73 74 51 75 65 75  ine SRT_DistQueu
1ddd0 65 20 20 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20  e    8  /* Like 
1dde0 53 52 54 5f 51 75 65 75 65 2c 20 62 75 74 20 75  SRT_Queue, but u
1ddf0 6e 69 71 75 65 20 72 65 73 75 6c 74 73 20 6f 6e  nique results on
1de00 6c 79 20 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52  ly */../* The OR
1de10 44 45 52 20 42 59 20 63 6c 61 75 73 65 20 69 73  DER BY clause is
1de20 20 69 67 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c   ignored for all
1de30 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 2a 2f   of the above */
1de40 0a 23 64 65 66 69 6e 65 20 49 67 6e 6f 72 61 62  .#define Ignorab
1de50 6c 65 4f 72 64 65 72 62 79 28 58 29 20 28 28 58  leOrderby(X) ((X
1de60 2d 3e 65 44 65 73 74 29 3c 3d 53 52 54 5f 44 69  ->eDest)<=SRT_Di
1de70 73 74 51 75 65 75 65 29 0a 0a 23 64 65 66 69 6e  stQueue)..#defin
1de80 65 20 53 52 54 5f 4f 75 74 70 75 74 20 20 20 20  e SRT_Output    
1de90 20 20 20 39 20 20 2f 2a 20 4f 75 74 70 75 74 20     9  /* Output 
1dea0 65 61 63 68 20 72 6f 77 20 6f 66 20 72 65 73 75  each row of resu
1deb0 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  lt */.#define SR
1dec0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 31 30  T_Mem         10
1ded0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1dee0 74 20 69 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65  t in a memory ce
1def0 6c 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  ll */.#define SR
1df00 54 5f 53 65 74 20 20 20 20 20 20 20 20 20 31 31  T_Set         11
1df10 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1df20 74 73 20 61 73 20 6b 65 79 73 20 69 6e 20 61 6e  ts as keys in an
1df30 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1df40 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20  e SRT_EphemTab  
1df50 20 20 31 32 20 20 2f 2a 20 43 72 65 61 74 65 20    12  /* Create 
1df60 74 72 61 6e 73 69 65 6e 74 20 74 61 62 20 61 6e  transient tab an
1df70 64 20 73 74 6f 72 65 20 6c 69 6b 65 20 53 52 54  d store like SRT
1df80 5f 54 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e  _Table */.#defin
1df90 65 20 53 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20  e SRT_Coroutine 
1dfa0 20 20 31 33 20 20 2f 2a 20 47 65 6e 65 72 61 74    13  /* Generat
1dfb0 65 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f  e a single row o
1dfc0 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66  f result */.#def
1dfd0 69 6e 65 20 53 52 54 5f 54 61 62 6c 65 20 20 20  ine SRT_Table   
1dfe0 20 20 20 20 31 34 20 20 2f 2a 20 53 74 6f 72 65      14  /* Store
1dff0 20 72 65 73 75 6c 74 20 61 73 20 64 61 74 61 20   result as data 
1e000 77 69 74 68 20 61 6e 20 61 75 74 6f 6d 61 74 69  with an automati
1e010 63 20 72 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a  c rowid */../*.*
1e020 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
1e030 20 74 68 69 73 20 6f 62 6a 65 63 74 20 64 65 73   this object des
1e040 63 72 69 62 65 73 20 77 68 65 72 65 20 74 6f 20  cribes where to 
1e050 70 75 74 20 6f 66 20 74 68 65 20 72 65 73 75 6c  put of the resul
1e060 74 73 20 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43  ts of.** a SELEC
1e070 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a  T statement..*/.
1e080 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
1e090 74 20 7b 0a 20 20 75 38 20 65 44 65 73 74 3b 20  t {.  u8 eDest; 
1e0a0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48 6f             /* Ho
1e0b0 77 20 74 6f 20 64 69 73 70 6f 73 65 20 6f 66 20  w to dispose of 
1e0c0 74 68 65 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e  the results.  On
1e0d0 20 6f 66 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e   of SRT_* above.
1e0e0 20 2a 2f 0a 20 20 69 6e 74 20 69 53 44 50 61 72   */.  int iSDPar
1e0f0 6d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  m;         /* A 
1e100 70 61 72 61 6d 65 74 65 72 20 75 73 65 64 20 62  parameter used b
1e110 79 20 74 68 65 20 65 44 65 73 74 20 64 69 73 70  y the eDest disp
1e120 6f 73 61 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20  osal method */. 
1e130 20 69 6e 74 20 69 53 64 73 74 3b 20 20 20 20 20   int iSdst;     
1e140 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1e150 67 69 73 74 65 72 20 77 68 65 72 65 20 72 65 73  gister where res
1e160 75 6c 74 73 20 61 72 65 20 77 72 69 74 74 65 6e  ults are written
1e170 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b   */.  int nSdst;
1e180 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1e190 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
1e1a0 73 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  s allocated */. 
1e1b0 20 63 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b   char *zAffSdst;
1e1c0 20 20 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74        /* Affinit
1e1d0 79 20 75 73 65 64 20 77 68 65 6e 20 65 44 65 73  y used when eDes
1e1e0 74 3d 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20  t==SRT_Set */.  
1e1f0 45 78 70 72 4c 69 73 74 20 2a 70 4f 72 64 65 72  ExprList *pOrder
1e200 42 79 3b 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75  By;  /* Key colu
1e210 6d 6e 73 20 66 6f 72 20 53 52 54 5f 51 75 65 75  mns for SRT_Queu
1e220 65 20 61 6e 64 20 53 52 54 5f 44 69 73 74 51 75  e and SRT_DistQu
1e230 65 75 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  eue */.};../*.**
1e240 20 44 75 72 69 6e 67 20 63 6f 64 65 20 67 65 6e   During code gen
1e250 65 72 61 74 69 6f 6e 20 6f 66 20 73 74 61 74 65  eration of state
1e260 6d 65 6e 74 73 20 74 68 61 74 20 64 6f 20 69 6e  ments that do in
1e270 73 65 72 74 73 20 69 6e 74 6f 20 41 55 54 4f 49  serts into AUTOI
1e280 4e 43 52 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c  NCREMENT.** tabl
1e290 65 73 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e  es, the followin
1e2a0 67 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  g information is
1e2b0 20 61 74 74 61 63 68 65 64 20 74 6f 20 74 68 65   attached to the
1e2c0 20 54 61 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63   Table.u.autoInc
1e2d0 2e 70 0a 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66  .p.** pointer of
1e2e0 20 65 61 63 68 20 61 75 74 6f 69 6e 63 72 65 6d   each autoincrem
1e2f0 65 6e 74 20 74 61 62 6c 65 20 74 6f 20 72 65 63  ent table to rec
1e300 6f 72 64 20 73 6f 6d 65 20 73 69 64 65 20 69 6e  ord some side in
1e310 66 6f 72 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a  formation that.*
1e320 2a 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65 72  * the code gener
1e330 61 74 6f 72 20 6e 65 65 64 73 2e 20 20 57 65 20  ator needs.  We 
1e340 68 61 76 65 20 74 6f 20 6b 65 65 70 20 70 65 72  have to keep per
1e350 2d 74 61 62 6c 65 20 61 75 74 6f 69 6e 63 72 65  -table autoincre
1e360 6d 65 6e 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74  ment.** informat
1e370 69 6f 6e 20 69 6e 20 63 61 73 65 20 69 6e 73 65  ion in case inse
1e380 72 74 73 20 61 72 65 20 64 6f 6e 65 20 77 69 74  rts are done wit
1e390 68 69 6e 20 74 72 69 67 67 65 72 73 2e 20 20 54  hin triggers.  T
1e3a0 72 69 67 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a  riggers do not.*
1e3b0 2a 20 6e 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64  * normally coord
1e3c0 69 6e 61 74 65 20 74 68 65 69 72 20 61 63 74 69  inate their acti
1e3d0 76 69 74 69 65 73 2c 20 62 75 74 20 77 65 20 64  vities, but we d
1e3e0 6f 20 6e 65 65 64 20 74 6f 20 63 6f 6f 72 64 69  o need to coordi
1e3f0 6e 61 74 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64  nate the.** load
1e400 69 6e 67 20 61 6e 64 20 73 61 76 69 6e 67 20 6f  ing and saving o
1e410 66 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  f autoincrement 
1e420 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a  information..*/.
1e430 73 74 72 75 63 74 20 41 75 74 6f 69 6e 63 49 6e  struct AutoincIn
1e440 66 6f 20 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e  fo {.  AutoincIn
1e450 66 6f 20 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20  fo *pNext;   /* 
1e460 4e 65 78 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20  Next info block 
1e470 69 6e 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65  in a list of the
1e480 6d 20 61 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65  m all */.  Table
1e490 20 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20   *pTab;         
1e4a0 20 2f 2a 20 54 61 62 6c 65 20 74 68 69 73 20 69   /* Table this i
1e4b0 6e 66 6f 20 62 6c 6f 63 6b 20 72 65 66 65 72 73  nfo block refers
1e4c0 20 74 6f 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62   to */.  int iDb
1e4d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1e4e0 2a 20 49 6e 64 65 78 20 69 6e 20 73 71 6c 69 74  * Index in sqlit
1e4f0 65 33 2e 61 44 62 5b 5d 20 6f 66 20 64 61 74 61  e3.aDb[] of data
1e500 62 61 73 65 20 68 6f 6c 64 69 6e 67 20 70 54 61  base holding pTa
1e510 62 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 43 74  b */.  int regCt
1e520 72 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  r;           /* 
1e530 4d 65 6d 6f 72 79 20 72 65 67 69 73 74 65 72 20  Memory register 
1e540 68 6f 6c 64 69 6e 67 20 74 68 65 20 72 6f 77 69  holding the rowi
1e550 64 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a  d counter */.};.
1e560 0a 2f 2a 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74  ./*.** Size of t
1e570 68 65 20 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a  he column cache.
1e580 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
1e590 45 5f 4e 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64  E_N_COLCACHE.# d
1e5a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43  efine SQLITE_N_C
1e5b0 4f 4c 43 41 43 48 45 20 31 30 0a 23 65 6e 64 69  OLCACHE 10.#endi
1e5c0 66 0a 0a 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73  f../*.** At leas
1e5d0 74 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f  t one instance o
1e5e0 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1e5f0 73 74 72 75 63 74 75 72 65 20 69 73 20 63 72 65  structure is cre
1e600 61 74 65 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a  ated for each.**
1e610 20 74 72 69 67 67 65 72 20 74 68 61 74 20 6d 61   trigger that ma
1e620 79 20 62 65 20 66 69 72 65 64 20 77 68 69 6c 65  y be fired while
1e630 20 70 61 72 73 69 6e 67 20 61 6e 20 49 4e 53 45   parsing an INSE
1e640 52 54 2c 20 55 50 44 41 54 45 20 6f 72 20 44 45  RT, UPDATE or DE
1e650 4c 45 54 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e  LETE.** statemen
1e660 74 2e 20 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65  t. All such obje
1e670 63 74 73 20 61 72 65 20 73 74 6f 72 65 64 20 69  cts are stored i
1e680 6e 20 74 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73  n the linked lis
1e690 74 20 68 65 61 64 65 64 20 61 74 0a 2a 2a 20 50  t headed at.** P
1e6a0 61 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67  arse.pTriggerPrg
1e6b0 20 61 6e 64 20 64 65 6c 65 74 65 64 20 6f 6e 63   and deleted onc
1e6c0 65 20 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70  e statement comp
1e6d0 69 6c 61 74 69 6f 6e 20 68 61 73 20 62 65 65 6e  ilation has been
1e6e0 0a 2a 2a 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a  .** completed..*
1e6f0 2a 0a 2a 2a 20 41 20 56 64 62 65 20 73 75 62 2d  *.** A Vdbe sub-
1e700 70 72 6f 67 72 61 6d 20 74 68 61 74 20 69 6d 70  program that imp
1e710 6c 65 6d 65 6e 74 73 20 74 68 65 20 62 6f 64 79  lements the body
1e720 20 61 6e 64 20 57 48 45 4e 20 63 6c 61 75 73 65   and WHEN clause
1e730 20 6f 66 20 74 72 69 67 67 65 72 0a 2a 2a 20 54   of trigger.** T
1e740 72 69 67 67 65 72 50 72 67 2e 70 54 72 69 67 67  riggerPrg.pTrigg
1e750 65 72 2c 20 61 73 73 75 6d 69 6e 67 20 61 20 64  er, assuming a d
1e760 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49  efault ON CONFLI
1e770 43 54 20 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20  CT clause of.** 
1e780 54 72 69 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e  TriggerPrg.orcon
1e790 66 2c 20 69 73 20 73 74 6f 72 65 64 20 69 6e 20  f, is stored in 
1e7a0 74 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 70  the TriggerPrg.p
1e7b0 50 72 6f 67 72 61 6d 20 76 61 72 69 61 62 6c 65  Program variable
1e7c0 2e 0a 2a 2a 20 54 68 65 20 50 61 72 73 65 2e 70  ..** The Parse.p
1e7d0 54 72 69 67 67 65 72 50 72 67 20 6c 69 73 74 20  TriggerPrg list 
1e7e0 6e 65 76 65 72 20 63 6f 6e 74 61 69 6e 73 20 74  never contains t
1e7f0 77 6f 20 65 6e 74 72 69 65 73 20 77 69 74 68 20  wo entries with 
1e800 74 68 65 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75  the same.** valu
1e810 65 73 20 66 6f 72 20 62 6f 74 68 20 70 54 72 69  es for both pTri
1e820 67 67 65 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e  gger and orconf.
1e830 0a 2a 2a 0a 2a 2a 20 54 68 65 20 54 72 69 67 67  .**.** The Trigg
1e840 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30  erPrg.aColmask[0
1e850 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1e860 74 20 74 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f  t to a mask of o
1e870 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20  ld.* columns.** 
1e880 61 63 63 65 73 73 65 64 20 28 6f 72 20 73 65 74  accessed (or set
1e890 20 74 6f 20 30 20 66 6f 72 20 74 72 69 67 67 65   to 0 for trigge
1e8a0 72 73 20 66 69 72 65 64 20 61 73 20 61 20 72 65  rs fired as a re
1e8b0 73 75 6c 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a  sult of INSERT.*
1e8c0 2a 20 73 74 61 74 65 6d 65 6e 74 73 29 2e 20 53  * statements). S
1e8d0 69 6d 69 6c 61 72 6c 79 2c 20 74 68 65 20 54 72  imilarly, the Tr
1e8e0 69 67 67 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73  iggerPrg.aColmas
1e8f0 6b 5b 31 5d 20 76 61 72 69 61 62 6c 65 20 69 73  k[1] variable is
1e900 20 73 65 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73   set to.** a mas
1e910 6b 20 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  k of new.* colum
1e920 6e 73 20 75 73 65 64 20 62 79 20 74 68 65 20 70  ns used by the p
1e930 72 6f 67 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63  rogram..*/.struc
1e940 74 20 54 72 69 67 67 65 72 50 72 67 20 7b 0a 20  t TriggerPrg {. 
1e950 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67 67   Trigger *pTrigg
1e960 65 72 3b 20 20 20 20 20 20 2f 2a 20 54 72 69 67  er;      /* Trig
1e970 67 65 72 20 74 68 69 73 20 70 72 6f 67 72 61 6d  ger this program
1e980 20 77 61 73 20 63 6f 64 65 64 20 66 72 6f 6d 20   was coded from 
1e990 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20  */.  TriggerPrg 
1e9a0 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 2f 2a 20  *pNext;      /* 
1e9b0 4e 65 78 74 20 65 6e 74 72 79 20 69 6e 20 50 61  Next entry in Pa
1e9c0 72 73 65 2e 70 54 72 69 67 67 65 72 50 72 67 20  rse.pTriggerPrg 
1e9d0 6c 69 73 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f  list */.  SubPro
1e9e0 67 72 61 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20  gram *pProgram; 
1e9f0 20 20 2f 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70    /* Program imp
1ea00 6c 65 6d 65 6e 74 69 6e 67 20 70 54 72 69 67 67  lementing pTrigg
1ea10 65 72 2f 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69  er/orconf */.  i
1ea20 6e 74 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20  nt orconf;      
1ea30 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
1ea40 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f  t ON CONFLICT po
1ea50 6c 69 63 79 20 2a 2f 0a 20 20 75 33 32 20 61 43  licy */.  u32 aC
1ea60 6f 6c 6d 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20  olmask[2];      
1ea70 20 20 2f 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c    /* Masks of ol
1ea80 64 2e 2a 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d  d.*, new.* colum
1ea90 6e 73 20 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d  ns accessed */.}
1eaa0 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62  ;../*.** The yDb
1eab0 4d 61 73 6b 20 64 61 74 61 74 79 70 65 20 66 6f  Mask datatype fo
1eac0 72 20 74 68 65 20 62 69 74 6d 61 73 6b 20 6f 66  r the bitmask of
1ead0 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
1eae0 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20  tabases..*/.#if 
1eaf0 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43  SQLITE_MAX_ATTAC
1eb00 48 45 44 3e 33 30 0a 20 20 74 79 70 65 64 65 66  HED>30.  typedef
1eb10 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20 79   unsigned char y
1eb20 44 62 4d 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d  DbMask[(SQLITE_M
1eb30 41 58 5f 41 54 54 41 43 48 45 44 2b 39 29 2f 38  AX_ATTACHED+9)/8
1eb40 5d 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  ];.# define DbMa
1eb50 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1eb60 28 28 4d 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c  ((M)[(I)/8]&(1<<
1eb70 28 28 49 29 26 37 29 29 29 21 3d 30 29 0a 23 20  ((I)&7)))!=0).# 
1eb80 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1eb90 6f 28 4d 29 20 20 20 20 20 20 6d 65 6d 73 65 74  o(M)      memset
1eba0 28 28 4d 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29  ((M),0,sizeof(M)
1ebb0 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1ebc0 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d  kSet(M,I)     (M
1ebd0 29 5b 28 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28  )[(I)/8]|=(1<<((
1ebe0 49 29 26 37 29 29 0a 23 20 64 65 66 69 6e 65 20  I)&7)).# define 
1ebf0 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29  DbMaskAllZero(M)
1ec00 20 20 20 73 71 6c 69 74 65 33 44 62 4d 61 73 6b     sqlite3DbMask
1ec10 41 6c 6c 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66  AllZero(M).# def
1ec20 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72  ine DbMaskNonZer
1ec30 6f 28 4d 29 20 20 20 28 73 71 6c 69 74 65 33 44  o(M)   (sqlite3D
1ec40 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d  bMaskAllZero(M)=
1ec50 3d 30 29 0a 23 65 6c 73 65 0a 20 20 74 79 70 65  =0).#else.  type
1ec60 64 65 66 20 75 6e 73 69 67 6e 65 64 20 69 6e 74  def unsigned int
1ec70 20 79 44 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69   yDbMask;.# defi
1ec80 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c  ne DbMaskTest(M,
1ec90 49 29 20 20 20 20 28 28 28 4d 29 26 28 28 28 79  I)    (((M)&(((y
1eca0 44 62 4d 61 73 6b 29 31 29 3c 3c 28 49 29 29 29  DbMask)1)<<(I)))
1ecb0 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20 44 62  !=0).# define Db
1ecc0 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20  MaskZero(M)     
1ecd0 20 28 4d 29 3d 30 0a 23 20 64 65 66 69 6e 65 20   (M)=0.# define 
1ece0 44 62 4d 61 73 6b 53 65 74 28 4d 2c 49 29 20 20  DbMaskSet(M,I)  
1ecf0 20 20 20 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61     (M)|=(((yDbMa
1ed00 73 6b 29 31 29 3c 3c 28 49 29 29 0a 23 20 64 65  sk)1)<<(I)).# de
1ed10 66 69 6e 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65  fine DbMaskAllZe
1ed20 72 6f 28 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23  ro(M)   (M)==0.#
1ed30 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f   define DbMaskNo
1ed40 6e 5a 65 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d  nZero(M)   (M)!=
1ed50 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
1ed60 41 6e 20 53 51 4c 20 70 61 72 73 65 72 20 63 6f  An SQL parser co
1ed70 6e 74 65 78 74 2e 20 20 41 20 63 6f 70 79 20 6f  ntext.  A copy o
1ed80 66 20 74 68 69 73 20 73 74 72 75 63 74 75 72 65  f this structure
1ed90 20 69 73 20 70 61 73 73 65 64 20 74 68 72 6f 75   is passed throu
1eda0 67 68 0a 2a 2a 20 74 68 65 20 70 61 72 73 65 72  gh.** the parser
1edb0 20 61 6e 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61   and down into a
1edc0 6c 6c 20 74 68 65 20 70 61 72 73 65 72 20 61 63  ll the parser ac
1edd0 74 69 6f 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20  tion routine in 
1ede0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72  order to.** carr
1edf0 79 20 61 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61  y around informa
1ee00 74 69 6f 6e 20 74 68 61 74 20 69 73 20 67 6c 6f  tion that is glo
1ee10 62 61 6c 20 74 6f 20 74 68 65 20 65 6e 74 69 72  bal to the entir
1ee20 65 20 70 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54  e parse..**.** T
1ee30 68 65 20 73 74 72 75 63 74 75 72 65 20 69 73 20  he structure is 
1ee40 64 69 76 69 64 65 64 20 69 6e 74 6f 20 74 77 6f  divided into two
1ee50 20 70 61 72 74 73 2e 20 20 57 68 65 6e 20 74 68   parts.  When th
1ee60 65 20 70 61 72 73 65 72 20 61 6e 64 20 63 6f 64  e parser and cod
1ee70 65 0a 2a 2a 20 67 65 6e 65 72 61 74 65 20 63 61  e.** generate ca
1ee80 6c 6c 20 74 68 65 6d 73 65 6c 76 65 73 20 72 65  ll themselves re
1ee90 63 75 72 73 69 76 65 6c 79 2c 20 74 68 65 20 66  cursively, the f
1eea0 69 72 73 74 20 70 61 72 74 20 6f 66 20 74 68 65  irst part of the
1eeb0 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 69 73   structure.** is
1eec0 20 63 6f 6e 73 74 61 6e 74 20 62 75 74 20 74 68   constant but th
1eed0 65 20 73 65 63 6f 6e 64 20 70 61 72 74 20 69 73  e second part is
1eee0 20 72 65 73 65 74 20 61 74 20 74 68 65 20 62 65   reset at the be
1eef0 67 69 6e 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20  ginning and end 
1ef00 6f 66 0a 2a 2a 20 65 61 63 68 20 72 65 63 75 72  of.** each recur
1ef10 73 69 6f 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  sion..**.** The 
1ef20 6e 54 61 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61  nTableLock and a
1ef30 54 61 62 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62  TableLock variab
1ef40 6c 65 73 20 61 72 65 20 6f 6e 6c 79 20 75 73 65  les are only use
1ef50 64 20 69 66 20 74 68 65 20 73 68 61 72 65 64 2d  d if the shared-
1ef60 63 61 63 68 65 0a 2a 2a 20 66 65 61 74 75 72 65  cache.** feature
1ef70 20 69 73 20 65 6e 61 62 6c 65 64 20 28 69 66 20   is enabled (if 
1ef80 73 71 6c 69 74 65 33 54 73 64 28 29 2d 3e 75 73  sqlite3Tsd()->us
1ef90 65 53 68 61 72 65 64 44 61 74 61 20 69 73 20 74  eSharedData is t
1efa0 72 75 65 29 2e 20 54 68 65 79 20 61 72 65 0a 2a  rue). They are.*
1efb0 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  * used to store 
1efc0 74 68 65 20 73 65 74 20 6f 66 20 74 61 62 6c 65  the set of table
1efd0 2d 6c 6f 63 6b 73 20 72 65 71 75 69 72 65 64 20  -locks required 
1efe0 62 79 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  by the statement
1eff0 20 62 65 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c   being.** compil
1f000 65 64 2e 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c  ed. Function sql
1f010 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20  ite3TableLock() 
1f020 69 73 20 75 73 65 64 20 74 6f 20 61 64 64 20 65  is used to add e
1f030 6e 74 72 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a  ntries to the.**
1f040 20 6c 69 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74   list..*/.struct
1f050 20 50 61 72 73 65 20 7b 0a 20 20 73 71 6c 69 74   Parse {.  sqlit
1f060 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
1f070 2f 2a 20 54 68 65 20 6d 61 69 6e 20 64 61 74 61  /* The main data
1f080 62 61 73 65 20 73 74 72 75 63 74 75 72 65 20 2a  base structure *
1f090 2f 0a 20 20 63 68 61 72 20 2a 7a 45 72 72 4d 73  /.  char *zErrMs
1f0a0 67 3b 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65  g;       /* An e
1f0b0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
1f0c0 20 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20    Vdbe *pVdbe;  
1f0d0 20 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67         /* An eng
1f0e0 69 6e 65 20 66 6f 72 20 65 78 65 63 75 74 69 6e  ine for executin
1f0f0 67 20 64 61 74 61 62 61 73 65 20 62 79 74 65 63  g database bytec
1f100 6f 64 65 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b  ode */.  int rc;
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f120 20 52 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f   Return code fro
1f130 6d 20 65 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20  m execution */. 
1f140 20 75 38 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b   u8 colNamesSet;
1f150 20 20 20 20 20 20 2f 2a 20 54 52 55 45 20 61 66        /* TRUE af
1f160 74 65 72 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d  ter OP_ColumnNam
1f170 65 20 68 61 73 20 62 65 65 6e 20 69 73 73 75 65  e has been issue
1f180 64 20 74 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20  d to pVdbe */.  
1f190 75 38 20 63 68 65 63 6b 53 63 68 65 6d 61 3b 20  u8 checkSchema; 
1f1a0 20 20 20 20 20 2f 2a 20 43 61 75 73 65 73 20 73       /* Causes s
1f1b0 63 68 65 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65  chema cookie che
1f1c0 63 6b 20 61 66 74 65 72 20 61 6e 20 65 72 72 6f  ck after an erro
1f1d0 72 20 2a 2f 0a 20 20 75 38 20 6e 65 73 74 65 64  r */.  u8 nested
1f1e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
1f1f0 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
1f200 63 61 6c 6c 73 20 74 6f 20 74 68 65 20 70 61 72  calls to the par
1f210 73 65 72 2f 63 6f 64 65 20 67 65 6e 65 72 61 74  ser/code generat
1f220 6f 72 20 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70  or */.  u8 nTemp
1f230 52 65 67 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Reg;         /* 
1f240 4e 75 6d 62 65 72 20 6f 66 20 74 65 6d 70 6f 72  Number of tempor
1f250 61 72 79 20 72 65 67 69 73 74 65 72 73 20 69 6e  ary registers in
1f260 20 61 54 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20   aTempReg[] */. 
1f270 20 75 38 20 69 73 4d 75 6c 74 69 57 72 69 74 65   u8 isMultiWrite
1f280 3b 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66  ;     /* True if
1f290 20 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d   statement may m
1f2a0 6f 64 69 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c  odify/insert mul
1f2b0 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20  tiple rows */.  
1f2c0 75 38 20 6d 61 79 41 62 6f 72 74 3b 20 20 20 20  u8 mayAbort;    
1f2d0 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
1f2e0 73 74 61 74 65 6d 65 6e 74 20 6d 61 79 20 74 68  statement may th
1f2f0 72 6f 77 20 61 6e 20 41 42 4f 52 54 20 65 78 63  row an ABORT exc
1f300 65 70 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68  eption */.  u8 h
1f310 61 73 43 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20  asCompound;     
1f320 20 2f 2a 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f   /* Need to invo
1f330 6b 65 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75  ke convertCompou
1f340 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75 65  ndSelectToSubque
1f350 72 79 28 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43  ry() */.  u8 okC
1f360 6f 6e 73 74 46 61 63 74 6f 72 3b 20 20 20 20 2f  onstFactor;    /
1f370 2a 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f  * OK to factor o
1f380 75 74 20 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a  ut constants */.
1f390 20 20 75 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b    u8 disableLook
1f3a0 61 73 69 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72  aside; /* Number
1f3b0 20 6f 66 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73   of times lookas
1f3c0 69 64 65 20 68 61 73 20 62 65 65 6e 20 64 69 73  ide has been dis
1f3d0 61 62 6c 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43  abled */.  u8 nC
1f3e0 6f 6c 43 61 63 68 65 3b 20 20 20 20 20 20 20 20  olCache;        
1f3f0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74  /* Number of ent
1f400 72 69 65 73 20 69 6e 20 61 43 6f 6c 43 61 63 68  ries in aColCach
1f410 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61  e[] */.  int nRa
1f420 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a  ngeReg;       /*
1f430 20 53 69 7a 65 20 6f 66 20 74 68 65 20 74 65 6d   Size of the tem
1f440 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72 20  porary register 
1f450 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69  block */.  int i
1f460 52 61 6e 67 65 52 65 67 3b 20 20 20 20 20 20 20  RangeReg;       
1f470 2f 2a 20 46 69 72 73 74 20 72 65 67 69 73 74 65  /* First registe
1f480 72 20 69 6e 20 74 65 6d 70 6f 72 61 72 79 20 72  r in temporary r
1f490 65 67 69 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f  egister block */
1f4a0 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20  .  int nErr;    
1f4b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f4c0 72 20 6f 66 20 65 72 72 6f 72 73 20 73 65 65 6e  r of errors seen
1f4d0 20 2a 2f 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20   */.  int nTab; 
1f4e0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
1f4f0 6d 62 65 72 20 6f 66 20 70 72 65 76 69 6f 75 73  mber of previous
1f500 6c 79 20 61 6c 6c 6f 63 61 74 65 64 20 56 44 42  ly allocated VDB
1f510 45 20 63 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69  E cursors */.  i
1f520 6e 74 20 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20  nt nMem;        
1f530 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f540 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73   memory cells us
1f550 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69  ed so far */.  i
1f560 6e 74 20 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20  nt nOpAlloc;    
1f570 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f580 20 73 6c 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64   slots allocated
1f590 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20   for Vdbe.aOp[] 
1f5a0 2a 2f 0a 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c  */.  int szOpAll
1f5b0 6f 63 3b 20 20 20 20 20 20 20 2f 2a 20 42 79 74  oc;       /* Byt
1f5c0 65 73 20 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61  es of memory spa
1f5d0 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72  ce allocated for
1f5e0 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20   Vdbe.aOp[] */. 
1f5f0 20 69 6e 74 20 69 53 65 6c 66 54 61 62 3b 20 20   int iSelfTab;  
1f600 20 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 66        /* Table f
1f610 6f 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  or associated wi
1f620 74 68 20 61 6e 20 69 6e 64 65 78 20 6f 6e 20 65  th an index on e
1f630 78 70 72 2c 20 6f 72 20 6e 65 67 61 74 69 76 65  xpr, or negative
1f640 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f650 20 20 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68          ** of th
1f660 65 20 62 61 73 65 20 72 65 67 69 73 74 65 72 20  e base register 
1f670 64 75 72 69 6e 67 20 63 68 65 63 6b 2d 63 6f 6e  during check-con
1f680 73 74 72 61 69 6e 74 20 65 76 61 6c 20 2a 2f 0a  straint eval */.
1f690 20 20 69 6e 74 20 69 43 61 63 68 65 4c 65 76 65    int iCacheLeve
1f6a0 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 43 61 63  l;     /* ColCac
1f6b0 68 65 20 76 61 6c 69 64 20 77 68 65 6e 20 61 43  he valid when aC
1f6c0 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65 76 65 6c  olCache[].iLevel
1f6d0 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c 20 2a 2f  <=iCacheLevel */
1f6e0 0a 20 20 69 6e 74 20 69 43 61 63 68 65 43 6e 74  .  int iCacheCnt
1f6f0 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74  ;       /* Count
1f700 65 72 20 75 73 65 64 20 74 6f 20 67 65 6e 65 72  er used to gener
1f710 61 74 65 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  ate aColCache[].
1f720 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  lru values */.  
1f730 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20 20 20 20  int nLabel;     
1f740 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f750 66 20 6c 61 62 65 6c 73 20 75 73 65 64 20 2a 2f  f labels used */
1f760 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65 6c 3b 20  .  int *aLabel; 
1f770 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61 63 65          /* Space
1f780 20 74 6f 20 68 6f 6c 64 20 74 68 65 20 6c 61 62   to hold the lab
1f790 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  els */.  ExprLis
1f7a0 74 20 2a 70 43 6f 6e 73 74 45 78 70 72 3b 2f 2a  t *pConstExpr;/*
1f7b0 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73   Constant expres
1f7c0 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e  sions */.  Token
1f7d0 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61 6d 65 3b   constraintName;
1f7e0 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 63  /* Name of the c
1f7f0 6f 6e 73 74 72 61 69 6e 74 20 63 75 72 72 65 6e  onstraint curren
1f800 74 6c 79 20 62 65 69 6e 67 20 70 61 72 73 65 64  tly being parsed
1f810 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 77 72   */.  yDbMask wr
1f820 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a 20 53 74  iteMask;   /* St
1f830 61 72 74 20 61 20 77 72 69 74 65 20 74 72 61 6e  art a write tran
1f840 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68 65 73 65  saction on these
1f850 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a 20 20   databases */.  
1f860 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69 65 4d 61  yDbMask cookieMa
1f870 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61 73 6b 20  sk;  /* Bitmask 
1f880 6f 66 20 73 63 68 65 6d 61 20 76 65 72 69 66 69  of schema verifi
1f890 65 64 20 64 61 74 61 62 61 73 65 73 20 2a 2f 0a  ed databases */.
1f8a0 20 20 69 6e 74 20 72 65 67 52 6f 77 69 64 3b 20    int regRowid; 
1f8b0 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74         /* Regist
1f8c0 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f 77 69 64  er holding rowid
1f8d0 20 6f 66 20 43 52 45 41 54 45 20 54 41 42 4c 45   of CREATE TABLE
1f8e0 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69 6e 74 20   entry */.  int 
1f8f0 72 65 67 52 6f 6f 74 3b 20 20 20 20 20 20 20 20  regRoot;        
1f900 20 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c   /* Register hol
1f910 64 69 6e 67 20 72 6f 6f 74 20 70 61 67 65 20 6e  ding root page n
1f920 75 6d 62 65 72 20 66 6f 72 20 6e 65 77 20 6f 62  umber for new ob
1f930 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e  jects */.  int n
1f940 4d 61 78 41 72 67 3b 20 20 20 20 20 20 20 20 20  MaxArg;         
1f950 2f 2a 20 4d 61 78 20 61 72 67 73 20 70 61 73 73  /* Max args pass
1f960 65 64 20 74 6f 20 75 73 65 72 20 66 75 6e 63 74  ed to user funct
1f970 69 6f 6e 20 62 79 20 73 75 62 2d 70 72 6f 67 72  ion by sub-progr
1f980 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43 54  am */.#if SELECT
1f990 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20 20  TRACE_ENABLED.  
1f9a0 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20 20 20 20  int nSelect;    
1f9b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f9c0 66 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65  f SELECT stateme
1f9d0 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20 20 69 6e  nts seen */.  in
1f9e0 74 20 6e 53 65 6c 65 63 74 49 6e 64 65 6e 74 3b  t nSelectIndent;
1f9f0 20 20 20 2f 2a 20 48 6f 77 20 66 61 72 20 74 6f     /* How far to
1fa00 20 69 6e 64 65 6e 74 20 53 45 4c 45 43 54 54 52   indent SELECTTR
1fa10 41 43 45 28 29 20 6f 75 74 70 75 74 20 2a 2f 0a  ACE() output */.
1fa20 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
1fa30 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52 45  QLITE_OMIT_SHARE
1fa40 44 5f 43 41 43 48 45 0a 20 20 69 6e 74 20 6e 54  D_CACHE.  int nT
1fa50 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20 20 20 20  ableLock;       
1fa60 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f   /* Number of lo
1fa70 63 6b 73 20 69 6e 20 61 54 61 62 6c 65 4c 6f 63  cks in aTableLoc
1fa80 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c 6f 63 6b  k */.  TableLock
1fa90 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b 20 2f 2a   *aTableLock; /*
1faa0 20 52 65 71 75 69 72 65 64 20 74 61 62 6c 65 20   Required table 
1fab0 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61 72 65 64  locks for shared
1fac0 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a 2f 0a 23  -cache mode */.#
1fad0 65 6e 64 69 66 0a 20 20 41 75 74 6f 69 6e 63 49  endif.  AutoincI
1fae0 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20 2f 2a 20  nfo *pAinc;  /* 
1faf0 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75  Information abou
1fb00 74 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54 20  t AUTOINCREMENT 
1fb10 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20 20 50 61  counters */.  Pa
1fb20 72 73 65 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20  rse *pToplevel; 
1fb30 20 20 20 2f 2a 20 50 61 72 73 65 20 73 74 72 75     /* Parse stru
1fb40 63 74 75 72 65 20 66 6f 72 20 6d 61 69 6e 20 70  cture for main p
1fb50 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29  rogram (or NULL)
1fb60 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 72   */.  Table *pTr
1fb70 69 67 67 65 72 54 61 62 3b 20 20 2f 2a 20 54 61  iggerTab;  /* Ta
1fb80 62 6c 65 20 74 72 69 67 67 65 72 73 20 61 72 65  ble triggers are
1fb90 20 62 65 69 6e 67 20 63 6f 64 65 64 20 66 6f 72   being coded for
1fba0 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64 72 43 72   */.  int addrCr
1fbb0 54 61 62 3b 20 20 20 20 20 20 20 2f 2a 20 41 64  Tab;       /* Ad
1fbc0 64 72 65 73 73 20 6f 66 20 4f 50 5f 43 72 65 61  dress of OP_Crea
1fbd0 74 65 42 74 72 65 65 20 6f 70 63 6f 64 65 20 6f  teBtree opcode o
1fbe0 6e 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a  n CREATE TABLE *
1fbf0 2f 0a 20 20 75 33 32 20 6e 51 75 65 72 79 4c 6f  /.  u32 nQueryLo
1fc00 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45 73 74 20  op;      /* Est 
1fc10 6e 75 6d 62 65 72 20 6f 66 20 69 74 65 72 61 74  number of iterat
1fc20 69 6f 6e 73 20 6f 66 20 61 20 71 75 65 72 79 20  ions of a query 
1fc30 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a  (10*log2(N)) */.
1fc40 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20    u32 oldmask;  
1fc50 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f         /* Mask o
1fc60 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f old.* columns 
1fc70 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20  referenced */.  
1fc80 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20  u32 newmask;    
1fc90 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20       /* Mask of 
1fca0 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65  new.* columns re
1fcb0 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38  ferenced */.  u8
1fcc0 20 65 54 72 69 67 67 65 72 4f 70 3b 20 20 20 20   eTriggerOp;    
1fcd0 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c     /* TK_UPDATE,
1fce0 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b   TK_INSERT or TK
1fcf0 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20  _DELETE */.  u8 
1fd00 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20  eOrconf;        
1fd10 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20    /* Default ON 
1fd20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20  CONFLICT policy 
1fd30 66 6f 72 20 74 72 69 67 67 65 72 20 73 74 65 70  for trigger step
1fd40 73 20 2a 2f 0a 20 20 75 38 20 64 69 73 61 62 6c  s */.  u8 disabl
1fd50 65 54 72 69 67 67 65 72 73 3b 20 20 2f 2a 20 54  eTriggers;  /* T
1fd60 72 75 65 20 74 6f 20 64 69 73 61 62 6c 65 20 74  rue to disable t
1fd70 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a  riggers */..  /*
1fd80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fda0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fdb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fdc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a 20 46  *********.  ** F
1fdd0 69 65 6c 64 73 20 61 62 6f 76 65 20 6d 75 73 74  ields above must
1fde0 20 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   be initialized 
1fdf0 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65 20 66 69  to zero.  The fi
1fe00 65 6c 64 73 20 74 68 61 74 20 66 6f 6c 6c 6f 77  elds that follow
1fe10 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74 6f 20 74  ,.  ** down to t
1fe20 68 65 20 62 65 67 69 6e 6e 69 6e 67 20 6f 66 20  he beginning of 
1fe30 74 68 65 20 72 65 63 75 72 73 69 76 65 20 73 65  the recursive se
1fe40 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74 20 6e 65  ction, do not ne
1fe50 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a 20 69 6e  ed to be.  ** in
1fe60 69 74 69 61 6c 69 7a 65 64 20 61 73 20 74 68 65  itialized as the
1fe70 79 20 77 69 6c 6c 20 62 65 20 73 65 74 20 62 65  y will be set be
1fe80 66 6f 72 65 20 62 65 69 6e 67 20 75 73 65 64 2e  fore being used.
1fe90 20 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 69    The boundary i
1fea0 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d 69 6e 65  s.  ** determine
1feb0 64 20 62 79 20 6f 66 66 73 65 74 6f 66 28 50 61  d by offsetof(Pa
1fec0 72 73 65 2c 61 43 6f 6c 43 61 63 68 65 29 2e 0a  rse,aColCache)..
1fed0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
1fee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fef0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff00 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1ff10 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20  ************/.. 
1ff20 20 73 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68   struct yColCach
1ff30 65 20 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62  e {.    int iTab
1ff40 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  le;           /*
1ff50 20 54 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75   Table cursor nu
1ff60 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20  mber */.    i16 
1ff70 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20  iColumn;        
1ff80 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d    /* Table colum
1ff90 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20  n number */.    
1ffa0 75 38 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20  u8 tempReg;     
1ffb0 20 20 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73        /* iReg is
1ffc0 20 61 20 74 65 6d 70 20 72 65 67 69 73 74 65 72   a temp register
1ffd0 20 74 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62   that needs to b
1ffe0 65 20 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69  e freed */.    i
1fff0 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20  nt iLevel;      
20000 20 20 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20       /* Nesting 
20010 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74  level */.    int
20020 20 69 52 65 67 3b 20 20 20 20 20 20 20 20 20 20   iReg;          
20030 20 20 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76     /* Reg with v
20040 61 6c 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c  alue of this col
20050 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e  umn. 0 means non
20060 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72  e. */.    int lr
20070 75 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  u;              
20080 2f 2a 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c  /* Least recentl
20090 79 20 75 73 65 64 20 65 6e 74 72 79 20 68 61 73  y used entry has
200a0 20 74 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61   the smallest va
200b0 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43  lue */.  } aColC
200c0 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f  ache[SQLITE_N_CO
200d0 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65  LCACHE];  /* One
200e0 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
200f0 20 63 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a   cache entry */.
20100 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
20110 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 6c  ];        /* Hol
20120 64 69 6e 67 20 61 72 65 61 20 66 6f 72 20 74 65  ding area for te
20130 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74 65 72  mporary register
20140 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61  s */.  Token sNa
20150 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f  meToken;       /
20160 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e 71  * Token with unq
20170 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61 20  ualified schema 
20180 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a 0a  object name */..
20190 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    /*************
201a0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
201b0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
201c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
201d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a 2a  ***********.  **
201e0 20 41 62 6f 76 65 20 69 73 20 63 6f 6e 73 74 61   Above is consta
201f0 6e 74 20 62 65 74 77 65 65 6e 20 72 65 63 75 72  nt between recur
20200 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77 20 69 73  sions.  Below is
20210 20 72 65 73 65 74 20 62 65 66 6f 72 65 20 61 6e   reset before an
20220 64 20 61 66 74 65 72 0a 20 20 2a 2a 20 65 61 63  d after.  ** eac
20230 68 20 72 65 63 75 72 73 69 6f 6e 2e 20 20 54 68  h recursion.  Th
20240 65 20 62 6f 75 6e 64 61 72 79 20 62 65 74 77 65  e boundary betwe
20250 65 6e 20 74 68 65 73 65 20 74 77 6f 20 72 65 67  en these two reg
20260 69 6f 6e 73 20 69 73 20 64 65 74 65 72 6d 69 6e  ions is determin
20270 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67 20 6f 66  ed.  ** using of
20280 66 73 65 74 6f 66 28 50 61 72 73 65 2c 73 4c 61  fsetof(Parse,sLa
20290 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74 68 65 20  stToken) so the 
202a0 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69 65 6c 64  sLastToken field
202b0 20 6d 75 73 74 20 62 65 20 74 68 65 0a 20 20 2a   must be the.  *
202c0 2a 20 66 69 72 73 74 20 66 69 65 6c 64 20 69 6e  * first field in
202d0 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20 72   the recursive r
202e0 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a  egion..  *******
202f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
20330 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73 4c 61 73  */..  Token sLas
20340 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 2f 2a  tToken;       /*
20350 20 54 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20   The last token 
20360 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 6e 56 61  parsed */.  ynVa
20370 72 20 6e 56 61 72 3b 20 20 20 20 20 20 20 20 20  r nVar;         
20380 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
20390 6f 66 20 27 3f 27 20 76 61 72 69 61 62 6c 65 73  of '?' variables
203a0 20 73 65 65 6e 20 69 6e 20 74 68 65 20 53 51 4c   seen in the SQL
203b0 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 38 20   so far */.  u8 
203c0 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20  iPkSortOrder;   
203d0 20 20 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72         /* ASC or
203e0 20 44 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45   DESC for INTEGE
203f0 52 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f  R PRIMARY KEY */
20400 0a 20 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20  .  u8 explain;  
20410 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20420 54 72 75 65 20 69 66 20 74 68 65 20 45 58 50 4c  True if the EXPL
20430 41 49 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e  AIN flag is foun
20440 64 20 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a  d on the query *
20450 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
20460 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
20470 4c 45 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56  LE.  u8 declareV
20480 74 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  tab;           /
20490 2a 20 54 72 75 65 20 69 66 20 69 6e 73 69 64 65  * True if inside
204a0 20 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65   sqlite3_declare
204b0 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74  _vtab() */.  int
204c0 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20   nVtabLock;     
204d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
204e0 20 6f 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c   of virtual tabl
204f0 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65  es to lock */.#e
20500 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48 65 69 67  ndif.  int nHeig
20510 68 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ht;             
20520 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 74   /* Expression t
20530 72 65 65 20 68 65 69 67 68 74 20 6f 66 20 63 75  ree height of cu
20540 72 72 65 6e 74 20 73 75 62 2d 73 65 6c 65 63 74  rrent sub-select
20550 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
20560 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
20570 20 20 69 6e 74 20 69 53 65 6c 65 63 74 49 64 3b    int iSelectId;
20580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
20590 44 20 6f 66 20 63 75 72 72 65 6e 74 20 73 65 6c  D of current sel
205a0 65 63 74 20 66 6f 72 20 45 58 50 4c 41 49 4e 20  ect for EXPLAIN 
205b0 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69 6e 74 20  output */.  int 
205c0 69 4e 65 78 74 53 65 6c 65 63 74 49 64 3b 20 20  iNextSelectId;  
205d0 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 61 76        /* Next av
205e0 61 69 6c 61 62 6c 65 20 73 65 6c 65 63 74 20 49  ailable select I
205f0 44 20 66 6f 72 20 45 58 50 4c 41 49 4e 20 6f 75  D for EXPLAIN ou
20600 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 20  tput */.#endif. 
20610 20 56 4c 69 73 74 20 2a 70 56 4c 69 73 74 3b 20   VList *pVList; 
20620 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
20630 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 76 61  pping between va
20640 72 69 61 62 6c 65 20 6e 61 6d 65 73 20 61 6e 64  riable names and
20650 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20 20 56 64   numbers */.  Vd
20660 62 65 20 2a 70 52 65 70 72 65 70 61 72 65 3b 20  be *pReprepare; 
20670 20 20 20 20 20 20 20 20 2f 2a 20 56 4d 20 62 65          /* VM be
20680 69 6e 67 20 72 65 70 72 65 70 61 72 65 64 20 28  ing reprepared (
20690 73 71 6c 69 74 65 33 52 65 70 72 65 70 61 72 65  sqlite3Reprepare
206a0 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63  ()) */.  const c
206b0 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20 20 20 20  har *zTail;     
206c0 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c 20 74 65     /* All SQL te
206d0 78 74 20 70 61 73 74 20 74 68 65 20 6c 61 73 74  xt past the last
206e0 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61 72 73 65   semicolon parse
206f0 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 4e  d */.  Table *pN
20700 65 77 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20  ewTable;        
20710 20 2f 2a 20 41 20 74 61 62 6c 65 20 62 65 69 6e   /* A table bein
20720 67 20 63 6f 6e 73 74 72 75 63 74 65 64 20 62 79  g constructed by
20730 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f   CREATE TABLE */
20740 0a 20 20 54 72 69 67 67 65 72 20 2a 70 4e 65 77  .  Trigger *pNew
20750 54 72 69 67 67 65 72 3b 20 20 20 20 20 2f 2a 20  Trigger;     /* 
20760 54 72 69 67 67 65 72 20 75 6e 64 65 72 20 63 6f  Trigger under co
20770 6e 73 74 72 75 63 74 20 62 79 20 61 20 43 52 45  nstruct by a CRE
20780 41 54 45 20 54 52 49 47 47 45 52 20 2a 2f 0a 20  ATE TRIGGER */. 
20790 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75   const char *zAu
207a0 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a 20 54 68  thContext; /* Th
207b0 65 20 36 74 68 20 70 61 72 61 6d 65 74 65 72 20  e 6th parameter 
207c0 74 6f 20 64 62 2d 3e 78 41 75 74 68 20 63 61 6c  to db->xAuth cal
207d0 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66 6e 64 65  lbacks */.#ifnde
207e0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  f SQLITE_OMIT_VI
207f0 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b  RTUALTABLE.  Tok
20800 65 6e 20 73 41 72 67 3b 20 20 20 20 20 20 20 20  en sArg;        
20810 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65         /* Comple
20820 74 65 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64  te text of a mod
20830 75 6c 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a  ule argument */.
20840 20 20 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62    Table **apVtab
20850 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50  Lock;       /* P
20860 6f 69 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61  ointer to virtua
20870 6c 20 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67  l tables needing
20880 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64   locking */.#end
20890 69 66 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d  if.  Table *pZom
208a0 62 69 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f  bieTab;        /
208b0 2a 20 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20  * List of Table 
208c0 6f 62 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74  objects to delet
208d0 65 20 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e  e after code gen
208e0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67   */.  TriggerPrg
208f0 20 2a 70 54 72 69 67 67 65 72 50 72 67 3b 20 20   *pTriggerPrg;  
20900 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f  /* Linked list o
20910 66 20 63 6f 64 65 64 20 74 72 69 67 67 65 72 73  f coded triggers
20920 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74   */.  With *pWit
20930 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
20940 2f 2a 20 43 75 72 72 65 6e 74 20 57 49 54 48 20  /* Current WITH 
20950 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20  clause, or NULL 
20960 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68  */.  With *pWith
20970 54 6f 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f  ToFree;        /
20980 2a 20 46 72 65 65 20 74 68 69 73 20 57 49 54 48  * Free this WITH
20990 20 6f 62 6a 65 63 74 20 61 74 20 74 68 65 20 65   object at the e
209a0 6e 64 20 6f 66 20 74 68 65 20 70 61 72 73 65 20  nd of the parse 
209b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 69 7a  */.};../*.** Siz
209c0 65 73 20 61 6e 64 20 70 6f 69 6e 74 65 72 73 20  es and pointers 
209d0 6f 66 20 76 61 72 69 6f 75 73 20 70 61 72 74 73  of various parts
209e0 20 6f 66 20 74 68 65 20 50 61 72 73 65 20 6f 62   of the Parse ob
209f0 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ject..*/.#define
20a00 20 50 41 52 53 45 5f 48 44 52 5f 53 5a 20 6f 66   PARSE_HDR_SZ of
20a10 66 73 65 74 6f 66 28 50 61 72 73 65 2c 61 43 6f  fsetof(Parse,aCo
20a20 6c 43 61 63 68 65 29 20 2f 2a 20 52 65 63 75 72  lCache) /* Recur
20a30 73 69 76 65 20 70 61 72 74 20 77 2f 6f 20 61 43  sive part w/o aC
20a40 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65 66 69 6e  olCache*/.#defin
20a50 65 20 50 41 52 53 45 5f 52 45 43 55 52 53 45 5f  e PARSE_RECURSE_
20a60 53 5a 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73  SZ offsetof(Pars
20a70 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29 20 20 20  e,sLastToken)   
20a80 20 2f 2a 20 52 65 63 75 72 73 69 76 65 20 70 61   /* Recursive pa
20a90 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
20aa0 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28 73 69 7a  RSE_TAIL_SZ (siz
20ab0 65 6f 66 28 50 61 72 73 65 29 2d 50 41 52 53 45  eof(Parse)-PARSE
20ac0 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 2f 2a 20  _RECURSE_SZ) /* 
20ad0 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65 20 70 61  Non-recursive pa
20ae0 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 50 41  rt */.#define PA
20af0 52 53 45 5f 54 41 49 4c 28 58 29 20 28 28 28 63  RSE_TAIL(X) (((c
20b00 68 61 72 2a 29 28 58 29 29 2b 50 41 52 53 45 5f  har*)(X))+PARSE_
20b10 52 45 43 55 52 53 45 5f 53 5a 29 20 20 2f 2a 20  RECURSE_SZ)  /* 
20b20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61 69 6c 20  Pointer to tail 
20b30 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  */../*.** Return
20b40 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e 74   true if current
20b50 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71 6c  ly inside an sql
20b60 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74 61  ite3_declare_vta
20b70 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69 66  b() call..*/.#if
20b80 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
20b90 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 23  VIRTUALTABLE.  #
20ba0 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41 52  define IN_DECLAR
20bb0 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a 20  E_VTAB 0.#else. 
20bc0 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c   #define IN_DECL
20bd0 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73 65  ARE_VTAB (pParse
20be0 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a 23  ->declareVtab).#
20bf0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
20c00 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
20c10 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
20c20 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c 61  ure can be decla
20c30 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20 61  red on a stack a
20c40 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  nd used.** to sa
20c50 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41 75  ve the Parse.zAu
20c60 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65 20  thContext value 
20c70 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 62  so that it can b
20c80 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65 72  e restored later
20c90 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74 68  ..*/.struct Auth
20ca0 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e 73  Context {.  cons
20cb0 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e  t char *zAuthCon
20cc0 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20 73  text;   /* Put s
20cd0 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74 68  aved Parse.zAuth
20ce0 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f 0a  Context here */.
20cf0 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
20d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20d10 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75 63   The Parse struc
20d20 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ture */.};../*.*
20d30 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67 73  * Bitfield flags
20d40 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69 6e   for P5 value in
20d50 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65 73   various opcodes
20d60 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f  ..**.** Value co
20d70 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72  nstraints (enfor
20d80 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ced via assert()
20d90 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  ):.**    OPFLAG_
20da0 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d 20  LENGTHARG    == 
20db0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
20dc0 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  TH.**    OPFLAG_
20dd0 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d 20  TYPEOFARG    == 
20de0 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45  SQLITE_FUNC_TYPE
20df0 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f  OF.**    OPFLAG_
20e00 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d 20  BULKCSR      == 
20e10 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a 2a  BTREE_BULKLOAD.*
20e20 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45 4b  *    OPFLAG_SEEK
20e30 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52 45  EQ       == BTRE
20e40 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20 20  E_SEEK_EQ.**    
20e50 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45  OPFLAG_FORDELETE
20e60 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f 52      == BTREE_FOR
20e70 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50 46  DELETE.**    OPF
20e80 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f 4e  LAG_SAVEPOSITION
20e90 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50 4f   == BTREE_SAVEPO
20ea0 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50 46  SITION.**    OPF
20eb0 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20  LAG_AUXDELETE   
20ec0 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45 4c   == BTREE_AUXDEL
20ed0 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ETE.*/.#define O
20ee0 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20 20  PFLAG_NCHANGE   
20ef0 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f      0x01    /* O
20f00 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74 6f  P_Insert: Set to
20f10 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68 61   update db->nCha
20f20 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  nge */.         
20f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20f40 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
20f50 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20 28  lso used in P2 (
20f60 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44 65  not P5) of OP_De
20f70 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  lete */.#define 
20f80 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20 20  OPFLAG_EPHEM    
20f90 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
20fa0 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65 6d  OP_Column: Ephem
20fb0 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20 6f  eral output is o
20fc0 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  k */.#define OPF
20fd0 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20 20  LAG_LASTROWID   
20fe0 20 20 30 78 32 30 20 20 20 20 2f 2a 20 53 65 74    0x20    /* Set
20ff0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6c   to update db->l
21000 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65 66  astRowid */.#def
21010 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50 44  ine OPFLAG_ISUPD
21020 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20 20  ATE      0x04   
21030 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73 65   /* This OP_Inse
21040 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50 44  rt is an sql UPD
21050 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
21060 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20 20  PFLAG_APPEND    
21070 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 54      0x08    /* T
21080 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74 6f  his is likely to
21090 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a 2f   be an append */
210a0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
210b0 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30 78  USESEEKRESULT 0x
210c0 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f 20  10    /* Try to 
210d0 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e 20  avoid a seek in 
210e0 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a 2f  BtreeInsert() */
210f0 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f  .#define OPFLAG_
21100 49 53 4e 4f 4f 50 20 20 20 20 20 20 20 20 30 78  ISNOOP        0x
21110 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65  40    /* OP_Dele
21120 74 65 20 64 6f 65 73 20 70 72 65 2d 75 70 64 61  te does pre-upda
21130 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20 2a 2f 0a  te-hook only */.
21140 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 4c  #define OPFLAG_L
21150 45 4e 47 54 48 41 52 47 20 20 20 20 20 30 78 34  ENGTHARG     0x4
21160 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d  0    /* OP_Colum
21170 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20  n only used for 
21180 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23 64 65 66  length() */.#def
21190 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f  ine OPFLAG_TYPEO
211a0 46 41 52 47 20 20 20 20 20 30 78 38 30 20 20 20  FARG     0x80   
211b0 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
211c0 6c 79 20 75 73 65 64 20 66 6f 72 20 74 79 70 65  ly used for type
211d0 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  of() */.#define 
211e0 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53 52 20 20  OPFLAG_BULKCSR  
211f0 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
21200 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65 64 20 74  OP_Open** used t
21210 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63 75 72 73  o open bulk curs
21220 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  or */.#define OP
21230 46 4c 41 47 5f 53 45 45 4b 45 51 20 20 20 20 20  FLAG_SEEKEQ     
21240 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 4f 50     0x02    /* OP
21250 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f 72 20 75  _Open** cursor u
21260 73 65 73 20 45 51 20 73 65 65 6b 20 6f 6e 6c 79  ses EQ seek only
21270 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
21280 41 47 5f 46 4f 52 44 45 4c 45 54 45 20 20 20 20  AG_FORDELETE    
21290 20 30 78 30 38 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x08    /* OP_O
212a0 70 65 6e 20 73 68 6f 75 6c 64 20 75 73 65 20 42  pen should use B
212b0 54 52 45 45 5f 46 4f 52 44 45 4c 45 54 45 20 2a  TREE_FORDELETE *
212c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
212d0 5f 50 32 49 53 52 45 47 20 20 20 20 20 20 20 30  _P2ISREG       0
212e0 78 31 30 20 20 20 20 2f 2a 20 50 32 20 74 6f 20  x10    /* P2 to 
212f0 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20 61 20 72  OP_Open** is a r
21300 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 2a  egister number *
21310 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
21320 5f 50 45 52 4d 55 54 45 20 20 20 20 20 20 20 30  _PERMUTE       0
21330 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d  x01    /* OP_Com
21340 70 61 72 65 3a 20 75 73 65 20 74 68 65 20 70 65  pare: use the pe
21350 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  rmutation */.#de
21360 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53 41 56 45  fine OPFLAG_SAVE
21370 50 4f 53 49 54 49 4f 4e 20 20 30 78 30 32 20 20  POSITION  0x02  
21380 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 2f 49    /* OP_Delete/I
21390 6e 73 65 72 74 3a 20 73 61 76 65 20 63 75 72 73  nsert: save curs
213a0 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65 66 69 6e  or pos */.#defin
213b0 65 20 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45  e OPFLAG_AUXDELE
213c0 54 45 20 20 20 20 20 30 78 30 34 20 20 20 20 2f  TE     0x04    /
213d0 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20 69 6e 64  * OP_Delete: ind
213e0 65 78 20 69 6e 20 61 20 44 45 4c 45 54 45 20 6f  ex in a DELETE o
213f0 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45 61 63 68  p */../*. * Each
21400 20 74 72 69 67 67 65 72 20 70 72 65 73 65 6e 74   trigger present
21410 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
21420 20 73 63 68 65 6d 61 20 69 73 20 73 74 6f 72 65   schema is store
21430 64 20 61 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  d as an instance
21440 20 6f 66 0a 20 2a 20 73 74 72 75 63 74 20 54 72   of. * struct Tr
21450 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20 50 6f 69  igger.. *. * Poi
21460 6e 74 65 72 73 20 74 6f 20 69 6e 73 74 61 6e 63  nters to instanc
21470 65 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  es of struct Tri
21480 67 67 65 72 20 61 72 65 20 73 74 6f 72 65 64 20  gger are stored 
21490 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a 20 2a 20  in two ways.. * 
214a0 31 2e 20 49 6e 20 74 68 65 20 22 74 72 69 67 48  1. In the "trigH
214b0 61 73 68 22 20 68 61 73 68 20 74 61 62 6c 65 20  ash" hash table 
214c0 28 70 61 72 74 20 6f 66 20 74 68 65 20 73 71 6c  (part of the sql
214d0 69 74 65 33 2a 20 74 68 61 74 20 72 65 70 72 65  ite3* that repre
214e0 73 65 6e 74 73 20 74 68 65 0a 20 2a 20 20 20 20  sents the. *    
214f0 64 61 74 61 62 61 73 65 29 2e 20 54 68 69 73 20  database). This 
21500 61 6c 6c 6f 77 73 20 54 72 69 67 67 65 72 20 73  allows Trigger s
21510 74 72 75 63 74 75 72 65 73 20 74 6f 20 62 65 20  tructures to be 
21520 72 65 74 72 69 65 76 65 64 20 62 79 20 6e 61 6d  retrieved by nam
21530 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20 74 72 69  e.. * 2. All tri
21540 67 67 65 72 73 20 61 73 73 6f 63 69 61 74 65 64  ggers associated
21550 20 77 69 74 68 20 61 20 73 69 6e 67 6c 65 20 74   with a single t
21560 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c 69 6e 6b  able form a link
21570 65 64 20 6c 69 73 74 2c 20 75 73 69 6e 67 20 74  ed list, using t
21580 68 65 0a 20 2a 20 20 20 20 70 4e 65 78 74 20 6d  he. *    pNext m
21590 65 6d 62 65 72 20 6f 66 20 73 74 72 75 63 74 20  ember of struct 
215a0 54 72 69 67 67 65 72 2e 20 41 20 70 6f 69 6e 74  Trigger. A point
215b0 65 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20  er to the first 
215c0 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68 65 0a 20  element of the. 
215d0 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c 69 73 74  *    linked list
215e0 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 74 68   is stored as th
215f0 65 20 22 70 54 72 69 67 67 65 72 22 20 6d 65 6d  e "pTrigger" mem
21600 62 65 72 20 6f 66 20 74 68 65 20 61 73 73 6f 63  ber of the assoc
21610 69 61 74 65 64 0a 20 2a 20 20 20 20 73 74 72 75  iated. *    stru
21620 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a 20 2a 20  ct Table.. *. * 
21630 54 68 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20  The "step_list" 
21640 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73 20 74 6f  member points to
21650 20 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   the first eleme
21660 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65 64 20 6c  nt of a linked l
21670 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69 6e 69 6e  ist. * containin
21680 67 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d  g the SQL statem
21690 65 6e 74 73 20 73 70 65 63 69 66 69 65 64 20 61  ents specified a
216a0 73 20 74 68 65 20 74 72 69 67 67 65 72 20 70 72  s the trigger pr
216b0 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74 72 75 63  ogram.. */.struc
216c0 74 20 54 72 69 67 67 65 72 20 7b 0a 20 20 63 68  t Trigger {.  ch
216d0 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20  ar *zName;      
216e0 20 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 61 6d        /* The nam
216f0 65 20 6f 66 20 74 68 65 20 74 72 69 67 67 65 72  e of the trigger
21700 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21710 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 63 68 61          */.  cha
21720 72 20 2a 74 61 62 6c 65 3b 20 20 20 20 20 20 20  r *table;       
21730 20 20 20 20 20 2f 2a 20 54 68 65 20 74 61 62 6c       /* The tabl
21740 65 20 6f 72 20 76 69 65 77 20 74 6f 20 77 68 69  e or view to whi
21750 63 68 20 74 68 65 20 74 72 69 67 67 65 72 20 61  ch the trigger a
21760 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75 38 20 6f  pplies */.  u8 o
21770 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
21780 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
21790 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
217a0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 20 20  TE, TK_INSERT   
217b0 20 20 20 20 20 20 2a 2f 0a 20 20 75 38 20 74 72        */.  u8 tr
217c0 5f 74 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20  _tm;            
217d0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 52 49     /* One of TRI
217e0 47 47 45 52 5f 42 45 46 4f 52 45 2c 20 54 52 49  GGER_BEFORE, TRI
217f0 47 47 45 52 5f 41 46 54 45 52 20 2a 2f 0a 20 20  GGER_AFTER */.  
21800 45 78 70 72 20 2a 70 57 68 65 6e 3b 20 20 20 20  Expr *pWhen;    
21810 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57          /* The W
21820 48 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 68  HEN clause of th
21830 65 20 65 78 70 72 65 73 73 69 6f 6e 20 28 6d 61  e expression (ma
21840 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f 0a 20 20  y be NULL) */.  
21850 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75 6d 6e 73  IdList *pColumns
21860 3b 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  ;       /* If th
21870 69 73 20 69 73 20 61 6e 20 55 50 44 41 54 45 20  is is an UPDATE 
21880 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73 74 3e  OF <column-list>
21890 20 74 72 69 67 67 65 72 2c 0a 20 20 20 20 20 20   trigger,.      
218a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
218b0 20 20 20 20 20 20 20 74 68 65 20 3c 63 6f 6c 75         the <colu
218c0 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73 74 6f 72  mn-list> is stor
218d0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  ed here */.  Sch
218e0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
218f0 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63       /* Schema c
21900 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74 72  ontaining the tr
21910 69 67 67 65 72 20 2a 2f 0a 20 20 53 63 68 65 6d  igger */.  Schem
21920 61 20 2a 70 54 61 62 53 63 68 65 6d 61 3b 20 20  a *pTabSchema;  
21930 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e     /* Schema con
21940 74 61 69 6e 69 6e 67 20 74 68 65 20 74 61 62 6c  taining the tabl
21950 65 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  e */.  TriggerSt
21960 65 70 20 2a 73 74 65 70 5f 6c 69 73 74 3b 20 2f  ep *step_list; /
21970 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f 66 20 74  * Link list of t
21980 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 20 73  rigger program s
21990 74 65 70 73 20 20 20 20 20 20 20 20 20 20 20 20  teps            
219a0 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
219b0 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  Next;         /*
219c0 20 4e 65 78 74 20 74 72 69 67 67 65 72 20 61 73   Next trigger as
219d0 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
219e0 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b 0a 0a 2f  e table */.};../
219f0 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65 72 20 69  *.** A trigger i
21a00 73 20 65 69 74 68 65 72 20 61 20 42 45 46 4f 52  s either a BEFOR
21a10 45 20 6f 72 20 61 6e 20 41 46 54 45 52 20 74 72  E or an AFTER tr
21a20 69 67 67 65 72 2e 20 20 54 68 65 20 66 6f 6c 6c  igger.  The foll
21a30 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e 74 73 0a  owing constants.
21a40 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20 77 68 69  ** determine whi
21a50 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ch..**.** If the
21a60 72 65 20 61 72 65 20 6d 75 6c 74 69 70 6c 65 20  re are multiple 
21a70 74 72 69 67 67 65 72 73 2c 20 79 6f 75 20 6d 69  triggers, you mi
21a80 67 68 74 20 6f 66 20 73 6f 6d 65 20 42 45 46 4f  ght of some BEFO
21a90 52 45 20 61 6e 64 20 73 6f 6d 65 20 41 46 54 45  RE and some AFTE
21aa0 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74 20 63 61  R..** In that ca
21ab0 73 65 73 2c 20 74 68 65 20 63 6f 6e 73 74 61 6e  ses, the constan
21ac0 74 73 20 62 65 6c 6f 77 20 63 61 6e 20 62 65 20  ts below can be 
21ad0 4f 52 65 64 20 74 6f 67 65 74 68 65 72 2e 0a 2a  ORed together..*
21ae0 2f 0a 23 64 65 66 69 6e 65 20 54 52 49 47 47 45  /.#define TRIGGE
21af0 52 5f 42 45 46 4f 52 45 20 20 31 0a 23 64 65 66  R_BEFORE  1.#def
21b00 69 6e 65 20 54 52 49 47 47 45 52 5f 41 46 54 45  ine TRIGGER_AFTE
21b10 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20 41 6e 20  R   2../*. * An 
21b20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73 74 72 75  instance of stru
21b30 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 69  ct TriggerStep i
21b40 73 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  s used to store 
21b50 61 20 73 69 6e 67 6c 65 20 53 51 4c 20 73 74 61  a single SQL sta
21b60 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61 74 20 69  tement. * that i
21b70 73 20 61 20 70 61 72 74 20 6f 66 20 61 20 74 72  s a part of a tr
21b80 69 67 67 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20  igger-program.. 
21b90 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65 73 20 6f  *. * Instances o
21ba0 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72  f struct Trigger
21bb0 53 74 65 70 20 61 72 65 20 73 74 6f 72 65 64 20  Step are stored 
21bc0 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c 69 6e 6b  in a singly link
21bd0 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b 65 64 0a  ed list (linked.
21be0 20 2a 20 75 73 69 6e 67 20 74 68 65 20 22 70 4e   * using the "pN
21bf0 65 78 74 22 20 6d 65 6d 62 65 72 29 20 72 65 66  ext" member) ref
21c00 65 72 65 6e 63 65 64 20 62 79 20 74 68 65 20 22  erenced by the "
21c10 73 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65  step_list" membe
21c20 72 20 6f 66 20 74 68 65 0a 20 2a 20 61 73 73 6f  r of the. * asso
21c30 63 69 61 74 65 64 20 73 74 72 75 63 74 20 54 72  ciated struct Tr
21c40 69 67 67 65 72 20 69 6e 73 74 61 6e 63 65 2e 20  igger instance. 
21c50 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  The first elemen
21c60 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b 65 64 20  t of the linked 
21c70 6c 69 73 74 20 69 73 0a 20 2a 20 74 68 65 20 66  list is. * the f
21c80 69 72 73 74 20 73 74 65 70 20 6f 66 20 74 68 65  irst step of the
21c90 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
21ca0 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 6f 70 22  .. *. * The "op"
21cb0 20 6d 65 6d 62 65 72 20 69 6e 64 69 63 61 74 65   member indicate
21cc0 73 20 77 68 65 74 68 65 72 20 74 68 69 73 20 69  s whether this i
21cd0 73 20 61 20 22 44 45 4c 45 54 45 22 2c 20 22 49  s a "DELETE", "I
21ce0 4e 53 45 52 54 22 2c 20 22 55 50 44 41 54 45 22  NSERT", "UPDATE"
21cf0 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43 54 22 20   or. * "SELECT" 
21d00 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 65 20 6d  statement. The m
21d10 65 61 6e 69 6e 67 73 20 6f 66 20 74 68 65 20 6f  eanings of the o
21d20 74 68 65 72 20 6d 65 6d 62 65 72 73 20 69 73 20  ther members is 
21d30 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 74 68  determined by th
21d40 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66 20 22 6f  e. * value of "o
21d50 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73 3a 0a 20  p" as follows:. 
21d60 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 49  *. * (op == TK_I
21d70 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63 6f 6e 66  NSERT). * orconf
21d80 20 20 20 20 2d 3e 20 73 74 6f 72 65 73 20 74 68      -> stores th
21d90 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 61 6c  e ON CONFLICT al
21da0 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53 65 6c 65  gorithm. * pSele
21db0 63 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20  ct   -> If this 
21dc0 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54  is an INSERT INT
21dd0 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20 2e 2e 2e  O ... SELECT ...
21de0 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
21df0 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
21e00 20 74 68 69 73 20 73 74 6f 72 65 73 20 61 20 70   this stores a p
21e10 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 53 45  ointer to the SE
21e20 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e 20  LECT statement. 
21e30 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
21e40 20 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20   * zTarget   -> 
21e50 44 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66  Dequoted name of
21e60 20 74 68 65 20 74 61 62 6c 65 20 74 6f 20 69 6e   the table to in
21e70 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a 20 70 45  sert into.. * pE
21e80 78 70 72 4c 69 73 74 20 2d 3e 20 49 66 20 74 68  xprList -> If th
21e90 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
21ea0 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55 45 53 20  INTO ... VALUES 
21eb0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
21ec0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
21ed0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
21ee0 76 61 6c 75 65 73 20 74 6f 20 62 65 20 69 6e 73  values to be ins
21ef0 65 72 74 65 64 2e 20 4f 74 68 65 72 77 69 73 65  erted. Otherwise
21f00 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64 4c 69 73   NULL.. * pIdLis
21f10 74 20 20 20 2d 3e 20 49 66 20 74 68 69 73 20 69  t   -> If this i
21f20 73 20 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f  s an INSERT INTO
21f30 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e 2d 6e 61   ... (<column-na
21f40 6d 65 73 3e 29 20 56 41 4c 55 45 53 20 2e 2e 2e  mes>) VALUES ...
21f50 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
21f60 20 73 74 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e   statement, then
21f70 20 74 68 69 73 20 73 74 6f 72 65 73 20 74 68 65   this stores the
21f80 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 20 74 6f   column-names to
21f90 20 62 65 0a 20 2a 20 20 20 20 20 20 20 20 20 20   be. *          
21fa0 20 20 20 20 69 6e 73 65 72 74 65 64 20 69 6e 74      inserted int
21fb0 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20  o.. *. * (op == 
21fc0 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a 20 7a 54  TK_DELETE). * zT
21fd0 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f  arget   -> Dequo
21fe0 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  ted name of the 
21ff0 74 61 62 6c 65 20 74 6f 20 64 65 6c 65 74 65 20  table to delete 
22000 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65 72 65 20  from.. * pWhere 
22010 20 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20     -> The WHERE 
22020 63 6c 61 75 73 65 20 6f 66 20 74 68 65 20 44 45  clause of the DE
22030 4c 45 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69  LETE statement i
22040 66 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69  f one is specifi
22050 65 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  ed.. *          
22060 20 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55      Otherwise NU
22070 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d  LL.. *. * (op ==
22080 20 54 4b 5f 55 50 44 41 54 45 29 0a 20 2a 20 7a   TK_UPDATE). * z
22090 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75  Target   -> Dequ
220a0 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65  oted name of the
220b0 20 74 61 62 6c 65 20 74 6f 20 75 70 64 61 74 65   table to update
220c0 2e 0a 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d  .. * pWhere    -
220d0 3e 20 54 68 65 20 57 48 45 52 45 20 63 6c 61 75  > The WHERE clau
220e0 73 65 20 6f 66 20 74 68 65 20 55 50 44 41 54 45  se of the UPDATE
220f0 20 73 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e   statement if on
22100 65 20 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a  e is specified..
22110 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   *              
22120 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a  Otherwise NULL..
22130 20 2a 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20   * pExprList -> 
22140 41 20 6c 69 73 74 20 6f 66 20 74 68 65 20 63 6f  A list of the co
22150 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61 74 65 20  lumns to update 
22160 61 6e 64 20 74 68 65 20 65 78 70 72 65 73 73 69  and the expressi
22170 6f 6e 73 20 74 6f 20 75 70 64 61 74 65 0a 20 2a  ons to update. *
22180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
22190 65 6d 20 74 6f 2e 20 53 65 65 20 73 71 6c 69 74  em to. See sqlit
221a0 65 33 55 70 64 61 74 65 28 29 20 64 6f 63 75 6d  e3Update() docum
221b0 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22 70 43 68  entation of "pCh
221c0 61 6e 67 65 73 22 0a 20 2a 20 20 20 20 20 20 20  anges". *       
221d0 20 20 20 20 20 20 20 61 72 67 75 6d 65 6e 74 2e         argument.
221e0 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54  . *. */.struct T
221f0 72 69 67 67 65 72 53 74 65 70 20 7b 0a 20 20 75  riggerStep {.  u
22200 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
22210 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 54 4b      /* One of TK
22220 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55 50 44 41  _DELETE, TK_UPDA
22230 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 2c 20 54  TE, TK_INSERT, T
22240 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20 20 75 38  K_SELECT */.  u8
22250 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20   orconf;        
22260 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c 62 61 63     /* OE_Rollbac
22270 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54 72 69 67  k etc. */.  Trig
22280 67 65 72 20 2a 70 54 72 69 67 3b 20 20 20 20 20  ger *pTrig;     
22290 20 2f 2a 20 54 68 65 20 74 72 69 67 67 65 72 20   /* The trigger 
222a0 74 68 61 74 20 74 68 69 73 20 73 74 65 70 20 69  that this step i
222b0 73 20 61 20 70 61 72 74 20 6f 66 20 2a 2f 0a 20  s a part of */. 
222c0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
222d0 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45 43 54 20  ;     /* SELECT 
222e0 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 52 48 53  statement or RHS
222f0 20 6f 66 20 49 4e 53 45 52 54 20 49 4e 54 4f 20   of INSERT INTO 
22300 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f 0a 20 20  SELECT ... */.  
22310 63 68 61 72 20 2a 7a 54 61 72 67 65 74 3b 20 20  char *zTarget;  
22320 20 20 20 20 20 2f 2a 20 54 61 72 67 65 74 20 74       /* Target t
22330 61 62 6c 65 20 66 6f 72 20 44 45 4c 45 54 45 2c  able for DELETE,
22340 20 55 50 44 41 54 45 2c 20 49 4e 53 45 52 54 20   UPDATE, INSERT 
22350 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72  */.  Expr *pWher
22360 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  e;        /* The
22370 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 66 6f   WHERE clause fo
22380 72 20 44 45 4c 45 54 45 20 6f 72 20 55 50 44 41  r DELETE or UPDA
22390 54 45 20 73 74 65 70 73 20 2a 2f 0a 20 20 45 78  TE steps */.  Ex
223a0 70 72 4c 69 73 74 20 2a 70 45 78 70 72 4c 69 73  prList *pExprLis
223b0 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61 75 73 65  t; /* SET clause
223c0 20 66 6f 72 20 55 50 44 41 54 45 2e 20 2a 2f 0a   for UPDATE. */.
223d0 20 20 49 64 4c 69 73 74 20 2a 70 49 64 4c 69 73    IdList *pIdLis
223e0 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e  t;     /* Column
223f0 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e 53 45 52   names for INSER
22400 54 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 53 74  T */.  TriggerSt
22410 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e  ep *pNext;  /* N
22420 65 78 74 20 69 6e 20 74 68 65 20 6c 69 6e 6b 2d  ext in the link-
22430 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69 67 67 65  list */.  Trigge
22440 72 53 74 65 70 20 2a 70 4c 61 73 74 3b 20 20 2f  rStep *pLast;  /
22450 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e 74 20 69  * Last element i
22460 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20 56 61 6c  n link-list. Val
22470 69 64 20 66 6f 72 20 31 73 74 20 65 6c 65 6d 20  id for 1st elem 
22480 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  only */.};../*.*
22490 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
224a0 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
224b0 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 75  ns information u
224c0 73 65 64 20 62 79 20 74 68 65 20 73 71 6c 69 74  sed by the sqlit
224d0 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f 75 74 69  eFix....** routi
224e0 6e 65 73 20 61 73 20 74 68 65 79 20 77 61 6c 6b  nes as they walk
224f0 20 74 68 65 20 70 61 72 73 65 20 74 72 65 65 20   the parse tree 
22500 74 6f 20 6d 61 6b 65 20 64 61 74 61 62 61 73 65  to make database
22510 20 72 65 66 65 72 65 6e 63 65 73 0a 2a 2a 20 65   references.** e
22520 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74 79 70 65  xplicit..*/.type
22530 64 65 66 20 73 74 72 75 63 74 20 44 62 46 69 78  def struct DbFix
22540 65 72 20 44 62 46 69 78 65 72 3b 0a 73 74 72 75  er DbFixer;.stru
22550 63 74 20 44 62 46 69 78 65 72 20 7b 0a 20 20 50  ct DbFixer {.  P
22560 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
22570 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 69 6e     /* The parsin
22580 67 20 63 6f 6e 74 65 78 74 2e 20 20 45 72 72 6f  g context.  Erro
22590 72 20 6d 65 73 73 61 67 65 73 20 77 72 69 74 74  r messages writt
225a0 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20 53 63 68  en here */.  Sch
225b0 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20  ema *pSchema;   
225c0 20 2f 2a 20 46 69 78 20 69 74 65 6d 73 20 74 6f   /* Fix items to
225d0 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
225e0 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c 79 3b 20    int bVarOnly; 
225f0 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
22600 6f 72 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  or variable refe
22610 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20  rences only */. 
22620 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62   const char *zDb
22630 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72  ;    /* Make sur
22640 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73 20 61 72  e all objects ar
22650 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74  e contained in t
22660 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f 0a  his database */.
22670 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 54    const char *zT
22680 79 70 65 3b 20 20 2f 2a 20 54 79 70 65 20 6f 66  ype;  /* Type of
22690 20 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d   the container -
226a0 20 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20   used for error 
226b0 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20 20 63 6f  messages */.  co
226c0 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e 61 6d 65  nst Token *pName
226d0 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  ; /* Name of the
226e0 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65   container - use
226f0 64 20 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73  d for error mess
22700 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ages */.};../*.*
22710 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64 20 75 73  * An objected us
22720 65 64 20 74 6f 20 61 63 63 75 6d 75 6c 61 74 65  ed to accumulate
22730 20 74 68 65 20 74 65 78 74 20 6f 66 20 61 20 73   the text of a s
22740 74 72 69 6e 67 20 77 68 65 72 65 20 77 65 0a 2a  tring where we.*
22750 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65 73 73 61  * do not necessa
22760 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77 20 62 69  rily know how bi
22770 67 20 74 68 65 20 73 74 72 69 6e 67 20 77 69 6c  g the string wil
22780 6c 20 62 65 20 69 6e 20 74 68 65 20 65 6e 64 2e  l be in the end.
22790 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74 72 41 63  .*/.struct StrAc
227a0 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  cum {.  sqlite3 
227b0 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
227c0 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61 62 61 73  Optional databas
227d0 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 2e  e for lookaside.
227e0 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c 20 2a 2f    Can be NULL */
227f0 0a 20 20 63 68 61 72 20 2a 7a 54 65 78 74 3b 20  .  char *zText; 
22800 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73          /* The s
22810 74 72 69 6e 67 20 63 6f 6c 6c 65 63 74 65 64 20  tring collected 
22820 73 6f 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20  so far */.  u32 
22830 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20   nAlloc;        
22840 20 2f 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70   /* Amount of sp
22850 61 63 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ace allocated in
22860 20 7a 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20   zText */.  u32 
22870 20 6d 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20   mxAlloc;       
22880 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f   /* Maximum allo
22890 77 65 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20  wed allocation. 
228a0 20 30 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63   0 for no malloc
228b0 20 75 73 61 67 65 20 2a 2f 0a 20 20 75 33 32 20   usage */.  u32 
228c0 20 6e 43 68 61 72 3b 20 20 20 20 20 20 20 20 20   nChar;         
228d0 20 2f 2a 20 4c 65 6e 67 74 68 20 6f 66 20 74 68   /* Length of th
228e0 65 20 73 74 72 69 6e 67 20 73 6f 20 66 61 72 20  e string so far 
228f0 2a 2f 0a 20 20 75 38 20 20 20 61 63 63 45 72 72  */.  u8   accErr
22900 6f 72 3b 20 20 20 20 20 20 20 2f 2a 20 53 54 52  or;       /* STR
22910 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53  ACCUM_NOMEM or S
22920 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 2a  TRACCUM_TOOBIG *
22930 2f 0a 20 20 75 38 20 20 20 70 72 69 6e 74 66 46  /.  u8   printfF
22940 6c 61 67 73 3b 20 20 20 20 2f 2a 20 53 51 4c 49  lags;    /* SQLI
22950 54 45 5f 50 52 49 4e 54 46 20 66 6c 61 67 73 20  TE_PRINTF flags 
22960 62 65 6c 6f 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66  below */.};.#def
22970 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d  ine STRACCUM_NOM
22980 45 4d 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  EM   1.#define S
22990 54 52 41 43 43 55 4d 5f 54 4f 4f 42 49 47 20 20  TRACCUM_TOOBIG  
229a0 32 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  2.#define SQLITE
229b0 5f 50 52 49 4e 54 46 5f 49 4e 54 45 52 4e 41 4c  _PRINTF_INTERNAL
229c0 20 30 78 30 31 20 20 2f 2a 20 49 6e 74 65 72 6e   0x01  /* Intern
229d0 61 6c 2d 75 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76  al-use-only conv
229e0 65 72 74 65 72 73 20 61 6c 6c 6f 77 65 64 20 2a  erters allowed *
229f0 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
22a00 5f 50 52 49 4e 54 46 5f 53 51 4c 46 55 4e 43 20  _PRINTF_SQLFUNC 
22a10 20 30 78 30 32 20 20 2f 2a 20 53 51 4c 20 66 75   0x02  /* SQL fu
22a20 6e 63 74 69 6f 6e 20 61 72 67 75 6d 65 6e 74 73  nction arguments
22a30 20 74 6f 20 56 58 50 72 69 6e 74 66 20 2a 2f 0a   to VXPrintf */.
22a40 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50  #define SQLITE_P
22a50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 20 30  RINTF_MALLOCED 0
22a60 78 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66 20  x04  /* True if 
22a70 78 54 65 78 74 20 69 73 20 61 6c 6c 6f 63 61 74  xText is allocat
22a80 65 64 20 73 70 61 63 65 20 2a 2f 0a 0a 23 64 65  ed space */..#de
22a90 66 69 6e 65 20 69 73 4d 61 6c 6c 6f 63 65 64 28  fine isMalloced(
22aa0 58 29 20 20 28 28 28 58 29 2d 3e 70 72 69 6e 74  X)  (((X)->print
22ab0 66 46 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  fFlags & SQLITE_
22ac0 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f 43 45 44 29  PRINTF_MALLOCED)
22ad0 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70  !=0).../*.** A p
22ae0 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20 73  ointer to this s
22af0 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65 64  tructure is used
22b00 20 74 6f 20 63 6f 6d 6d 75 6e 69 63 61 74 65 20   to communicate 
22b10 69 6e 66 6f 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66  information.** f
22b20 72 6f 6d 20 73 71 6c 69 74 65 33 49 6e 69 74 20  rom sqlite3Init 
22b30 61 6e 64 20 4f 50 5f 50 61 72 73 65 53 63 68 65  and OP_ParseSche
22b40 6d 61 20 69 6e 74 6f 20 74 68 65 20 73 71 6c 69  ma into the sqli
22b50 74 65 33 49 6e 69 74 43 61 6c 6c 62 61 63 6b 2e  te3InitCallback.
22b60 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
22b70 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a  ct {.  sqlite3 *
22b80 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20 54 68  db;        /* Th
22b90 65 20 64 61 74 61 62 61 73 65 20 62 65 69 6e 67  e database being
22ba0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
22bb0 20 20 63 68 61 72 20 2a 2a 70 7a 45 72 72 4d 73    char **pzErrMs
22bc0 67 3b 20 20 20 20 2f 2a 20 45 72 72 6f 72 20 6d  g;    /* Error m
22bd0 65 73 73 61 67 65 20 73 74 6f 72 65 64 20 68 65  essage stored he
22be0 72 65 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b  re */.  int iDb;
22bf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 30              /* 0
22c00 20 66 6f 72 20 6d 61 69 6e 20 64 61 74 61 62 61   for main databa
22c10 73 65 2e 20 20 31 20 66 6f 72 20 54 45 4d 50 2c  se.  1 for TEMP,
22c20 20 32 2e 2e 20 66 6f 72 20 41 54 54 41 43 48 65   2.. for ATTACHe
22c30 64 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  d */.  int rc;  
22c40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
22c50 73 75 6c 74 20 63 6f 64 65 20 73 74 6f 72 65 64  sult code stored
22c60 20 68 65 72 65 20 2a 2f 0a 7d 20 49 6e 69 74 44   here */.} InitD
22c70 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75  ata;../*.** Stru
22c80 63 74 75 72 65 20 63 6f 6e 74 61 69 6e 69 6e 67  cture containing
22c90 20 67 6c 6f 62 61 6c 20 63 6f 6e 66 69 67 75 72   global configur
22ca0 61 74 69 6f 6e 20 64 61 74 61 20 66 6f 72 20 74  ation data for t
22cb0 68 65 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  he SQLite librar
22cc0 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 69 73 20 73 74  y..**.** This st
22cd0 72 75 63 74 75 72 65 20 61 6c 73 6f 20 63 6f 6e  ructure also con
22ce0 74 61 69 6e 73 20 73 6f 6d 65 20 73 74 61 74 65  tains some state
22cf0 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f   information..*/
22d00 0a 73 74 72 75 63 74 20 53 71 6c 69 74 65 33 43  .struct Sqlite3C
22d10 6f 6e 66 69 67 20 7b 0a 20 20 69 6e 74 20 62 4d  onfig {.  int bM
22d20 65 6d 73 74 61 74 3b 20 20 20 20 20 20 20 20 20  emstat;         
22d30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
22d40 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  rue to enable me
22d50 6d 6f 72 79 20 73 74 61 74 75 73 20 2a 2f 0a 20  mory status */. 
22d60 20 69 6e 74 20 62 43 6f 72 65 4d 75 74 65 78 3b   int bCoreMutex;
22d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d80 20 20 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e     /* True to en
22d90 61 62 6c 65 20 63 6f 72 65 20 6d 75 74 65 78 69  able core mutexi
22da0 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62 46 75 6c  ng */.  int bFul
22db0 6c 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20  lMutex;         
22dc0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
22dd0 65 20 74 6f 20 65 6e 61 62 6c 65 20 66 75 6c 6c  e to enable full
22de0 20 6d 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69   mutexing */.  i
22df0 6e 74 20 62 4f 70 65 6e 55 72 69 3b 20 20 20 20  nt bOpenUri;    
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 2f 2a 20 54 72 75 65 20 74 6f 20 69 6e 74 65   /* True to inte
22e20 72 70 72 65 74 20 66 69 6c 65 6e 61 6d 65 73 20  rpret filenames 
22e30 61 73 20 55 52 49 73 20 2a 2f 0a 20 20 69 6e 74  as URIs */.  int
22e40 20 62 55 73 65 43 69 73 3b 20 20 20 20 20 20 20   bUseCis;       
22e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22e60 2a 20 55 73 65 20 63 6f 76 65 72 69 6e 67 20 69  * Use covering i
22e70 6e 64 69 63 65 73 20 66 6f 72 20 66 75 6c 6c 2d  ndices for full-
22e80 73 63 61 6e 73 20 2a 2f 0a 20 20 69 6e 74 20 62  scans */.  int b
22e90 53 6d 61 6c 6c 4d 61 6c 6c 6f 63 3b 20 20 20 20  SmallMalloc;    
22ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
22eb0 41 76 6f 69 64 20 6c 61 72 67 65 20 6d 65 6d 6f  Avoid large memo
22ec0 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 69  ry allocations i
22ed0 66 20 74 72 75 65 20 2a 2f 0a 20 20 69 6e 74 20  f true */.  int 
22ee0 6d 78 53 74 72 6c 65 6e 3b 20 20 20 20 20 20 20  mxStrlen;       
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22f00 20 4d 61 78 69 6d 75 6d 20 73 74 72 69 6e 67 20   Maximum string 
22f10 6c 65 6e 67 74 68 20 2a 2f 0a 20 20 69 6e 74 20  length */.  int 
22f20 6e 65 76 65 72 43 6f 72 72 75 70 74 3b 20 20 20  neverCorrupt;   
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22f40 20 44 61 74 61 62 61 73 65 20 69 73 20 61 6c 77   Database is alw
22f50 61 79 73 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20  ays well-formed 
22f60 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c 6f 6f 6b 61  */.  int szLooka
22f70 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 20  side;           
22f80 20 20 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c         /* Defaul
22f90 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62 75 66 66  t lookaside buff
22fa0 65 72 20 73 69 7a 65 20 2a 2f 0a 20 20 69 6e 74  er size */.  int
22fb0 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20   nLookaside;    
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22fd0 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f 6b 61 73  * Default lookas
22fe0 69 64 65 20 62 75 66 66 65 72 20 63 6f 75 6e 74  ide buffer count
22ff0 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 6d 74 53   */.  int nStmtS
23000 70 69 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20  pill;           
23010 20 20 20 20 20 20 20 20 2f 2a 20 53 74 6d 74 2d          /* Stmt-
23020 6a 6f 75 72 6e 61 6c 20 73 70 69 6c 6c 2d 74 6f  journal spill-to
23030 2d 64 69 73 6b 20 74 68 72 65 73 68 6f 6c 64 20  -disk threshold 
23040 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d  */.  sqlite3_mem
23050 5f 6d 65 74 68 6f 64 73 20 6d 3b 20 20 20 20 20  _methods m;     
23060 20 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65         /* Low-le
23070 76 65 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  vel memory alloc
23080 61 74 69 6f 6e 20 69 6e 74 65 72 66 61 63 65 20  ation interface 
23090 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  */.  sqlite3_mut
230a0 65 78 5f 6d 65 74 68 6f 64 73 20 6d 75 74 65 78  ex_methods mutex
230b0 3b 20 20 20 20 20 20 2f 2a 20 4c 6f 77 2d 6c 65  ;      /* Low-le
230c0 76 65 6c 20 6d 75 74 65 78 20 69 6e 74 65 72 66  vel mutex interf
230d0 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
230e0 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32  _pcache_methods2
230f0 20 70 63 61 63 68 65 32 3b 20 20 2f 2a 20 4c 6f   pcache2;  /* Lo
23100 77 2d 6c 65 76 65 6c 20 70 61 67 65 2d 63 61 63  w-level page-cac
23110 68 65 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a  he interface */.
23120 20 20 76 6f 69 64 20 2a 70 48 65 61 70 3b 20 20    void *pHeap;  
23130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23140 20 20 20 20 2f 2a 20 48 65 61 70 20 73 74 6f 72      /* Heap stor
23150 61 67 65 20 73 70 61 63 65 20 2a 2f 0a 20 20 69  age space */.  i
23160 6e 74 20 6e 48 65 61 70 3b 20 20 20 20 20 20 20  nt nHeap;       
23170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23180 20 2f 2a 20 53 69 7a 65 20 6f 66 20 70 48 65 61   /* Size of pHea
23190 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  p[] */.  int mnR
231a0 65 71 2c 20 6d 78 52 65 71 3b 20 20 20 20 20 20  eq, mxReq;      
231b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 69             /* Mi
231c0 6e 20 61 6e 64 20 6d 61 78 20 68 65 61 70 20 72  n and max heap r
231d0 65 71 75 65 73 74 73 20 73 69 7a 65 73 20 2a 2f  equests sizes */
231e0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
231f0 20 73 7a 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   szMmap;        
23200 20 20 20 20 20 2f 2a 20 6d 6d 61 70 28 29 20 73       /* mmap() s
23210 70 61 63 65 20 70 65 72 20 6f 70 65 6e 20 66 69  pace per open fi
23220 6c 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f  le */.  sqlite3_
23230 69 6e 74 36 34 20 6d 78 4d 6d 61 70 3b 20 20 20  int64 mxMmap;   
23240 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78            /* Max
23250 69 6d 75 6d 20 76 61 6c 75 65 20 66 6f 72 20 73  imum value for s
23260 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76 6f 69 64 20  zMmap */.  void 
23270 2a 70 50 61 67 65 3b 20 20 20 20 20 20 20 20 20  *pPage;         
23280 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23290 50 61 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72  Page cache memor
232a0 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67  y */.  int szPag
232b0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
232c0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
232d0 20 6f 66 20 65 61 63 68 20 70 61 67 65 20 69 6e   of each page in
232e0 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e   pPage[] */.  in
232f0 74 20 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20  t nPage;        
23300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23310 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67  /* Number of pag
23320 65 73 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f  es in pPage[] */
23330 0a 20 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53  .  int mxParserS
23340 74 61 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20  tack;           
23350 20 20 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20       /* maximum 
23360 64 65 70 74 68 20 6f 66 20 74 68 65 20 70 61 72  depth of the par
23370 73 65 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69  ser stack */.  i
23380 6e 74 20 73 68 61 72 65 64 43 61 63 68 65 45 6e  nt sharedCacheEn
23390 61 62 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20  abled;          
233a0 20 2f 2a 20 74 72 75 65 20 69 66 20 73 68 61 72   /* true if shar
233b0 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e  ed-cache mode en
233c0 61 62 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73  abled */.  u32 s
233d0 7a 50 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20  zPma;           
233e0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
233f0 4d 61 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50  Maximum Sorter P
23400 4d 41 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20  MA size */.  /* 
23410 54 68 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20  The above might 
23420 62 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74  be initialized t
23430 6f 20 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65  o non-zero.  The
23440 20 66 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20   following need 
23450 74 6f 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69  to always.  ** i
23460 6e 69 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f  nitially be zero
23470 2c 20 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20  , however. */.  
23480 69 6e 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20  int isInit;     
23490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234a0 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
234b0 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68  initialization h
234c0 61 73 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20  as finished */. 
234d0 20 69 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b   int inProgress;
234e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
234f0 20 20 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65     /* True while
23500 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
23510 69 6e 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20  in progress */. 
23520 20 69 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74   int isMutexInit
23530 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23540 20 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72     /* True after
23550 20 6d 75 74 65 78 65 73 20 61 72 65 20 69 6e 69   mutexes are ini
23560 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e  tialized */.  in
23570 74 20 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20  t isMallocInit; 
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23590 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d 61  /* True after ma
235a0 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69  lloc is initiali
235b0 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50  zed */.  int isP
235c0 43 61 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20  CacheInit;      
235d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
235e0 75 65 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20  ue after malloc 
235f0 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a  is initialized *
23600 2f 0a 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74  /.  int nRefInit
23610 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20  Mutex;          
23620 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
23630 6f 66 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69  of users of pIni
23640 74 4d 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69  tMutex */.  sqli
23650 74 65 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74  te3_mutex *pInit
23660 4d 75 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a  Mutex;        /*
23670 20 4d 75 74 65 78 20 75 73 65 64 20 62 79 20 73   Mutex used by s
23680 71 6c 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a  qlite3_initializ
23690 65 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  e() */.  void (*
236a0 78 4c 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  xLog)(void*,int,
236b0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a  const char*); /*
236c0 20 46 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f   Function for lo
236d0 67 67 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20  gging */.  void 
236e0 2a 70 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20  *pLogArg;       
236f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23700 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e  /* First argumen
23710 74 20 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23  t to xLog() */.#
23720 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
23730 42 4c 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69  BLE_SQLLOG.  voi
23740 64 28 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64  d(*xSqllog)(void
23750 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
23760 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20   char*, int);.  
23770 76 6f 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67  void *pSqllogArg
23780 3b 0a 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20  ;.#endif.#ifdef 
23790 53 51 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45  SQLITE_VDBE_COVE
237a0 52 41 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f  RAGE.  /* The fo
237b0 6c 6c 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b  llowing callback
237c0 20 28 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69   (if not NULL) i
237d0 73 20 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65  s invoked on eve
237e0 72 79 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20  ry VDBE branch. 
237f0 20 2a 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20   ** operation.  
23800 53 65 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  Set the callback
23810 20 75 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45   using SQLITE_TE
23820 53 54 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45  STCTRL_VDBE_COVE
23830 52 41 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69  RAGE..  */.  voi
23840 64 20 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29  d (*xVdbeBranch)
23850 28 76 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c  (void*,int iSrcL
23860 69 6e 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20  ine,u8 eThis,u8 
23870 65 4d 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  eMx);  /* Callba
23880 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56  ck */.  void *pV
23890 64 62 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20  dbeBranchArg;   
238a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
238c0 20 20 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e    /* 1st argumen
238d0 74 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e  t */.#endif.#ifn
238e0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
238f0 54 41 42 4c 45 0a 20 20 69 6e 74 20 28 2a 78 54  TABLE.  int (*xT
23900 65 73 74 43 61 6c 6c 62 61 63 6b 29 28 69 6e 74  estCallback)(int
23910 29 3b 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 76  );        /* Inv
23920 6f 6b 65 64 20 62 79 20 73 71 6c 69 74 65 33 46  oked by sqlite3F
23930 61 75 6c 74 53 69 6d 28 29 20 2a 2f 0a 23 65 6e  aultSim() */.#en
23940 64 69 66 0a 20 20 69 6e 74 20 62 4c 6f 63 61 6c  dif.  int bLocal
23950 74 69 6d 65 46 61 75 6c 74 3b 20 20 20 20 20 20  timeFault;      
23960 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
23970 74 6f 20 66 61 69 6c 20 6c 6f 63 61 6c 74 69 6d  to fail localtim
23980 65 28 29 20 63 61 6c 6c 73 20 2a 2f 0a 20 20 69  e() calls */.  i
23990 6e 74 20 69 4f 6e 63 65 52 65 73 65 74 54 68 72  nt iOnceResetThr
239a0 65 73 68 6f 6c 64 3b 20 20 20 20 20 20 20 20 20  eshold;         
239b0 20 2f 2a 20 57 68 65 6e 20 74 6f 20 72 65 73 65   /* When to rese
239c0 74 20 4f 50 5f 4f 6e 63 65 20 63 6f 75 6e 74 65  t OP_Once counte
239d0 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
239e0 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
239f0 65 64 20 69 6e 73 69 64 65 20 6f 66 20 61 73 73  ed inside of ass
23a00 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
23a10 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61   to indicate tha
23a20 74 0a 2a 2a 20 74 68 65 20 61 73 73 65 72 74 20  t.** the assert 
23a30 69 73 20 6f 6e 6c 79 20 76 61 6c 69 64 20 6f 6e  is only valid on
23a40 20 61 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64   a well-formed d
23a50 61 74 61 62 61 73 65 2e 20 20 49 6e 73 74 65 61  atabase.  Instea
23a60 64 20 6f 66 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  d of:.**.**     
23a70 61 73 73 65 72 74 28 20 58 20 29 3b 0a 2a 2a 0a  assert( X );.**.
23a80 2a 2a 20 4f 6e 65 20 77 72 69 74 65 73 3a 0a 2a  ** One writes:.*
23a90 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28  *.**     assert(
23aa0 20 58 20 7c 7c 20 43 4f 52 52 55 50 54 5f 44 42   X || CORRUPT_DB
23ab0 20 29 3b 0a 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50   );.**.** CORRUP
23ac0 54 5f 44 42 20 69 73 20 74 72 75 65 20 64 75 72  T_DB is true dur
23ad0 69 6e 67 20 6e 6f 72 6d 61 6c 20 6f 70 65 72 61  ing normal opera
23ae0 74 69 6f 6e 2e 20 20 43 4f 52 52 55 50 54 5f 44  tion.  CORRUPT_D
23af0 42 20 64 6f 65 73 20 6e 6f 74 20 69 6e 64 69 63  B does not indic
23b00 61 74 65 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  ate.** that the 
23b10 64 61 74 61 62 61 73 65 20 69 73 20 64 65 66 69  database is defi
23b20 6e 69 74 65 6c 79 20 63 6f 72 72 75 70 74 2c 20  nitely corrupt, 
23b30 6f 6e 6c 79 20 74 68 61 74 20 69 74 20 6d 69 67  only that it mig
23b40 68 74 20 62 65 20 63 6f 72 72 75 70 74 2e 0a 2a  ht be corrupt..*
23b50 2a 20 46 6f 72 20 6d 6f 73 74 20 74 65 73 74 20  * For most test 
23b60 63 61 73 65 73 2c 20 43 4f 52 52 55 50 54 5f 44  cases, CORRUPT_D
23b70 42 20 69 73 20 73 65 74 20 74 6f 20 66 61 6c 73  B is set to fals
23b80 65 20 75 73 69 6e 67 20 61 20 73 70 65 63 69 61  e using a specia
23b90 6c 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  l.** sqlite3_tes
23ba0 74 5f 63 6f 6e 74 72 6f 6c 28 29 2e 20 20 54 68  t_control().  Th
23bb0 69 73 20 65 6e 61 62 6c 65 73 20 61 73 73 65 72  is enables asser
23bc0 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74  t() statements t
23bd0 6f 20 70 72 6f 76 65 0a 2a 2a 20 74 68 69 6e 67  o prove.** thing
23be0 73 20 74 68 61 74 20 61 72 65 20 61 6c 77 61 79  s that are alway
23bf0 73 20 74 72 75 65 20 66 6f 72 20 77 65 6c 6c 2d  s true for well-
23c00 66 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 73  formed databases
23c10 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 52  ..*/.#define COR
23c20 52 55 50 54 5f 44 42 20 20 28 73 71 6c 69 74 65  RUPT_DB  (sqlite
23c30 33 43 6f 6e 66 69 67 2e 6e 65 76 65 72 43 6f 72  3Config.neverCor
23c40 72 75 70 74 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20  rupt==0)../*.** 
23c50 43 6f 6e 74 65 78 74 20 70 6f 69 6e 74 65 72 20  Context pointer 
23c60 70 61 73 73 65 64 20 64 6f 77 6e 20 74 68 72 6f  passed down thro
23c70 75 67 68 20 74 68 65 20 74 72 65 65 2d 77 61 6c  ugh the tree-wal
23c80 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 61 6c  k..*/.struct Wal
23c90 6b 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a 70  ker {.  Parse *p
23ca0 50 61 72 73 65 3b 20 20 20 20 20 20 20 20 20 20  Parse;          
23cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cc0 20 20 2f 2a 20 50 61 72 73 65 72 20 63 6f 6e 74    /* Parser cont
23cd0 65 78 74 2e 20 20 2a 2f 0a 20 20 69 6e 74 20 28  ext.  */.  int (
23ce0 2a 78 45 78 70 72 43 61 6c 6c 62 61 63 6b 29 28  *xExprCallback)(
23cf0 57 61 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b  Walker*, Expr*);
23d00 20 20 20 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b       /* Callback
23d10 20 66 6f 72 20 65 78 70 72 65 73 73 69 6f 6e 73   for expressions
23d20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 53 65 6c   */.  int (*xSel
23d30 65 63 74 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c  ectCallback)(Wal
23d40 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 20 20  ker*,Select*);  
23d50 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72 20  /* Callback for 
23d60 53 45 4c 45 43 54 73 20 2a 2f 0a 20 20 76 6f 69  SELECTs */.  voi
23d70 64 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62  d (*xSelectCallb
23d80 61 63 6b 32 29 28 57 61 6c 6b 65 72 2a 2c 53 65  ack2)(Walker*,Se
23d90 6c 65 63 74 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64  lect*);/* Second
23da0 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45   callback for SE
23db0 4c 45 43 54 73 20 2a 2f 0a 20 20 69 6e 74 20 77  LECTs */.  int w
23dc0 61 6c 6b 65 72 44 65 70 74 68 3b 20 20 20 20 20  alkerDepth;     
23dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23de0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
23df0 66 20 73 75 62 71 75 65 72 69 65 73 20 2a 2f 0a  f subqueries */.
23e00 20 20 75 38 20 65 43 6f 64 65 3b 20 20 20 20 20    u8 eCode;     
23e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
23e30 20 73 6d 61 6c 6c 20 70 72 6f 63 65 73 73 69 6e   small processin
23e40 67 20 63 6f 64 65 20 2a 2f 0a 20 20 75 6e 69 6f  g code */.  unio
23e50 6e 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  n {             
23e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23e70 20 20 20 20 20 20 2f 2a 20 45 78 74 72 61 20 64        /* Extra d
23e80 61 74 61 20 66 6f 72 20 63 61 6c 6c 62 61 63 6b  ata for callback
23e90 20 2a 2f 0a 20 20 20 20 4e 61 6d 65 43 6f 6e 74   */.    NameCont
23ea0 65 78 74 20 2a 70 4e 43 3b 20 20 20 20 20 20 20  ext *pNC;       
23eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ec0 20 20 2f 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74    /* Naming cont
23ed0 65 78 74 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e  ext */.    int n
23ee0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f00 20 20 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65       /* A counte
23f10 72 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75  r */.    int iCu
23f20 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
23f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f40 20 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e     /* A cursor n
23f50 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63  umber */.    Src
23f60 4c 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20  List *pSrcList; 
23f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f80 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
23f90 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
23fa0 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
23fb0 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
23fc0 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74 69         /* Counti
23fd0 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72 65  ng column refere
23fe0 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  nces */.    stru
23ff0 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43 43  ct CCurHint *pCC
24000 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20 20  urHint;         
24010 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20 62 79        /* Used by
24020 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e 74 28   codeCursorHint(
24030 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69  ) */.    int *ai
24040 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20 20  Col;            
24050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24060 20 20 20 2f 2a 20 61 72 72 61 79 20 6f 66 20 63     /* array of c
24070 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73 20 2a 2f  olumn indexes */
24080 0a 20 20 20 20 73 74 72 75 63 74 20 49 64 78 43  .    struct IdxC
24090 6f 76 65 72 20 2a 70 49 64 78 43 6f 76 65 72 3b  over *pIdxCover;
240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
240b0 2a 20 43 68 65 63 6b 20 66 6f 72 20 69 6e 64 65  * Check for inde
240c0 78 20 63 6f 76 65 72 61 67 65 20 2a 2f 0a 20 20  x coverage */.  
240d0 20 20 73 74 72 75 63 74 20 49 64 78 45 78 70 72    struct IdxExpr
240e0 54 72 61 6e 73 20 2a 70 49 64 78 54 72 61 6e 73  Trans *pIdxTrans
240f0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
24100 6f 6e 76 65 72 74 20 69 6e 64 65 78 65 64 20 65  onvert indexed e
24110 78 70 72 20 74 6f 20 63 6f 6c 75 6d 6e 20 2a 2f  xpr to column */
24120 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a 70  .    ExprList *p
24130 47 72 6f 75 70 42 79 3b 20 20 20 20 20 20 20 20  GroupBy;        
24140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24150 2a 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  * GROUP BY claus
24160 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
24170 48 61 76 69 6e 67 54 6f 57 68 65 72 65 43 74 78  HavingToWhereCtx
24180 20 2a 70 48 61 76 69 6e 67 43 74 78 3b 20 20 20   *pHavingCtx;   
24190 20 20 20 2f 2a 20 48 41 56 49 4e 47 20 74 6f 20     /* HAVING to 
241a0 57 48 45 52 45 20 63 6c 61 75 73 65 20 63 74 78  WHERE clause ctx
241b0 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
241c0 2a 20 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72  * Forward declar
241d0 61 74 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71  ations */.int sq
241e0 6c 69 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61  lite3WalkExpr(Wa
241f0 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
24200 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78  nt sqlite3WalkEx
24210 70 72 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20  prList(Walker*, 
24220 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
24230 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
24240 74 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  t(Walker*, Selec
24250 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
24260 57 61 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57  WalkSelectExpr(W
24270 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29  alker*, Select*)
24280 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c  ;.int sqlite3Wal
24290 6b 53 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b  kSelectFrom(Walk
242a0 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69  er*, Select*);.i
242b0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 57 61  nt sqlite3ExprWa
242c0 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20  lkNoop(Walker*, 
242d0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
242e0 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 4e 6f 6f  te3SelectWalkNoo
242f0 70 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63  p(Walker*, Selec
24300 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  t*);.#ifdef SQLI
24310 54 45 5f 44 45 42 55 47 0a 76 6f 69 64 20 73 71  TE_DEBUG.void sq
24320 6c 69 74 65 33 53 65 6c 65 63 74 57 61 6c 6b 41  lite3SelectWalkA
24330 73 73 65 72 74 32 28 57 61 6c 6b 65 72 2a 2c 20  ssert2(Walker*, 
24340 53 65 6c 65 63 74 2a 29 3b 0a 23 65 6e 64 69 66  Select*);.#endif
24350 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 63  ../*.** Return c
24360 6f 64 65 20 66 72 6f 6d 20 74 68 65 20 70 61 72  ode from the par
24370 73 65 2d 74 72 65 65 20 77 61 6c 6b 69 6e 67 20  se-tree walking 
24380 70 72 69 6d 69 74 69 76 65 73 20 61 6e 64 20 74  primitives and t
24390 68 65 69 72 0a 2a 2a 20 63 61 6c 6c 62 61 63 6b  heir.** callback
243a0 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52  s..*/.#define WR
243b0 43 5f 43 6f 6e 74 69 6e 75 65 20 20 20 20 30 20  C_Continue    0 
243c0 20 20 2f 2a 20 43 6f 6e 74 69 6e 75 65 20 64 6f    /* Continue do
243d0 77 6e 20 69 6e 74 6f 20 63 68 69 6c 64 72 65 6e  wn into children
243e0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f   */.#define WRC_
243f0 50 72 75 6e 65 20 20 20 20 20 20 20 31 20 20 20  Prune       1   
24400 2f 2a 20 4f 6d 69 74 20 63 68 69 6c 64 72 65 6e  /* Omit children
24410 20 62 75 74 20 63 6f 6e 74 69 6e 75 65 20 77 61   but continue wa
24420 6c 6b 69 6e 67 20 73 69 62 6c 69 6e 67 73 20 2a  lking siblings *
24430 2f 0a 23 64 65 66 69 6e 65 20 57 52 43 5f 41 62  /.#define WRC_Ab
24440 6f 72 74 20 20 20 20 20 20 20 32 20 20 20 2f 2a  ort       2   /*
24450 20 41 62 61 6e 64 6f 6e 20 74 68 65 20 74 72 65   Abandon the tre
24460 65 20 77 61 6c 6b 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  e walk */../*.**
24470 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20   An instance of 
24480 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 72  this structure r
24490 65 70 72 65 73 65 6e 74 73 20 61 20 73 65 74 20  epresents a set 
244a0 6f 66 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 43  of one or more C
244b0 54 45 73 0a 2a 2a 20 28 63 6f 6d 6d 6f 6e 20 74  TEs.** (common t
244c0 61 62 6c 65 20 65 78 70 72 65 73 73 69 6f 6e 73  able expressions
244d0 29 20 63 72 65 61 74 65 64 20 62 79 20 61 20 73  ) created by a s
244e0 69 6e 67 6c 65 20 57 49 54 48 20 63 6c 61 75 73  ingle WITH claus
244f0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 57 69 74  e..*/.struct Wit
24500 68 20 7b 0a 20 20 69 6e 74 20 6e 43 74 65 3b 20  h {.  int nCte; 
24510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24520 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
24530 6f 66 20 43 54 45 73 20 69 6e 20 74 68 65 20 57  of CTEs in the W
24540 49 54 48 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ITH clause */.  
24550 57 69 74 68 20 2a 70 4f 75 74 65 72 3b 20 20 20  With *pOuter;   
24560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24570 2f 2a 20 43 6f 6e 74 61 69 6e 69 6e 67 20 57 49  /* Containing WI
24580 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
24590 4c 4c 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 43  LL */.  struct C
245a0 74 65 20 7b 20 20 20 20 20 20 20 20 20 20 20 20  te {            
245b0 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 20 65          /* For e
245c0 61 63 68 20 43 54 45 20 69 6e 20 74 68 65 20 57  ach CTE in the W
245d0 49 54 48 20 63 6c 61 75 73 65 2e 2e 2e 2e 20 2a  ITH clause.... *
245e0 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d  /.    char *zNam
245f0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
24600 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66        /* Name of
24610 20 74 68 69 73 20 43 54 45 20 2a 2f 0a 20 20 20   this CTE */.   
24620 20 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6c 73   ExprList *pCols
24630 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
24640 20 2f 2a 20 4c 69 73 74 20 6f 66 20 65 78 70 6c   /* List of expl
24650 69 63 69 74 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  icit column name
24660 73 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  s, or NULL */.  
24670 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
24680 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
24690 20 20 2f 2a 20 54 68 65 20 64 65 66 69 6e 69 74    /* The definit
246a0 69 6f 6e 20 6f 66 20 74 68 69 73 20 43 54 45 20  ion of this CTE 
246b0 2a 2f 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61  */.    const cha
246c0 72 20 2a 7a 43 74 65 45 72 72 3b 20 20 20 20 20  r *zCteErr;     
246d0 20 20 20 20 20 20 20 2f 2a 20 45 72 72 6f 72 20         /* Error 
246e0 6d 65 73 73 61 67 65 20 66 6f 72 20 63 69 72 63  message for circ
246f0 75 6c 61 72 20 72 65 66 65 72 65 6e 63 65 73 20  ular references 
24700 2a 2f 0a 20 20 7d 20 61 5b 31 5d 3b 0a 7d 3b 0a  */.  } a[1];.};.
24710 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44  .#ifdef SQLITE_D
24720 45 42 55 47 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e  EBUG./*.** An in
24730 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 54 72  stance of the Tr
24740 65 65 56 69 65 77 20 6f 62 6a 65 63 74 20 69 73  eeView object is
24750 20 75 73 65 64 20 66 6f 72 20 70 72 69 6e 74 69   used for printi
24760 6e 67 20 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f  ng the content o
24770 66 0a 2a 2a 20 64 61 74 61 20 73 74 72 75 63 74  f.** data struct
24780 75 72 65 73 20 6f 6e 20 73 71 6c 69 74 65 33 44  ures on sqlite3D
24790 65 62 75 67 50 72 69 6e 74 66 28 29 20 75 73 69  ebugPrintf() usi
247a0 6e 67 20 61 20 74 72 65 65 2d 6c 69 6b 65 20 76  ng a tree-like v
247b0 69 65 77 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  iew..*/.struct T
247c0 72 65 65 56 69 65 77 20 7b 0a 20 20 69 6e 74 20  reeView {.  int 
247d0 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20  iLevel;         
247e0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 6c 65 76      /* Which lev
247f0 65 6c 20 6f 66 20 74 68 65 20 74 72 65 65 20 77  el of the tree w
24800 65 20 61 72 65 20 6f 6e 20 2a 2f 0a 20 20 75 38  e are on */.  u8
24810 20 20 62 4c 69 6e 65 5b 31 30 30 5d 3b 20 20 20    bLine[100];   
24820 20 20 20 20 20 20 2f 2a 20 44 72 61 77 20 76 65        /* Draw ve
24830 72 74 69 63 61 6c 20 69 6e 20 63 6f 6c 75 6d 6e  rtical in column
24840 20 69 20 69 66 20 62 4c 69 6e 65 5b 69 5d 20 69   i if bLine[i] i
24850 73 20 74 72 75 65 20 2a 2f 0a 7d 3b 0a 23 65 6e  s true */.};.#en
24860 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 44 45  dif /* SQLITE_DE
24870 42 55 47 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 73  BUG */../*.** As
24880 73 75 6d 69 6e 67 20 7a 49 6e 20 70 6f 69 6e 74  suming zIn point
24890 73 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  s to the first b
248a0 79 74 65 20 6f 66 20 61 20 55 54 46 2d 38 20 63  yte of a UTF-8 c
248b0 68 61 72 61 63 74 65 72 2c 0a 2a 2a 20 61 64 76  haracter,.** adv
248c0 61 6e 63 65 20 7a 49 6e 20 74 6f 20 70 6f 69 6e  ance zIn to poin
248d0 74 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 62  t to the first b
248e0 79 74 65 20 6f 66 20 74 68 65 20 6e 65 78 74 20  yte of the next 
248f0 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2e  UTF-8 character.
24900 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
24910 54 45 5f 53 4b 49 50 5f 55 54 46 38 28 7a 49 6e  TE_SKIP_UTF8(zIn
24920 29 20 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  ) {             
24930 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 69             \.  i
24940 66 28 20 28 2a 28 7a 49 6e 2b 2b 29 29 3e 3d 30  f( (*(zIn++))>=0
24950 78 63 30 20 29 7b 20 20 20 20 20 20 20 20 20 20  xc0 ){          
24960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24970 20 20 20 20 5c 0a 20 20 20 20 77 68 69 6c 65 28      \.    while(
24980 20 28 2a 7a 49 6e 20 26 20 30 78 63 30 29 3d 3d   (*zIn & 0xc0)==
24990 30 78 38 30 20 29 7b 20 7a 49 6e 2b 2b 3b 20 7d  0x80 ){ zIn++; }
249a0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20               \. 
249b0 20 7d 20 20 20 20 20 20 20 20 20 20 20 20 20 20   }              
249c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
249e0 20 20 20 20 20 20 5c 0a 7d 0a 0a 2f 2a 0a 2a 2a        \.}../*.**
249f0 20 54 68 65 20 53 51 4c 49 54 45 5f 2a 5f 42 4b   The SQLITE_*_BK
24a00 50 54 20 6d 61 63 72 6f 73 20 61 72 65 20 73 75  PT macros are su
24a10 62 73 74 69 74 75 74 65 73 20 66 6f 72 20 74 68  bstitutes for th
24a20 65 20 65 72 72 6f 72 20 63 6f 64 65 73 20 77 69  e error codes wi
24a30 74 68 0a 2a 2a 20 74 68 65 20 73 61 6d 65 20 6e  th.** the same n
24a40 61 6d 65 20 62 75 74 20 77 69 74 68 6f 75 74 20  ame but without 
24a50 74 68 65 20 5f 42 4b 50 54 20 73 75 66 66 69 78  the _BKPT suffix
24a60 2e 20 20 54 68 65 73 65 20 6d 61 63 72 6f 73 20  .  These macros 
24a70 69 6e 76 6f 6b 65 0a 2a 2a 20 72 6f 75 74 69 6e  invoke.** routin
24a80 65 73 20 74 68 61 74 20 72 65 70 6f 72 74 20 74  es that report t
24a90 68 65 20 6c 69 6e 65 2d 6e 75 6d 62 65 72 20 6f  he line-number o
24aa0 6e 20 77 68 69 63 68 20 74 68 65 20 65 72 72 6f  n which the erro
24ab0 72 20 6f 72 69 67 69 6e 61 74 65 64 0a 2a 2a 20  r originated.** 
24ac0 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 6c 6f  using sqlite3_lo
24ad0 67 28 29 2e 20 20 54 68 65 20 72 6f 75 74 69 6e  g().  The routin
24ae0 65 73 20 61 6c 73 6f 20 70 72 6f 76 69 64 65 20  es also provide 
24af0 61 20 63 6f 6e 76 65 6e 69 65 6e 74 20 70 6c 61  a convenient pla
24b00 63 65 0a 2a 2a 20 74 6f 20 73 65 74 20 61 20 64  ce.** to set a d
24b10 65 62 75 67 67 65 72 20 62 72 65 61 6b 70 6f 69  ebugger breakpoi
24b20 6e 74 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  nt..*/.int sqlit
24b30 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72 28 69  e3CorruptError(i
24b40 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
24b50 4d 69 73 75 73 65 45 72 72 6f 72 28 69 6e 74 29  MisuseError(int)
24b60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 61 6e  ;.int sqlite3Can
24b70 74 6f 70 65 6e 45 72 72 6f 72 28 69 6e 74 29 3b  topenError(int);
24b80 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
24b90 43 4f 52 52 55 50 54 5f 42 4b 50 54 20 73 71 6c  CORRUPT_BKPT sql
24ba0 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f 72  ite3CorruptError
24bb0 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69  (__LINE__).#defi
24bc0 6e 65 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45  ne SQLITE_MISUSE
24bd0 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4d 69 73  _BKPT sqlite3Mis
24be0 75 73 65 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  useError(__LINE_
24bf0 5f 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  _).#define SQLIT
24c00 45 5f 43 41 4e 54 4f 50 45 4e 5f 42 4b 50 54 20  E_CANTOPEN_BKPT 
24c10 73 71 6c 69 74 65 33 43 61 6e 74 6f 70 65 6e 45  sqlite3CantopenE
24c20 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23  rror(__LINE__).#
24c30 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
24c40 55 47 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  UG.  int sqlite3
24c50 4e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e 74 29 3b  NomemError(int);
24c60 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 6f  .  int sqlite3Io
24c70 65 72 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 69 6e  errnomemError(in
24c80 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  t);.  int sqlite
24c90 33 43 6f 72 72 75 70 74 50 67 6e 6f 45 72 72 6f  3CorruptPgnoErro
24ca0 72 28 69 6e 74 2c 50 67 6e 6f 29 3b 0a 23 20 64  r(int,Pgno);.# d
24cb0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 4d  efine SQLITE_NOM
24cc0 45 4d 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 4e  EM_BKPT sqlite3N
24cd0 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  omemError(__LINE
24ce0 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  __).# define SQL
24cf0 49 54 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f  ITE_IOERR_NOMEM_
24d00 42 4b 50 54 20 73 71 6c 69 74 65 33 49 6f 65 72  BKPT sqlite3Ioer
24d10 72 6e 6f 6d 65 6d 45 72 72 6f 72 28 5f 5f 4c 49  rnomemError(__LI
24d20 4e 45 5f 5f 29 0a 23 20 64 65 66 69 6e 65 20 53  NE__).# define S
24d30 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47  QLITE_CORRUPT_PG
24d40 4e 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72  NO(P) sqlite3Cor
24d50 72 75 70 74 50 67 6e 6f 45 72 72 6f 72 28 5f 5f  ruptPgnoError(__
24d60 4c 49 4e 45 5f 5f 2c 28 50 29 29 0a 23 65 6c 73  LINE__,(P)).#els
24d70 65 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  e.# define SQLIT
24d80 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c  E_NOMEM_BKPT SQL
24d90 49 54 45 5f 4e 4f 4d 45 4d 0a 23 20 64 65 66 69  ITE_NOMEM.# defi
24da0 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f  ne SQLITE_IOERR_
24db0 4e 4f 4d 45 4d 5f 42 4b 50 54 20 53 51 4c 49 54  NOMEM_BKPT SQLIT
24dc0 45 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 0a 23 20  E_IOERR_NOMEM.# 
24dd0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f  define SQLITE_CO
24de0 52 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71  RRUPT_PGNO(P) sq
24df0 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72 72 6f  lite3CorruptErro
24e00 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 65 6e 64  r(__LINE__).#end
24e10 69 66 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 33 20 61  if../*.** FTS3 a
24e20 6e 64 20 46 54 53 34 20 62 6f 74 68 20 72 65 71  nd FTS4 both req
24e30 75 69 72 65 20 76 69 72 74 75 61 6c 20 74 61 62  uire virtual tab
24e40 6c 65 20 73 75 70 70 6f 72 74 0a 2a 2f 0a 23 69  le support.*/.#i
24e50 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
24e60 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42  _OMIT_VIRTUALTAB
24e70 4c 45 29 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  LE).# undef SQLI
24e80 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 0a 23  TE_ENABLE_FTS3.#
24e90 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e   undef SQLITE_EN
24ea0 41 42 4c 45 5f 46 54 53 34 0a 23 65 6e 64 69 66  ABLE_FTS4.#endif
24eb0 0a 0a 2f 2a 0a 2a 2a 20 46 54 53 34 20 69 73 20  ../*.** FTS4 is 
24ec0 72 65 61 6c 6c 79 20 61 6e 20 65 78 74 65 6e 73  really an extens
24ed0 69 6f 6e 20 66 6f 72 20 46 54 53 33 2e 20 20 49  ion for FTS3.  I
24ee0 74 20 69 73 20 65 6e 61 62 6c 65 64 20 75 73 69  t is enabled usi
24ef0 6e 67 20 74 68 65 0a 2a 2a 20 53 51 4c 49 54 45  ng the.** SQLITE
24f00 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 6d 61 63  _ENABLE_FTS3 mac
24f10 72 6f 2e 20 20 42 75 74 20 74 6f 20 61 76 6f 69  ro.  But to avoi
24f20 64 20 63 6f 6e 66 75 73 69 6f 6e 20 77 65 20 61  d confusion we a
24f30 6c 73 6f 20 63 61 6c 6c 0a 2a 2a 20 74 68 65 20  lso call.** the 
24f40 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54  SQLITE_ENABLE_FT
24f50 53 34 20 6d 61 63 72 6f 20 74 6f 20 73 65 72 76  S4 macro to serv
24f60 65 20 61 73 20 61 6e 20 61 6c 69 61 73 20 66 6f  e as an alias fo
24f70 72 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  r SQLITE_ENABLE_
24f80 46 54 53 33 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  FTS3..*/.#if def
24f90 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
24fa0 4c 45 5f 46 54 53 34 29 20 26 26 20 21 64 65 66  LE_FTS4) && !def
24fb0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
24fc0 4c 45 5f 46 54 53 33 29 0a 23 20 64 65 66 69 6e  LE_FTS3).# defin
24fd0 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  e SQLITE_ENABLE_
24fe0 46 54 53 33 20 31 0a 23 65 6e 64 69 66 0a 0a 2f  FTS3 1.#endif../
24ff0 2a 0a 2a 2a 20 54 68 65 20 63 74 79 70 65 2e 68  *.** The ctype.h
25000 20 68 65 61 64 65 72 20 69 73 20 6e 65 65 64 65   header is neede
25010 64 20 66 6f 72 20 6e 6f 6e 2d 41 53 43 49 49 20  d for non-ASCII 
25020 73 79 73 74 65 6d 73 2e 20 20 49 74 20 69 73 20  systems.  It is 
25030 61 6c 73 6f 0a 2a 2a 20 6e 65 65 64 65 64 20 62  also.** needed b
25040 79 20 46 54 53 33 20 77 68 65 6e 20 46 54 53 33  y FTS3 when FTS3
25050 20 69 73 20 69 6e 63 6c 75 64 65 64 20 69 6e 20   is included in 
25060 74 68 65 20 61 6d 61 6c 67 61 6d 61 74 69 6f 6e  the amalgamation
25070 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
25080 64 28 53 51 4c 49 54 45 5f 41 53 43 49 49 29 20  d(SQLITE_ASCII) 
25090 7c 7c 20 5c 0a 20 20 20 20 28 64 65 66 69 6e 65  || \.    (define
250a0 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
250b0 46 54 53 33 29 20 26 26 20 64 65 66 69 6e 65 64  FTS3) && defined
250c0 28 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41  (SQLITE_AMALGAMA
250d0 54 49 4f 4e 29 29 0a 23 20 69 6e 63 6c 75 64 65  TION)).# include
250e0 20 3c 63 74 79 70 65 2e 68 3e 0a 23 65 6e 64 69   <ctype.h>.#endi
250f0 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  f../*.** The fol
25100 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20 6d 69  lowing macros mi
25110 6d 69 63 20 74 68 65 20 73 74 61 6e 64 61 72 64  mic the standard
25120 20 6c 69 62 72 61 72 79 20 66 75 6e 63 74 69 6f   library functio
25130 6e 73 20 74 6f 75 70 70 65 72 28 29 2c 0a 2a 2a  ns toupper(),.**
25140 20 69 73 73 70 61 63 65 28 29 2c 20 69 73 61 6c   isspace(), isal
25150 6e 75 6d 28 29 2c 20 69 73 64 69 67 69 74 28 29  num(), isdigit()
25160 20 61 6e 64 20 69 73 78 64 69 67 69 74 28 29 2c   and isxdigit(),
25170 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 54   respectively. T
25180 68 65 0a 2a 2a 20 73 71 6c 69 74 65 20 76 65 72  he.** sqlite ver
25190 73 69 6f 6e 73 20 6f 6e 6c 79 20 77 6f 72 6b 20  sions only work 
251a0 66 6f 72 20 41 53 43 49 49 20 63 68 61 72 61 63  for ASCII charac
251b0 74 65 72 73 2c 20 72 65 67 61 72 64 6c 65 73 73  ters, regardless
251c0 20 6f 66 20 6c 6f 63 61 6c 65 2e 0a 2a 2f 0a 23   of locale..*/.#
251d0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 53 43  ifdef SQLITE_ASC
251e0 49 49 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  II.# define sqli
251f0 74 65 33 54 6f 75 70 70 65 72 28 78 29 20 20 28  te3Toupper(x)  (
25200 28 78 29 26 7e 28 73 71 6c 69 74 65 33 43 74 79  (x)&~(sqlite3Cty
25210 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
25220 63 68 61 72 29 28 78 29 5d 26 30 78 32 30 29 29  char)(x)]&0x20))
25230 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25240 33 49 73 73 70 61 63 65 28 78 29 20 20 20 28 73  3Isspace(x)   (s
25250 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
25260 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25270 29 5d 26 30 78 30 31 29 0a 23 20 64 65 66 69 6e  )]&0x01).# defin
25280 65 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d  e sqlite3Isalnum
25290 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
252a0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
252b0 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 36 29   char)(x)]&0x06)
252c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
252d0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 28 73  3Isalpha(x)   (s
252e0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
252f0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25300 29 5d 26 30 78 30 32 29 0a 23 20 64 65 66 69 6e  )]&0x02).# defin
25310 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
25320 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
25330 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
25340 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 34 29   char)(x)]&0x04)
25350 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25360 33 49 73 78 64 69 67 69 74 28 78 29 20 20 28 73  3Isxdigit(x)  (s
25370 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
25380 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
25390 29 5d 26 30 78 30 38 29 0a 23 20 64 65 66 69 6e  )]&0x08).# defin
253a0 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65 72  e sqlite3Tolower
253b0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 55 70  (x)   (sqlite3Up
253c0 70 65 72 54 6f 4c 6f 77 65 72 5b 28 75 6e 73 69  perToLower[(unsi
253d0 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d 29 0a  gned char)(x)]).
253e0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
253f0 49 73 71 75 6f 74 65 28 78 29 20 20 20 28 73 71  Isquote(x)   (sq
25400 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
25410 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25420 5d 26 30 78 38 30 29 0a 23 65 6c 73 65 0a 23 20  ]&0x80).#else.# 
25430 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f  define sqlite3To
25440 75 70 70 65 72 28 78 29 20 20 20 74 6f 75 70 70  upper(x)   toupp
25450 65 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er((unsigned cha
25460 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
25470 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28 78  sqlite3Isspace(x
25480 29 20 20 20 69 73 73 70 61 63 65 28 28 75 6e 73  )   isspace((uns
25490 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
254a0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
254b0 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 69 73 61  Isalnum(x)   isa
254c0 6c 6e 75 6d 28 28 75 6e 73 69 67 6e 65 64 20 63  lnum((unsigned c
254d0 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
254e0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
254f0 28 78 29 20 20 20 69 73 61 6c 70 68 61 28 28 75  (x)   isalpha((u
25500 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
25510 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25520 65 33 49 73 64 69 67 69 74 28 78 29 20 20 20 69  e3Isdigit(x)   i
25530 73 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65 64  sdigit((unsigned
25540 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66   char)(x)).# def
25550 69 6e 65 20 73 71 6c 69 74 65 33 49 73 78 64 69  ine sqlite3Isxdi
25560 67 69 74 28 78 29 20 20 69 73 78 64 69 67 69 74  git(x)  isxdigit
25570 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25580 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25590 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 78 29 20  lite3Tolower(x) 
255a0 20 20 74 6f 6c 6f 77 65 72 28 28 75 6e 73 69 67    tolower((unsig
255b0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
255c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
255d0 71 75 6f 74 65 28 78 29 20 20 20 28 28 78 29 3d  quote(x)   ((x)=
255e0 3d 27 22 27 7c 7c 28 78 29 3d 3d 27 5c 27 27 7c  ='"'||(x)=='\''|
255f0 7c 28 78 29 3d 3d 27 5b 27 7c 7c 28 78 29 3d 3d  |(x)=='['||(x)==
25600 27 60 27 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e  '`').#endif.#ifn
25610 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
25620 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
25630 41 47 53 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  AGS.int sqlite3I
25640 73 49 64 43 68 61 72 28 75 38 29 3b 0a 23 65 6e  sIdChar(u8);.#en
25650 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  dif../*.** Inter
25660 6e 61 6c 20 66 75 6e 63 74 69 6f 6e 20 70 72 6f  nal function pro
25670 74 6f 74 79 70 65 73 0a 2a 2f 0a 69 6e 74 20 73  totypes.*/.int s
25680 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 63 6f  qlite3StrICmp(co
25690 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
256a0 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  char*);.int sqli
256b0 74 65 33 53 74 72 6c 65 6e 33 30 28 63 6f 6e 73  te3Strlen30(cons
256c0 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a  t char*);.char *
256d0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 54 79 70  sqlite3ColumnTyp
256e0 65 28 43 6f 6c 75 6d 6e 2a 2c 63 68 61 72 2a 29  e(Column*,char*)
256f0 3b 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ;.#define sqlite
25700 33 53 74 72 4e 49 43 6d 70 20 73 71 6c 69 74 65  3StrNICmp sqlite
25710 33 5f 73 74 72 6e 69 63 6d 70 0a 0a 69 6e 74 20  3_strnicmp..int 
25720 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 49 6e 69  sqlite3MallocIni
25730 74 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71  t(void);.void sq
25740 6c 69 74 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76  lite3MallocEnd(v
25750 6f 69 64 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  oid);.void *sqli
25760 74 65 33 4d 61 6c 6c 6f 63 28 75 36 34 29 3b 0a  te3Malloc(u64);.
25770 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c  void *sqlite3Mal
25780 6c 6f 63 5a 65 72 6f 28 75 36 34 29 3b 0a 76 6f  locZero(u64);.vo
25790 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61 6c  id *sqlite3DbMal
257a0 6c 6f 63 5a 65 72 6f 28 73 71 6c 69 74 65 33 2a  locZero(sqlite3*
257b0 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
257c0 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
257d0 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b  (sqlite3*, u64);
257e0 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62  .void *sqlite3Db
257f0 4d 61 6c 6c 6f 63 52 61 77 4e 4e 28 73 71 6c 69  MallocRawNN(sqli
25800 74 65 33 2a 2c 20 75 36 34 29 3b 0a 63 68 61 72  te3*, u64);.char
25810 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
25820 70 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  p(sqlite3*,const
25830 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20 2a 73   char*);.char *s
25840 71 6c 69 74 65 33 44 62 53 74 72 4e 44 75 70 28  qlite3DbStrNDup(
25850 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
25860 68 61 72 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  har*, u64);.void
25870 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f 63   *sqlite3Realloc
25880 28 76 6f 69 64 2a 2c 20 75 36 34 29 3b 0a 76 6f  (void*, u64);.vo
25890 69 64 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61  id *sqlite3DbRea
258a0 6c 6c 6f 63 4f 72 46 72 65 65 28 73 71 6c 69 74  llocOrFree(sqlit
258b0 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
258c0 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
258d0 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
258e0 65 33 20 2a 2c 20 76 6f 69 64 20 2a 2c 20 75 36  e3 *, void *, u6
258f0 34 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  4);.void sqlite3
25900 44 62 46 72 65 65 28 73 71 6c 69 74 65 33 2a 2c  DbFree(sqlite3*,
25910 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71   void*);.void sq
25920 6c 69 74 65 33 44 62 46 72 65 65 4e 4e 28 73 71  lite3DbFreeNN(sq
25930 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
25940 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
25950 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69 6e  cSize(void*);.in
25960 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f  t sqlite3DbMallo
25970 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c 20  cSize(sqlite3*, 
25980 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73 71  void*);.void *sq
25990 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f 63 28  lite3PageMalloc(
259a0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
259b0 65 33 50 61 67 65 46 72 65 65 28 76 6f 69 64 2a  e3PageFree(void*
259c0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d  );.void sqlite3M
259d0 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76 6f 69  emSetDefault(voi
259e0 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  d);.#ifndef SQLI
259f0 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76 6f  TE_UNTESTABLE.vo
25a00 69 64 20 73 71 6c 69 74 65 33 42 65 6e 69 67 6e  id sqlite3Benign
25a10 4d 61 6c 6c 6f 63 48 6f 6f 6b 73 28 76 6f 69 64  MallocHooks(void
25a20 20 28 2a 29 28 76 6f 69 64 29 2c 20 76 6f 69 64   (*)(void), void
25a30 20 28 2a 29 28 76 6f 69 64 29 29 3b 0a 23 65 6e   (*)(void));.#en
25a40 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 48  dif.int sqlite3H
25a50 65 61 70 4e 65 61 72 6c 79 46 75 6c 6c 28 76 6f  eapNearlyFull(vo
25a60 69 64 29 3b 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 20 73  id);../*.** On s
25a70 79 73 74 65 6d 73 20 77 69 74 68 20 61 6d 70 6c  ystems with ampl
25a80 65 20 73 74 61 63 6b 20 73 70 61 63 65 20 61 6e  e stack space an
25a90 64 20 74 68 61 74 20 73 75 70 70 6f 72 74 20 61  d that support a
25aa0 6c 6c 6f 63 61 28 29 2c 20 6d 61 6b 65 0a 2a 2a  lloca(), make.**
25ab0 20 75 73 65 20 6f 66 20 61 6c 6c 6f 63 61 28 29   use of alloca()
25ac0 20 74 6f 20 6f 62 74 61 69 6e 20 73 70 61 63 65   to obtain space
25ad0 20 66 6f 72 20 6c 61 72 67 65 20 61 75 74 6f 6d   for large autom
25ae0 61 74 69 63 20 6f 62 6a 65 63 74 73 2e 20 20 42  atic objects.  B
25af0 79 20 64 65 66 61 75 6c 74 2c 0a 2a 2a 20 6f 62  y default,.** ob
25b00 74 61 69 6e 20 73 70 61 63 65 20 66 72 6f 6d 20  tain space from 
25b10 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2a 0a 2a 2a 20  malloc()..**.** 
25b20 54 68 65 20 61 6c 6c 6f 63 61 28 29 20 72 6f 75  The alloca() rou
25b30 74 69 6e 65 20 6e 65 76 65 72 20 72 65 74 75 72  tine never retur
25b40 6e 73 20 4e 55 4c 4c 2e 20 20 54 68 69 73 20 77  ns NULL.  This w
25b50 69 6c 6c 20 63 61 75 73 65 20 63 6f 64 65 20 70  ill cause code p
25b60 61 74 68 73 0a 2a 2a 20 74 68 61 74 20 64 65 61  aths.** that dea
25b70 6c 20 77 69 74 68 20 73 71 6c 69 74 65 33 53 74  l with sqlite3St
25b80 61 63 6b 41 6c 6c 6f 63 28 29 20 66 61 69 6c 75  ackAlloc() failu
25b90 72 65 73 20 74 6f 20 62 65 20 75 6e 72 65 61 63  res to be unreac
25ba0 68 61 62 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66  hable..*/.#ifdef
25bb0 20 53 51 4c 49 54 45 5f 55 53 45 5f 41 4c 4c 4f   SQLITE_USE_ALLO
25bc0 43 41 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  CA.# define sqli
25bd0 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61 77  te3StackAllocRaw
25be0 28 44 2c 4e 29 20 20 20 61 6c 6c 6f 63 61 28 4e  (D,N)   alloca(N
25bf0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
25c00 65 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f  e3StackAllocZero
25c10 28 44 2c 4e 29 20 20 6d 65 6d 73 65 74 28 61 6c  (D,N)  memset(al
25c20 6c 6f 63 61 28 4e 29 2c 20 30 2c 20 4e 29 0a 23  loca(N), 0, N).#
25c30 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
25c40 74 61 63 6b 46 72 65 65 28 44 2c 50 29 0a 23 65  tackFree(D,P).#e
25c50 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  lse.# define sql
25c60 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63 52 61  ite3StackAllocRa
25c70 77 28 44 2c 4e 29 20 20 20 73 71 6c 69 74 65 33  w(D,N)   sqlite3
25c80 44 62 4d 61 6c 6c 6f 63 52 61 77 28 44 2c 4e 29  DbMallocRaw(D,N)
25c90 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
25ca0 33 53 74 61 63 6b 41 6c 6c 6f 63 5a 65 72 6f 28  3StackAllocZero(
25cb0 44 2c 4e 29 20 20 73 71 6c 69 74 65 33 44 62 4d  D,N)  sqlite3DbM
25cc0 61 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 0a 23  allocZero(D,N).#
25cd0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
25ce0 74 61 63 6b 46 72 65 65 28 44 2c 50 29 20 20 20  tackFree(D,P)   
25cf0 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65      sqlite3DbFre
25d00 65 28 44 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f  e(D,P).#endif../
25d10 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 62  * Do not allow b
25d20 6f 74 68 20 4d 45 4d 53 59 53 35 20 61 6e 64 20  oth MEMSYS5 and 
25d30 4d 45 4d 53 59 53 33 20 74 6f 20 62 65 20 64 65  MEMSYS3 to be de
25d40 66 69 6e 65 64 20 74 6f 67 65 74 68 65 72 2e 20  fined together. 
25d50 20 49 66 20 74 68 65 79 0a 2a 2a 20 61 72 65 2c   If they.** are,
25d60 20 64 69 73 61 62 6c 65 20 4d 45 4d 53 59 53 33   disable MEMSYS3
25d70 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
25d80 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 35  E_ENABLE_MEMSYS5
25d90 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
25da0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
25db0 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 35  te3MemGetMemsys5
25dc0 28 76 6f 69 64 29 3b 0a 23 75 6e 64 65 66 20 53  (void);.#undef S
25dd0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d  QLITE_ENABLE_MEM
25de0 53 59 53 33 0a 23 65 6e 64 69 66 0a 23 69 66 64  SYS3.#endif.#ifd
25df0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25e00 5f 4d 45 4d 53 59 53 33 0a 63 6f 6e 73 74 20 73  _MEMSYS3.const s
25e10 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
25e20 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
25e30 74 4d 65 6d 73 79 73 33 28 76 6f 69 64 29 3b 0a  tMemsys3(void);.
25e40 23 65 6e 64 69 66 0a 0a 0a 23 69 66 6e 64 65 66  #endif...#ifndef
25e50 20 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f 4f 4d   SQLITE_MUTEX_OM
25e60 49 54 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  IT.  sqlite3_mut
25e70 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e 73 74  ex_methods const
25e80 20 2a 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74   *sqlite3Default
25e90 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
25ea0 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74  qlite3_mutex_met
25eb0 68 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69  hods const *sqli
25ec0 74 65 33 4e 6f 6f 70 4d 75 74 65 78 28 76 6f 69  te3NoopMutex(voi
25ed0 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75  d);.  sqlite3_mu
25ee0 74 65 78 20 2a 73 71 6c 69 74 65 33 4d 75 74 65  tex *sqlite3Mute
25ef0 78 41 6c 6c 6f 63 28 69 6e 74 29 3b 0a 20 20 69  xAlloc(int);.  i
25f00 6e 74 20 73 71 6c 69 74 65 33 4d 75 74 65 78 49  nt sqlite3MutexI
25f10 6e 69 74 28 76 6f 69 64 29 3b 0a 20 20 69 6e 74  nit(void);.  int
25f20 20 73 71 6c 69 74 65 33 4d 75 74 65 78 45 6e 64   sqlite3MutexEnd
25f30 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 23  (void);.#endif.#
25f40 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
25f50 54 45 5f 4d 55 54 45 58 5f 4f 4d 49 54 29 20 26  TE_MUTEX_OMIT) &
25f60 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  & !defined(SQLIT
25f70 45 5f 4d 55 54 45 58 5f 4e 4f 4f 50 29 0a 20 20  E_MUTEX_NOOP).  
25f80 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65 6d 6f  void sqlite3Memo
25f90 72 79 42 61 72 72 69 65 72 28 76 6f 69 64 29 3b  ryBarrier(void);
25fa0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
25fb0 73 71 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72  sqlite3MemoryBar
25fc0 72 69 65 72 28 29 0a 23 65 6e 64 69 66 0a 0a 73  rier().#endif..s
25fd0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c  qlite3_int64 sql
25fe0 69 74 65 33 53 74 61 74 75 73 56 61 6c 75 65 28  ite3StatusValue(
25ff0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26000 65 33 53 74 61 74 75 73 55 70 28 69 6e 74 2c 20  e3StatusUp(int, 
26010 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
26020 65 33 53 74 61 74 75 73 44 6f 77 6e 28 69 6e 74  e3StatusDown(int
26030 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26040 69 74 65 33 53 74 61 74 75 73 48 69 67 68 77 61  ite3StatusHighwa
26050 74 65 72 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a  ter(int, int);..
26060 2f 2a 20 41 63 63 65 73 73 20 74 6f 20 6d 75 74  /* Access to mut
26070 65 78 65 73 20 75 73 65 64 20 62 79 20 73 71 6c  exes used by sql
26080 69 74 65 33 5f 73 74 61 74 75 73 28 29 20 2a 2f  ite3_status() */
26090 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a  .sqlite3_mutex *
260a0 73 71 6c 69 74 65 33 50 63 61 63 68 65 31 4d 75  sqlite3Pcache1Mu
260b0 74 65 78 28 76 6f 69 64 29 3b 0a 73 71 6c 69 74  tex(void);.sqlit
260c0 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65  e3_mutex *sqlite
260d0 33 4d 61 6c 6c 6f 63 4d 75 74 65 78 28 76 6f 69  3MallocMutex(voi
260e0 64 29 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  d);..#ifndef SQL
260f0 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49 4e  ITE_OMIT_FLOATIN
26100 47 5f 50 4f 49 4e 54 0a 20 20 69 6e 74 20 73 71  G_POINT.  int sq
26110 6c 69 74 65 33 49 73 4e 61 4e 28 64 6f 75 62 6c  lite3IsNaN(doubl
26120 65 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  e);.#else.# defi
26130 6e 65 20 73 71 6c 69 74 65 33 49 73 4e 61 4e 28  ne sqlite3IsNaN(
26140 58 29 20 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a  X)  0.#endif../*
26150 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
26160 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
26170 20 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73   structure holds
26180 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   information abo
26190 75 74 20 53 51 4c 0a 2a 2a 20 66 75 6e 63 74 69  ut SQL.** functi
261a0 6f 6e 73 20 61 72 67 75 6d 65 6e 74 73 20 74 68  ons arguments th
261b0 61 74 20 61 72 65 20 74 68 65 20 70 61 72 61 6d  at are the param
261c0 65 74 65 72 73 20 74 6f 20 74 68 65 20 70 72 69  eters to the pri
261d0 6e 74 66 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a  ntf() function..
261e0 2a 2f 0a 73 74 72 75 63 74 20 50 72 69 6e 74 66  */.struct Printf
261f0 41 72 67 75 6d 65 6e 74 73 20 7b 0a 20 20 69 6e  Arguments {.  in
26200 74 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  t nArg;         
26210 20 20 20 20 20 20 20 2f 2a 20 54 6f 74 61 6c 20         /* Total 
26220 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
26230 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 55 73  nts */.  int nUs
26240 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ed;             
26250 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61    /* Number of a
26260 72 67 75 6d 65 6e 74 73 20 75 73 65 64 20 73 6f  rguments used so
26270 20 66 61 72 20 2a 2f 0a 20 20 73 71 6c 69 74 65   far */.  sqlite
26280 33 5f 76 61 6c 75 65 20 2a 2a 61 70 41 72 67 3b  3_value **apArg;
26290 20 20 20 2f 2a 20 54 68 65 20 61 72 67 75 6d 65     /* The argume
262a0 6e 74 20 76 61 6c 75 65 73 20 2a 2f 0a 7d 3b 0a  nt values */.};.
262b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 58 50  .void sqlite3VXP
262c0 72 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c  rintf(StrAccum*,
262d0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76 61   const char*, va
262e0 5f 6c 69 73 74 29 3b 0a 76 6f 69 64 20 73 71 6c  _list);.void sql
262f0 69 74 65 33 58 50 72 69 6e 74 66 28 53 74 72 41  ite3XPrintf(StrA
26300 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ccum*, const cha
26310 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20 2a  r*, ...);.char *
26320 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 73  sqlite3MPrintf(s
26330 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68  qlite3*,const ch
26340 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 63 68 61 72 20  ar*, ...);.char 
26350 2a 73 71 6c 69 74 65 33 56 4d 50 72 69 6e 74 66  *sqlite3VMPrintf
26360 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
26370 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
26380 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
26390 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
263a0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 56  fined(SQLITE_HAV
263b0 45 5f 4f 53 5f 54 52 41 43 45 29 0a 20 20 76 6f  E_OS_TRACE).  vo
263c0 69 64 20 73 71 6c 69 74 65 33 44 65 62 75 67 50  id sqlite3DebugP
263d0 72 69 6e 74 66 28 63 6f 6e 73 74 20 63 68 61 72  rintf(const char
263e0 2a 2c 20 2e 2e 2e 29 3b 0a 23 65 6e 64 69 66 0a  *, ...);.#endif.
263f0 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
26400 54 45 5f 54 45 53 54 29 0a 20 20 76 6f 69 64 20  TE_TEST).  void 
26410 2a 73 71 6c 69 74 65 33 54 65 73 74 54 65 78 74  *sqlite3TestText
26420 54 6f 50 74 72 28 63 6f 6e 73 74 20 63 68 61 72  ToPtr(const char
26430 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20  *);.#endif..#if 
26440 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
26450 45 42 55 47 29 0a 20 20 76 6f 69 64 20 73 71 6c  EBUG).  void sql
26460 69 74 65 33 54 72 65 65 56 69 65 77 45 78 70 72  ite3TreeViewExpr
26470 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
26480 74 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20  t Expr*, u8);.  
26490 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
264a0 56 69 65 77 42 61 72 65 45 78 70 72 4c 69 73 74  ViewBareExprList
264b0 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73  (TreeView*, cons
264c0 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f 6e  t ExprList*, con
264d0 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69  st char*);.  voi
264e0 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69 65  d sqlite3TreeVie
264f0 77 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  wExprList(TreeVi
26500 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
26510 69 73 74 2a 2c 20 75 38 2c 20 63 6f 6e 73 74 20  ist*, u8, const 
26520 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73  char*);.  void s
26530 71 6c 69 74 65 33 54 72 65 65 56 69 65 77 53 65  qlite3TreeViewSe
26540 6c 65 63 74 28 54 72 65 65 56 69 65 77 2a 2c 20  lect(TreeView*, 
26550 63 6f 6e 73 74 20 53 65 6c 65 63 74 2a 2c 20 75  const Select*, u
26560 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  8);.  void sqlit
26570 65 33 54 72 65 65 56 69 65 77 57 69 74 68 28 54  e3TreeViewWith(T
26580 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20  reeView*, const 
26590 57 69 74 68 2a 2c 20 75 38 29 3b 0a 23 65 6e 64  With*, u8);.#end
265a0 69 66 0a 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  if...void sqlite
265b0 33 53 65 74 53 74 72 69 6e 67 28 63 68 61 72 20  3SetString(char 
265c0 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 63 6f  **, sqlite3*, co
265d0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
265e0 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
265f0 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
26600 68 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64  har*, ...);.void
26610 20 73 71 6c 69 74 65 33 44 65 71 75 6f 74 65 28   sqlite3Dequote(
26620 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
26630 69 74 65 33 54 6f 6b 65 6e 49 6e 69 74 28 54 6f  ite3TokenInit(To
26640 6b 65 6e 2a 2c 63 68 61 72 2a 29 3b 0a 69 6e 74  ken*,char*);.int
26650 20 73 71 6c 69 74 65 33 4b 65 79 77 6f 72 64 43   sqlite3KeywordC
26660 6f 64 65 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ode(const unsign
26670 65 64 20 63 68 61 72 2a 2c 20 69 6e 74 29 3b 0a  ed char*, int);.
26680 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 50 61  int sqlite3RunPa
26690 72 73 65 72 28 50 61 72 73 65 2a 2c 20 63 6f 6e  rser(Parse*, con
266a0 73 74 20 63 68 61 72 2a 2c 20 63 68 61 72 20 2a  st char*, char *
266b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
266c0 46 69 6e 69 73 68 43 6f 64 69 6e 67 28 50 61 72  FinishCoding(Par
266d0 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
266e0 33 47 65 74 54 65 6d 70 52 65 67 28 50 61 72 73  3GetTempReg(Pars
266f0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
26700 33 52 65 6c 65 61 73 65 54 65 6d 70 52 65 67 28  3ReleaseTempReg(
26710 50 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 69 6e 74  Parse*,int);.int
26720 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70 52   sqlite3GetTempR
26730 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 29  ange(Parse*,int)
26740 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65  ;.void sqlite3Re
26750 6c 65 61 73 65 54 65 6d 70 52 61 6e 67 65 28 50  leaseTempRange(P
26760 61 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a  arse*,int,int);.
26770 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 65 61  void sqlite3Clea
26780 72 54 65 6d 70 52 65 67 43 61 63 68 65 28 50 61  rTempRegCache(Pa
26790 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  rse*);.#ifdef SQ
267a0 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
267b0 71 6c 69 74 65 33 4e 6f 54 65 6d 70 73 49 6e 52  qlite3NoTempsInR
267c0 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e 74 2c  ange(Parse*,int,
267d0 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 45 78 70  int);.#endif.Exp
267e0 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41 6c  r *sqlite3ExprAl
267f0 6c 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  loc(sqlite3*,int
26800 2c 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 69 6e  ,const Token*,in
26810 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
26820 33 45 78 70 72 28 73 71 6c 69 74 65 33 2a 2c 69  3Expr(sqlite3*,i
26830 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
26840 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26850 72 41 74 74 61 63 68 53 75 62 74 72 65 65 73 28  rAttachSubtrees(
26860 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 45  sqlite3*,Expr*,E
26870 78 70 72 2a 2c 45 78 70 72 2a 29 3b 0a 45 78 70  xpr*,Expr*);.Exp
26880 72 20 2a 73 71 6c 69 74 65 33 50 45 78 70 72 28  r *sqlite3PExpr(
26890 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 45 78 70  Parse*, int, Exp
268a0 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64  r*, Expr*);.void
268b0 20 73 71 6c 69 74 65 33 50 45 78 70 72 41 64 64   sqlite3PExprAdd
268c0 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 20 45  Select(Parse*, E
268d0 78 70 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  xpr*, Select*);.
268e0 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
268f0 72 41 6e 64 28 73 71 6c 69 74 65 33 2a 2c 45 78  rAnd(sqlite3*,Ex
26900 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 45 78 70  pr*, Expr*);.Exp
26910 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 46 75  r *sqlite3ExprFu
26920 6e 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 45 78  nction(Parse*,Ex
26930 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29  prList*, Token*)
26940 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78  ;.void sqlite3Ex
26950 70 72 41 73 73 69 67 6e 56 61 72 4e 75 6d 62 65  prAssignVarNumbe
26960 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  r(Parse*, Expr*,
26970 20 75 33 32 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u32);.void sqli
26980 74 65 33 45 78 70 72 44 65 6c 65 74 65 28 73 71  te3ExprDelete(sq
26990 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29 3b 0a  lite3*, Expr*);.
269a0 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65  ExprList *sqlite
269b0 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64 28  3ExprListAppend(
269c0 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a  Parse*,ExprList*
269d0 2c 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73  ,Expr*);.ExprLis
269e0 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69  t *sqlite3ExprLi
269f0 73 74 41 70 70 65 6e 64 56 65 63 74 6f 72 28 50  stAppendVector(P
26a00 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
26a10 49 64 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b 0a  IdList*,Expr*);.
26a20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26a30 4c 69 73 74 53 65 74 53 6f 72 74 4f 72 64 65 72  ListSetSortOrder
26a40 28 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b  (ExprList*,int);
26a50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26a60 72 4c 69 73 74 53 65 74 4e 61 6d 65 28 50 61 72  rListSetName(Par
26a70 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 54 6f  se*,ExprList*,To
26a80 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  ken*,int);.void 
26a90 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
26aa0 65 74 53 70 61 6e 28 50 61 72 73 65 2a 2c 45 78  etSpan(Parse*,Ex
26ab0 70 72 4c 69 73 74 2a 2c 45 78 70 72 53 70 61 6e  prList*,ExprSpan
26ac0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26ad0 45 78 70 72 4c 69 73 74 44 65 6c 65 74 65 28 73  ExprListDelete(s
26ae0 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 4c 69 73  qlite3*, ExprLis
26af0 74 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  t*);.u32 sqlite3
26b00 45 78 70 72 4c 69 73 74 46 6c 61 67 73 28 63 6f  ExprListFlags(co
26b10 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nst ExprList*);.
26b20 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 69 74 28  int sqlite3Init(
26b30 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2a  sqlite3*, char**
26b40 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e  );.int sqlite3In
26b50 69 74 43 61 6c 6c 62 61 63 6b 28 76 6f 69 64 2a  itCallback(void*
26b60 2c 20 69 6e 74 2c 20 63 68 61 72 2a 2a 2c 20 63  , int, char**, c
26b70 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
26b80 69 74 65 33 50 72 61 67 6d 61 28 50 61 72 73 65  ite3Pragma(Parse
26b90 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c  *,Token*,Token*,
26ba0 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 23 69 66  Token*,int);.#if
26bb0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
26bc0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4d 6f  _VIRTUALTABLE.Mo
26bd0 64 75 6c 65 20 2a 73 71 6c 69 74 65 33 50 72 61  dule *sqlite3Pra
26be0 67 6d 61 56 74 61 62 52 65 67 69 73 74 65 72 28  gmaVtabRegister(
26bf0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
26c00 68 61 72 20 2a 7a 4e 61 6d 65 29 3b 0a 23 65 6e  har *zName);.#en
26c10 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  dif.void sqlite3
26c20 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73 4f  ResetAllSchemasO
26c30 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 71 6c 69  fConnection(sqli
26c40 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
26c50 74 65 33 52 65 73 65 74 4f 6e 65 53 63 68 65 6d  te3ResetOneSchem
26c60 61 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  a(sqlite3*,int);
26c70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 6c  .void sqlite3Col
26c80 6c 61 70 73 65 44 61 74 61 62 61 73 65 41 72 72  lapseDatabaseArr
26c90 61 79 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  ay(sqlite3*);.vo
26ca0 69 64 20 73 71 6c 69 74 65 33 43 6f 6d 6d 69 74  id sqlite3Commit
26cb0 49 6e 74 65 72 6e 61 6c 43 68 61 6e 67 65 73 28  InternalChanges(
26cc0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
26cd0 73 71 6c 69 74 65 33 44 65 6c 65 74 65 43 6f 6c  sqlite3DeleteCol
26ce0 75 6d 6e 4e 61 6d 65 73 28 73 71 6c 69 74 65 33  umnNames(sqlite3
26cf0 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73  *,Table*);.int s
26d00 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 73 46 72 6f  qlite3ColumnsFro
26d10 6d 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a  mExprList(Parse*
26d20 2c 45 78 70 72 4c 69 73 74 2a 2c 69 31 36 2a 2c  ,ExprList*,i16*,
26d30 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76 6f 69 64 20  Column**);.void 
26d40 73 71 6c 69 74 65 33 53 65 6c 65 63 74 41 64 64  sqlite3SelectAdd
26d50 43 6f 6c 75 6d 6e 54 79 70 65 41 6e 64 43 6f 6c  ColumnTypeAndCol
26d60 6c 61 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61  lation(Parse*,Ta
26d70 62 6c 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 54  ble*,Select*);.T
26d80 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 52 65 73  able *sqlite3Res
26d90 75 6c 74 53 65 74 4f 66 53 65 6c 65 63 74 28 50  ultSetOfSelect(P
26da0 61 72 73 65 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a  arse*,Select*);.
26db0 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70 65 6e  void sqlite3Open
26dc0 4d 61 73 74 65 72 54 61 62 6c 65 28 50 61 72 73  MasterTable(Pars
26dd0 65 20 2a 2c 20 69 6e 74 29 3b 0a 49 6e 64 65 78  e *, int);.Index
26de0 20 2a 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79   *sqlite3Primary
26df0 4b 65 79 49 6e 64 65 78 28 54 61 62 6c 65 2a 29  KeyIndex(Table*)
26e00 3b 0a 69 31 36 20 73 71 6c 69 74 65 33 43 6f 6c  ;.i16 sqlite3Col
26e10 75 6d 6e 4f 66 49 6e 64 65 78 28 49 6e 64 65 78  umnOfIndex(Index
26e20 2a 2c 20 69 31 36 29 3b 0a 76 6f 69 64 20 73 71  *, i16);.void sq
26e30 6c 69 74 65 33 53 74 61 72 74 54 61 62 6c 65 28  lite3StartTable(
26e40 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
26e50 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ken*,int,int,int
26e60 2c 69 6e 74 29 3b 0a 23 69 66 20 53 51 4c 49 54  ,int);.#if SQLIT
26e70 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
26e80 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f 69 64 20 73  COLUMNS.  void s
26e90 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f 70  qlite3ColumnProp
26ea0 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28 54  ertiesFromName(T
26eb0 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d 6e 2a 29 3b  able*, Column*);
26ec0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
26ed0 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 50 72 6f  sqlite3ColumnPro
26ee0 70 65 72 74 69 65 73 46 72 6f 6d 4e 61 6d 65 28  pertiesFromName(
26ef0 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  T,C) /* no-op */
26f00 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c  .#endif.void sql
26f10 69 74 65 33 41 64 64 43 6f 6c 75 6d 6e 28 50 61  ite3AddColumn(Pa
26f20 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
26f30 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
26f40 33 41 64 64 4e 6f 74 4e 75 6c 6c 28 50 61 72 73  3AddNotNull(Pars
26f50 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
26f60 71 6c 69 74 65 33 41 64 64 50 72 69 6d 61 72 79  qlite3AddPrimary
26f70 4b 65 79 28 50 61 72 73 65 2a 2c 20 45 78 70 72  Key(Parse*, Expr
26f80 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  List*, int, int,
26f90 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26fa0 74 65 33 41 64 64 43 68 65 63 6b 43 6f 6e 73 74  te3AddCheckConst
26fb0 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20 45 78  raint(Parse*, Ex
26fc0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
26fd0 65 33 41 64 64 44 65 66 61 75 6c 74 56 61 6c 75  e3AddDefaultValu
26fe0 65 28 50 61 72 73 65 2a 2c 45 78 70 72 53 70 61  e(Parse*,ExprSpa
26ff0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
27000 33 41 64 64 43 6f 6c 6c 61 74 65 54 79 70 65 28  3AddCollateType(
27010 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  Parse*, Token*);
27020 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e 64  .void sqlite3End
27030 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b  Table(Parse*,Tok
27040 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75 38 2c 53 65  en*,Token*,u8,Se
27050 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  lect*);.int sqli
27060 74 65 33 50 61 72 73 65 55 72 69 28 63 6f 6e 73  te3ParseUri(cons
27070 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
27080 61 72 2a 2c 75 6e 73 69 67 6e 65 64 20 69 6e 74  ar*,unsigned int
27090 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  *,.             
270a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 76         sqlite3_v
270b0 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c 63 68 61 72  fs**,char**,char
270c0 20 2a 2a 29 3b 0a 42 74 72 65 65 20 2a 73 71 6c   **);.Btree *sql
270d0 69 74 65 33 44 62 4e 61 6d 65 54 6f 42 74 72 65  ite3DbNameToBtre
270e0 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  e(sqlite3*,const
270f0 20 63 68 61 72 2a 29 3b 0a 0a 23 69 66 64 65 66   char*);..#ifdef
27100 20 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42   SQLITE_UNTESTAB
27110 4c 45 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  LE.# define sqli
27120 74 65 33 46 61 75 6c 74 53 69 6d 28 58 29 20 53  te3FaultSim(X) S
27130 51 4c 49 54 45 5f 4f 4b 0a 23 65 6c 73 65 0a 20  QLITE_OK.#else. 
27140 20 69 6e 74 20 73 71 6c 69 74 65 33 46 61 75 6c   int sqlite3Faul
27150 74 53 69 6d 28 69 6e 74 29 3b 0a 23 65 6e 64 69  tSim(int);.#endi
27160 66 0a 0a 42 69 74 76 65 63 20 2a 73 71 6c 69 74  f..Bitvec *sqlit
27170 65 33 42 69 74 76 65 63 43 72 65 61 74 65 28 75  e3BitvecCreate(u
27180 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  32);.int sqlite3
27190 42 69 74 76 65 63 54 65 73 74 28 42 69 74 76 65  BitvecTest(Bitve
271a0 63 2a 2c 20 75 33 32 29 3b 0a 69 6e 74 20 73 71  c*, u32);.int sq
271b0 6c 69 74 65 33 42 69 74 76 65 63 54 65 73 74 4e  lite3BitvecTestN
271c0 6f 74 4e 75 6c 6c 28 42 69 74 76 65 63 2a 2c 20  otNull(Bitvec*, 
271d0 75 33 32 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  u32);.int sqlite
271e0 33 42 69 74 76 65 63 53 65 74 28 42 69 74 76 65  3BitvecSet(Bitve
271f0 63 2a 2c 20 75 33 32 29 3b 0a 76 6f 69 64 20 73  c*, u32);.void s
27200 71 6c 69 74 65 33 42 69 74 76 65 63 43 6c 65 61  qlite3BitvecClea
27210 72 28 42 69 74 76 65 63 2a 2c 20 75 33 32 2c 20  r(Bitvec*, u32, 
27220 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  void*);.void sql
27230 69 74 65 33 42 69 74 76 65 63 44 65 73 74 72 6f  ite3BitvecDestro
27240 79 28 42 69 74 76 65 63 2a 29 3b 0a 75 33 32 20  y(Bitvec*);.u32 
27250 73 71 6c 69 74 65 33 42 69 74 76 65 63 53 69 7a  sqlite3BitvecSiz
27260 65 28 42 69 74 76 65 63 2a 29 3b 0a 23 69 66 6e  e(Bitvec*);.#ifn
27270 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
27280 54 41 42 4c 45 0a 69 6e 74 20 73 71 6c 69 74 65  TABLE.int sqlite
27290 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
272a0 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
272b0 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
272c0 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
272d0 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
272e0 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
272f0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
27300 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
27310 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
27320 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
27330 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
27340 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
27350 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
27360 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
27370 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
27380 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
27390 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
273a0 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
273b0 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
273c0 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
273d0 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
273e0 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
273f0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
27400 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
27410 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
27420 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
27430 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
27440 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
27450 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
27460 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
27470 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
27480 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
27490 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
274a0 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
274b0 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
274c0 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
274d0 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
274e0 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
274f0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
27500 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
27510 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
27520 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
27530 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
27540 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
27550 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
27560 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Table*);.#ifndef
27570 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
27580 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
27590 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
275a0 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
275b0 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
275c0 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
275d0 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
275e0 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
275f0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
27600 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
27610 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
27620 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
27630 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
27640 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
27650 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
27660 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
27670 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
27680 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
27690 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
276a0 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
276b0 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
276c0 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
276d0 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49  pend(sqlite3*, I
276e0 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
276f0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
27700 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
27710 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
27720 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
27730 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c  cListEnlarge(sql
27740 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
27750 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
27760 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
27770 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
27780 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  3*, SrcList*, To
27790 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
277a0 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
277b0 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
277c0 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
277d0 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
277e0 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
277f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27800 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
27810 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
27820 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
27830 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
27840 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
27850 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
27860 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
27870 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e  qlite3SrcListFun
27880 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72  cArgs(Parse*, Sr
27890 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
278a0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
278b0 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
278c0 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
278d0 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
278e0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
278f0 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
27900 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
27910 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
27920 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
27930 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
27940 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
27950 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
27960 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
27970 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
27980 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
27990 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
279a0 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61  x *sqlite3Alloca
279b0 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71  teIndexObject(sq
279c0 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63  lite3*,i16,int,c
279d0 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
279e0 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
279f0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
27a00 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
27a10 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
27a20 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
27a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
27a40 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  pr*, int, int, u
27a50 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
27a60 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
27a70 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
27a80 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
27a90 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
27aa0 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
27ab0 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
27ac0 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
27ad0 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
27ae0 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
27af0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
27b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27b10 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
27b20 75 33 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u32,Expr*,Expr*)
27b30 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
27b40 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
27b50 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
27b60 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
27b70 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
27b80 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
27b90 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
27ba0 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
27bb0 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
27bc0 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
27bd0 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
27be0 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
27bf0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
27c00 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
27c10 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
27c20 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
27c30 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
27c40 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
27c50 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
27c60 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
27c70 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
27c80 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
27c90 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
27ca0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
27cb0 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
27cc0 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
27cd0 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
27ce0 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
27cf0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
27d00 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
27d10 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
27d20 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
27d30 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
27d40 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
27d50 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
27d60 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
27d70 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f  (WhereInfo*);.Lo
27d80 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72  gEst sqlite3Wher
27d90 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
27da0 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
27db0 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
27dc0 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
27dd0 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
27de0 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
27df0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
27e00 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65  sqlite3WhereOrde
27e10 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65  redInnerLoop(Whe
27e20 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
27e30 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
27e40 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
27e50 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
27e60 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
27e70 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
27e80 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
27e90 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
27ea0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27eb0 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
27ec0 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
27ed0 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
27ee0 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20  OFF      0      
27ef0 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50    /* Use of ONEP
27f00 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  ASS not allowed 
27f10 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
27f20 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20  SS_SINGLE   1   
27f30 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
27f40 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67  valid for a sing
27f50 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f  le row update */
27f60 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
27f70 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20  _MULTI    2     
27f80 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73     /* ONEPASS is
27f90 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69   valid for multi
27fa0 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64  ple rows */.void
27fb0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27fc0 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
27fd0 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
27fe0 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
27ff0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
28000 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
28010 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
28020 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
28030 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28040 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f  rCodeGetColumnTo
28050 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  Reg(Parse*, Tabl
28060 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
28070 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28080 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
28090 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
280a0 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
280b0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
280c0 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
280d0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
280e0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
280f0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
28100 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
28110 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
28120 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
28130 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
28140 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
28150 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b  achePop(Parse*);
28160 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28170 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
28180 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
28190 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
281a0 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
281b0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
281c0 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
281d0 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
281e0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
281f0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
28200 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28210 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
28220 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61  3ExprCodeCopy(Pa
28230 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
28240 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28250 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
28260 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
28270 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28280 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69 74  e3ExprCodeAtInit
28290 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
282a0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
282b0 33 45 78 70 72 43 6f 64 65 54 65 6d 70 28 50 61  3ExprCodeTemp(Pa
282c0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
282d0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
282e0 78 70 72 43 6f 64 65 54 61 72 67 65 74 28 50 61  xprCodeTarget(Pa
282f0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
28300 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
28310 78 70 72 43 6f 64 65 41 6e 64 43 61 63 68 65 28  xprCodeAndCache(
28320 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
28330 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28340 45 78 70 72 43 6f 64 65 45 78 70 72 4c 69 73 74  ExprCodeExprList
28350 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73  (Parse*, ExprLis
28360 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38  t*, int, int, u8
28370 29 3b 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  );.#define SQLIT
28380 45 5f 45 43 45 4c 5f 44 55 50 20 20 20 20 20 20  E_ECEL_DUP      
28390 30 78 30 31 20 20 2f 2a 20 44 65 65 70 2c 20 6e  0x01  /* Deep, n
283a0 6f 74 20 73 68 61 6c 6c 6f 77 20 63 6f 70 69 65  ot shallow copie
283b0 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
283c0 49 54 45 5f 45 43 45 4c 5f 46 41 43 54 4f 52 20  ITE_ECEL_FACTOR 
283d0 20 20 30 78 30 32 20 20 2f 2a 20 46 61 63 74 6f    0x02  /* Facto
283e0 72 20 6f 75 74 20 63 6f 6e 73 74 61 6e 74 20 74  r out constant t
283f0 65 72 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  erms */.#define 
28400 53 51 4c 49 54 45 5f 45 43 45 4c 5f 52 45 46 20  SQLITE_ECEL_REF 
28410 20 20 20 20 20 30 78 30 34 20 20 2f 2a 20 55 73       0x04  /* Us
28420 65 20 45 78 70 72 4c 69 73 74 2e 75 2e 78 2e 69  e ExprList.u.x.i
28430 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a 23 64  OrderByCol */.#d
28440 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45  efine SQLITE_ECE
28450 4c 5f 4f 4d 49 54 52 45 46 20 20 30 78 30 38 20  L_OMITREF  0x08 
28460 20 2f 2a 20 4f 6d 69 74 20 69 66 20 45 78 70 72   /* Omit if Expr
28470 4c 69 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42  List.u.x.iOrderB
28480 79 43 6f 6c 20 2a 2f 0a 76 6f 69 64 20 73 71 6c  yCol */.void sql
28490 69 74 65 33 45 78 70 72 49 66 54 72 75 65 28 50  ite3ExprIfTrue(P
284a0 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  arse*, Expr*, in
284b0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
284c0 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c 73 65  lite3ExprIfFalse
284d0 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
284e0 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
284f0 73 71 6c 69 74 65 33 45 78 70 72 49 66 46 61 6c  sqlite3ExprIfFal
28500 73 65 44 75 70 28 50 61 72 73 65 2a 2c 20 45 78  seDup(Parse*, Ex
28510 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  pr*, int, int);.
28520 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 46 69  Table *sqlite3Fi
28530 6e 64 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a  ndTable(sqlite3*
28540 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f  ,const char*, co
28550 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 64 65 66  nst char*);.#def
28560 69 6e 65 20 4c 4f 43 41 54 45 5f 56 49 45 57 20  ine LOCATE_VIEW 
28570 20 20 20 30 78 30 31 0a 23 64 65 66 69 6e 65 20     0x01.#define 
28580 4c 4f 43 41 54 45 5f 4e 4f 45 52 52 20 20 20 30  LOCATE_NOERR   0
28590 78 30 32 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74  x02.Table *sqlit
285a0 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 50 61  e3LocateTable(Pa
285b0 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73 2c 63  rse*,u32 flags,c
285c0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
285d0 74 20 63 68 61 72 2a 29 3b 0a 54 61 62 6c 65 20  t char*);.Table 
285e0 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65 54 61  *sqlite3LocateTa
285f0 62 6c 65 49 74 65 6d 28 50 61 72 73 65 2a 2c 75  bleItem(Parse*,u
28600 33 32 20 66 6c 61 67 73 2c 73 74 72 75 63 74 20  32 flags,struct 
28610 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b  SrcList_item *);
28620 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 46  .Index *sqlite3F
28630 69 6e 64 49 6e 64 65 78 28 73 71 6c 69 74 65 33  indIndex(sqlite3
28640 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  *,const char*, c
28650 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
28660 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b 41  d sqlite3UnlinkA
28670 6e 64 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  ndDeleteTable(sq
28680 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
28690 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
286a0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
286b0 6c 65 74 65 49 6e 64 65 78 28 73 71 6c 69 74 65  leteIndex(sqlite
286c0 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  3*,int,const cha
286d0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
286e0 33 56 61 63 75 75 6d 28 50 61 72 73 65 2a 2c 54  3Vacuum(Parse*,T
286f0 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  oken*);.int sqli
28700 74 65 33 52 75 6e 56 61 63 75 75 6d 28 63 68 61  te3RunVacuum(cha
28710 72 2a 2a 2c 20 73 71 6c 69 74 65 33 2a 2c 20 69  r**, sqlite3*, i
28720 6e 74 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  nt);.char *sqlit
28730 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28  e3NameFromToken(
28740 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a  sqlite3*, Token*
28750 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28760 70 72 43 6f 6d 70 61 72 65 28 50 61 72 73 65 2a  prCompare(Parse*
28770 2c 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69  ,Expr*, Expr*, i
28780 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
28790 45 78 70 72 43 6f 6d 70 61 72 65 53 6b 69 70 28  ExprCompareSkip(
287a0 45 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e  Expr*, Expr*, in
287b0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
287c0 78 70 72 4c 69 73 74 43 6f 6d 70 61 72 65 28 45  xprListCompare(E
287d0 78 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69  xprList*, ExprLi
287e0 73 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  st*, int);.int s
287f0 71 6c 69 74 65 33 45 78 70 72 49 6d 70 6c 69 65  qlite3ExprImplie
28800 73 45 78 70 72 28 50 61 72 73 65 2a 2c 45 78 70  sExpr(Parse*,Exp
28810 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b  r*, Expr*, int);
28820 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28830 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67 61 74  rAnalyzeAggregat
28840 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c  es(NameContext*,
28850 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
28860 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
28870 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f 6e 74  AggList(NameCont
28880 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a 29 3b  ext*,ExprList*);
28890 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
288a0 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78 28 45  CoveredByIndex(E
288b0 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72 2c 20  xpr*, int iCur, 
288c0 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a 69 6e  Index *pIdx);.in
288d0 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74 69 6f  t sqlite3Functio
288e0 6e 55 73 65 73 54 68 69 73 53 72 63 28 45 78 70  nUsesThisSrc(Exp
288f0 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 56  r*, SrcList*);.V
28900 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65 74 56  dbe *sqlite3GetV
28910 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23 69 66  dbe(Parse*);.#if
28920 6e 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45  ndef SQLITE_UNTE
28930 53 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69  STABLE.void sqli
28940 74 65 33 50 72 6e 67 53 61 76 65 53 74 61 74 65  te3PrngSaveState
28950 28 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c  (void);.void sql
28960 69 74 65 33 50 72 6e 67 52 65 73 74 6f 72 65 53  ite3PrngRestoreS
28970 74 61 74 65 28 76 6f 69 64 29 3b 0a 23 65 6e 64  tate(void);.#end
28980 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
28990 6f 6c 6c 62 61 63 6b 41 6c 6c 28 73 71 6c 69 74  ollbackAll(sqlit
289a0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
289b0 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
289c0 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 69  Schema(Parse*, i
289d0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
289e0 33 43 6f 64 65 56 65 72 69 66 79 4e 61 6d 65 64  3CodeVerifyNamed
289f0 53 63 68 65 6d 61 28 50 61 72 73 65 2a 2c 20 63  Schema(Parse*, c
28a00 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 29 3b  onst char *zDb);
28a10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65 67  .void sqlite3Beg
28a20 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61  inTransaction(Pa
28a30 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  rse*, int);.void
28a40 20 73 71 6c 69 74 65 33 45 6e 64 54 72 61 6e 73   sqlite3EndTrans
28a50 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 69 6e  action(Parse*,in
28a60 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28a70 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65 2a  Savepoint(Parse*
28a80 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  , int, Token*);.
28a90 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
28aa0 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c 69  eSavepoints(sqli
28ab0 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  te3 *);.void sql
28ac0 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41 6e  ite3LeaveMutexAn
28ad0 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71 6c  dCloseZombie(sql
28ae0 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
28af0 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61 6e  te3ExprIsConstan
28b00 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71  t(Expr*);.int sq
28b10 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74  lite3ExprIsConst
28b20 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72 2a  antNotJoin(Expr*
28b30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28b40 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46 75  prIsConstantOrFu
28b50 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75 38  nction(Expr*, u8
28b60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28b70 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 47 72  prIsConstantOrGr
28b80 6f 75 70 42 79 28 50 61 72 73 65 2a 2c 20 45 78  oupBy(Parse*, Ex
28b90 70 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b  pr*, ExprList*);
28ba0 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
28bb0 49 73 54 61 62 6c 65 43 6f 6e 73 74 61 6e 74 28  IsTableConstant(
28bc0 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23 69 66 64  Expr*,int);.#ifd
28bd0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
28be0 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53 0a 69 6e  _CURSOR_HINTS.in
28bf0 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6e  t sqlite3ExprCon
28c00 74 61 69 6e 73 53 75 62 71 75 65 72 79 28 45 78  tainsSubquery(Ex
28c10 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  pr*);.#endif.int
28c20 20 73 71 6c 69 74 65 33 45 78 70 72 49 73 49 6e   sqlite3ExprIsIn
28c30 74 65 67 65 72 28 45 78 70 72 2a 2c 20 69 6e 74  teger(Expr*, int
28c40 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
28c50 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28 63 6f 6e  xprCanBeNull(con
28c60 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  st Expr*);.int s
28c70 71 6c 69 74 65 33 45 78 70 72 4e 65 65 64 73 4e  qlite3ExprNeedsN
28c80 6f 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  oAffinityChange(
28c90 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20 63 68 61  const Expr*, cha
28ca0 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  r);.int sqlite3I
28cb0 73 52 6f 77 69 64 28 63 6f 6e 73 74 20 63 68 61  sRowid(const cha
28cc0 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28cd0 33 47 65 6e 65 72 61 74 65 52 6f 77 44 65 6c 65  3GenerateRowDele
28ce0 74 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 54  te(.    Parse*,T
28cf0 61 62 6c 65 2a 2c 54 72 69 67 67 65 72 2a 2c 69  able*,Trigger*,i
28d00 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31 36 2c 75  nt,int,int,i16,u
28d10 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b 0a 76 6f  8,u8,u8,int);.vo
28d20 69 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  id sqlite3Genera
28d30 74 65 52 6f 77 49 6e 64 65 78 44 65 6c 65 74 65  teRowIndexDelete
28d40 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c  (Parse*, Table*,
28d50 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c   int, int, int*,
28d60 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
28d70 65 33 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b  e3GenerateIndexK
28d80 65 79 28 50 61 72 73 65 2a 2c 20 49 6e 64 65 78  ey(Parse*, Index
28d90 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74  *, int, int, int
28da0 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a 2c 69 6e  , int*,Index*,in
28db0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28dc0 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61  ResolvePartIdxLa
28dd0 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e 74 29 3b  bel(Parse*,int);
28de0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
28df0 65 72 61 74 65 43 6f 6e 73 74 72 61 69 6e 74 43  erateConstraintC
28e00 68 65 63 6b 73 28 50 61 72 73 65 2a 2c 54 61 62  hecks(Parse*,Tab
28e10 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74  le*,int*,int,int
28e20 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20 20 20 20  ,int,int,.      
28e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75                 u
28e50 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e  8,u8,int,int*,in
28e60 74 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  t*);.#ifdef SQLI
28e70 54 45 5f 45 4e 41 42 4c 45 5f 4e 55 4c 4c 5f 54  TE_ENABLE_NULL_T
28e80 52 49 4d 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  RIM.  void sqlit
28e90 65 33 53 65 74 4d 61 6b 65 52 65 63 6f 72 64 50  e3SetMakeRecordP
28ea0 35 28 56 64 62 65 2a 2c 54 61 62 6c 65 2a 29 3b  5(Vdbe*,Table*);
28eb0 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
28ec0 73 71 6c 69 74 65 33 53 65 74 4d 61 6b 65 52 65  sqlite3SetMakeRe
28ed0 63 6f 72 64 50 35 28 41 2c 42 29 0a 23 65 6e 64  cordP5(A,B).#end
28ee0 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  if.void sqlite3C
28ef0 6f 6d 70 6c 65 74 65 49 6e 73 65 72 74 69 6f 6e  ompleteInsertion
28f00 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69  (Parse*,Table*,i
28f10 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2a 2c  nt,int,int,int*,
28f20 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 69 6e  int,int,int);.in
28f30 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62  t sqlite3OpenTab
28f40 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 50 61 72  leAndIndices(Par
28f50 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
28f60 2c 20 75 38 2c 20 69 6e 74 2c 20 75 38 2a 2c 20  , u8, int, u8*, 
28f70 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a 76 6f 69  int*, int*);.voi
28f80 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72  d sqlite3BeginWr
28f90 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 50 61 72  iteOperation(Par
28fa0 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
28fb0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 75 6c 74  void sqlite3Mult
28fc0 69 57 72 69 74 65 28 50 61 72 73 65 2a 29 3b 0a  iWrite(Parse*);.
28fd0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 79 41  void sqlite3MayA
28fe0 62 6f 72 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  bort(Parse*);.vo
28ff0 69 64 20 73 71 6c 69 74 65 33 48 61 6c 74 43 6f  id sqlite3HaltCo
29000 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c  nstraint(Parse*,
29010 20 69 6e 74 2c 20 69 6e 74 2c 20 63 68 61 72 2a   int, int, char*
29020 2c 20 69 38 2c 20 75 38 29 3b 0a 76 6f 69 64 20  , i8, u8);.void 
29030 73 71 6c 69 74 65 33 55 6e 69 71 75 65 43 6f 6e  sqlite3UniqueCon
29040 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a 2c 20  straint(Parse*, 
29050 69 6e 74 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  int, Index*);.vo
29060 69 64 20 73 71 6c 69 74 65 33 52 6f 77 69 64 43  id sqlite3RowidC
29070 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
29080 2c 20 69 6e 74 2c 20 54 61 62 6c 65 2a 29 3b 0a  , int, Table*);.
29090 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70  Expr *sqlite3Exp
290a0 72 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 45 78  rDup(sqlite3*,Ex
290b0 70 72 2a 2c 69 6e 74 29 3b 0a 45 78 70 72 4c 69  pr*,int);.ExprLi
290c0 73 74 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c  st *sqlite3ExprL
290d0 69 73 74 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  istDup(sqlite3*,
290e0 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a  ExprList*,int);.
290f0 53 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  SrcList *sqlite3
29100 53 72 63 4c 69 73 74 44 75 70 28 73 71 6c 69 74  SrcListDup(sqlit
29110 65 33 2a 2c 53 72 63 4c 69 73 74 2a 2c 69 6e 74  e3*,SrcList*,int
29120 29 3b 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74  );.IdList *sqlit
29130 65 33 49 64 4c 69 73 74 44 75 70 28 73 71 6c 69  e3IdListDup(sqli
29140 74 65 33 2a 2c 49 64 4c 69 73 74 2a 29 3b 0a 53  te3*,IdList*);.S
29150 65 6c 65 63 74 20 2a 73 71 6c 69 74 65 33 53 65  elect *sqlite3Se
29160 6c 65 63 74 44 75 70 28 73 71 6c 69 74 65 33 2a  lectDup(sqlite3*
29170 2c 53 65 6c 65 63 74 2a 2c 69 6e 74 29 3b 0a 23  ,Select*,int);.#
29180 69 66 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45  if SELECTTRACE_E
29190 4e 41 42 4c 45 44 0a 76 6f 69 64 20 73 71 6c 69  NABLED.void sqli
291a0 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65  te3SelectSetName
291b0 28 53 65 6c 65 63 74 2a 2c 63 6f 6e 73 74 20 63  (Select*,const c
291c0 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
291d0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c  efine sqlite3Sel
291e0 65 63 74 53 65 74 4e 61 6d 65 28 41 2c 42 29 0a  ectSetName(A,B).
291f0 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69  #endif.void sqli
29200 74 65 33 49 6e 73 65 72 74 42 75 69 6c 74 69 6e  te3InsertBuiltin
29210 46 75 6e 63 73 28 46 75 6e 63 44 65 66 2a 2c 69  Funcs(FuncDef*,i
29220 6e 74 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71  nt);.FuncDef *sq
29230 6c 69 74 65 33 46 69 6e 64 46 75 6e 63 74 69 6f  lite3FindFunctio
29240 6e 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  n(sqlite3*,const
29250 20 63 68 61 72 2a 2c 69 6e 74 2c 75 38 2c 75 38   char*,int,u8,u8
29260 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
29270 65 67 69 73 74 65 72 42 75 69 6c 74 69 6e 46 75  egisterBuiltinFu
29280 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76  nctions(void);.v
29290 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73  oid sqlite3Regis
292a0 74 65 72 44 61 74 65 54 69 6d 65 46 75 6e 63 74  terDateTimeFunct
292b0 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
292c0 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
292d0 50 65 72 43 6f 6e 6e 65 63 74 69 6f 6e 42 75 69  PerConnectionBui
292e0 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 73 71  ltinFunctions(sq
292f0 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
29300 69 74 65 33 53 61 66 65 74 79 43 68 65 63 6b 4f  ite3SafetyCheckO
29310 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74  k(sqlite3*);.int
29320 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43 68   sqlite3SafetyCh
29330 65 63 6b 53 69 63 6b 4f 72 4f 6b 28 73 71 6c 69  eckSickOrOk(sqli
29340 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  te3*);.void sqli
29350 74 65 33 43 68 61 6e 67 65 43 6f 6f 6b 69 65 28  te3ChangeCookie(
29360 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 0a 23  Parse*, int);..#
29370 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
29380 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29 20 26 26  TE_OMIT_VIEW) &&
29390 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
293a0 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 76  _OMIT_TRIGGER).v
293b0 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 74 65 72  oid sqlite3Mater
293c0 69 61 6c 69 7a 65 56 69 65 77 28 50 61 72 73 65  ializeView(Parse
293d0 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
293e0 2c 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a  , int);.#endif..
293f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29400 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 76 6f  MIT_TRIGGER.  vo
29410 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 54  id sqlite3BeginT
29420 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
29430 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
29440 2c 69 6e 74 2c 49 64 4c 69 73 74 2a 2c 53 72 63  ,int,IdList*,Src
29450 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
29460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29470 20 20 45 78 70 72 2a 2c 69 6e 74 2c 20 69 6e 74    Expr*,int, int
29480 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29490 33 46 69 6e 69 73 68 54 72 69 67 67 65 72 28 50  3FinishTrigger(P
294a0 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72 53 74  arse*, TriggerSt
294b0 65 70 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 20 20  ep*, Token*);.  
294c0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70  void sqlite3Drop
294d0 54 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20  Trigger(Parse*, 
294e0 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a  SrcList*, int);.
294f0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 72    void sqlite3Dr
29500 6f 70 54 72 69 67 67 65 72 50 74 72 28 50 61 72  opTriggerPtr(Par
29510 73 65 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a  se*, Trigger*);.
29520 20 20 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74    Trigger *sqlit
29530 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74 28  e3TriggersExist(
29540 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 2a 2c  Parse *, Table*,
29550 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c   int, ExprList*,
29560 20 69 6e 74 20 2a 70 4d 61 73 6b 29 3b 0a 20 20   int *pMask);.  
29570 54 72 69 67 67 65 72 20 2a 73 71 6c 69 74 65 33  Trigger *sqlite3
29580 54 72 69 67 67 65 72 4c 69 73 74 28 50 61 72 73  TriggerList(Pars
29590 65 20 2a 2c 20 54 61 62 6c 65 20 2a 29 3b 0a 20  e *, Table *);. 
295a0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64   void sqlite3Cod
295b0 65 52 6f 77 54 72 69 67 67 65 72 28 50 61 72 73  eRowTrigger(Pars
295c0 65 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20 69  e*, Trigger *, i
295d0 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  nt, ExprList*, i
295e0 6e 74 2c 20 54 61 62 6c 65 20 2a 2c 0a 20 20 20  nt, Table *,.   
295f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29600 20 20 20 20 20 20 20 20 20 69 6e 74 2c 20 69 6e           int, in
29610 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
29620 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72  sqlite3CodeRowTr
29630 69 67 67 65 72 44 69 72 65 63 74 28 50 61 72 73  iggerDirect(Pars
29640 65 20 2a 2c 20 54 72 69 67 67 65 72 20 2a 2c 20  e *, Trigger *, 
29650 54 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e  Table *, int, in
29660 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20  t, int);.  void 
29670 73 71 6c 69 74 65 56 69 65 77 54 72 69 67 67 65  sqliteViewTrigge
29680 72 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  rs(Parse*, Table
29690 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 45  *, Expr*, int, E
296a0 78 70 72 4c 69 73 74 2a 29 3b 0a 20 20 76 6f 69  xprList*);.  voi
296b0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
296c0 72 69 67 67 65 72 53 74 65 70 28 73 71 6c 69 74  riggerStep(sqlit
296d0 65 33 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70  e3*, TriggerStep
296e0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
296f0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
29700 72 53 65 6c 65 63 74 53 74 65 70 28 73 71 6c 69  rSelectStep(sqli
29710 74 65 33 2a 2c 53 65 6c 65 63 74 2a 29 3b 0a 20  te3*,Select*);. 
29720 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71   TriggerStep *sq
29730 6c 69 74 65 33 54 72 69 67 67 65 72 49 6e 73 65  lite3TriggerInse
29740 72 74 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c  rtStep(sqlite3*,
29750 54 6f 6b 65 6e 2a 2c 20 49 64 4c 69 73 74 2a 2c  Token*, IdList*,
29760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
29770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29780 20 20 20 20 20 20 20 20 20 53 65 6c 65 63 74 2a           Select*
29790 2c 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53  ,u8);.  TriggerS
297a0 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67  tep *sqlite3Trig
297b0 67 65 72 55 70 64 61 74 65 53 74 65 70 28 73 71  gerUpdateStep(sq
297c0 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 45 78  lite3*,Token*,Ex
297d0 70 72 4c 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20  prList*, Expr*, 
297e0 75 38 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74  u8);.  TriggerSt
297f0 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67  ep *sqlite3Trigg
29800 65 72 44 65 6c 65 74 65 53 74 65 70 28 73 71 6c  erDeleteStep(sql
29810 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 45 78  ite3*,Token*, Ex
29820 70 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  pr*);.  void sql
29830 69 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65  ite3DeleteTrigge
29840 72 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67  r(sqlite3*, Trig
29850 67 65 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ger*);.  void sq
29860 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
29870 6c 65 74 65 54 72 69 67 67 65 72 28 73 71 6c 69  leteTrigger(sqli
29880 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63  te3*,int,const c
29890 68 61 72 2a 29 3b 0a 20 20 75 33 32 20 73 71 6c  har*);.  u32 sql
298a0 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61  ite3TriggerColma
298b0 73 6b 28 50 61 72 73 65 2a 2c 54 72 69 67 67 65  sk(Parse*,Trigge
298c0 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69 6e 74  r*,ExprList*,int
298d0 2c 69 6e 74 2c 54 61 62 6c 65 2a 2c 69 6e 74 29  ,int,Table*,int)
298e0 3b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ;.# define sqlit
298f0 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28  e3ParseToplevel(
29900 70 29 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76  p) ((p)->pToplev
29910 65 6c 20 3f 20 28 70 29 2d 3e 70 54 6f 70 6c 65  el ? (p)->pTople
29920 76 65 6c 20 3a 20 28 70 29 29 0a 23 20 64 65 66  vel : (p)).# def
29930 69 6e 65 20 73 71 6c 69 74 65 33 49 73 54 6f 70  ine sqlite3IsTop
29940 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70  level(p) ((p)->p
29950 54 6f 70 6c 65 76 65 6c 3d 3d 30 29 0a 23 65 6c  Toplevel==0).#el
29960 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
29970 74 65 33 54 72 69 67 67 65 72 73 45 78 69 73 74  te3TriggersExist
29980 28 42 2c 43 2c 44 2c 45 2c 46 29 20 30 0a 23 20  (B,C,D,E,F) 0.# 
29990 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 44 65  define sqlite3De
299a0 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 29  leteTrigger(A,B)
299b0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
299c0 33 44 72 6f 70 54 72 69 67 67 65 72 50 74 72 28  3DropTriggerPtr(
299d0 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73 71  A,B).# define sq
299e0 6c 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65  lite3UnlinkAndDe
299f0 6c 65 74 65 54 72 69 67 67 65 72 28 41 2c 42 2c  leteTrigger(A,B,
29a00 43 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  C).# define sqli
29a10 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65  te3CodeRowTrigge
29a20 72 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 2c  r(A,B,C,D,E,F,G,
29a30 48 2c 49 29 0a 23 20 64 65 66 69 6e 65 20 73 71  H,I).# define sq
29a40 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
29a50 67 65 72 44 69 72 65 63 74 28 41 2c 42 2c 43 2c  gerDirect(A,B,C,
29a60 44 2c 45 2c 46 29 0a 23 20 64 65 66 69 6e 65 20  D,E,F).# define 
29a70 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69  sqlite3TriggerLi
29a80 73 74 28 58 2c 20 59 29 20 30 0a 23 20 64 65 66  st(X, Y) 0.# def
29a90 69 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65  ine sqlite3Parse
29aa0 54 6f 70 6c 65 76 65 6c 28 70 29 20 70 0a 23 20  Toplevel(p) p.# 
29ab0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
29ac0 54 6f 70 6c 65 76 65 6c 28 70 29 20 31 0a 23 20  Toplevel(p) 1.# 
29ad0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72  define sqlite3Tr
29ae0 69 67 67 65 72 43 6f 6c 6d 61 73 6b 28 41 2c 42  iggerColmask(A,B
29af0 2c 43 2c 44 2c 45 2c 46 2c 47 29 20 30 0a 23 65  ,C,D,E,F,G) 0.#e
29b00 6e 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65  ndif..int sqlite
29b10 33 4a 6f 69 6e 54 79 70 65 28 50 61 72 73 65 2a  3JoinType(Parse*
29b20 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
29b30 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
29b40 73 71 6c 69 74 65 33 43 72 65 61 74 65 46 6f 72  sqlite3CreateFor
29b50 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
29b60 45 78 70 72 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e  ExprList*, Token
29b70 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
29b80 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
29b90 44 65 66 65 72 46 6f 72 65 69 67 6e 4b 65 79 28  DeferForeignKey(
29ba0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 69  Parse*, int);.#i
29bb0 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
29bc0 54 5f 41 55 54 48 4f 52 49 5a 41 54 49 4f 4e 0a  T_AUTHORIZATION.
29bd0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75    void sqlite3Au
29be0 74 68 52 65 61 64 28 50 61 72 73 65 2a 2c 45 78  thRead(Parse*,Ex
29bf0 70 72 2a 2c 53 63 68 65 6d 61 2a 2c 53 72 63 4c  pr*,Schema*,SrcL
29c00 69 73 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c  ist*);.  int sql
29c10 69 74 65 33 41 75 74 68 43 68 65 63 6b 28 50 61  ite3AuthCheck(Pa
29c20 72 73 65 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20  rse*,int, const 
29c30 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
29c40 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
29c50 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
29c60 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73 68 28  AuthContextPush(
29c70 50 61 72 73 65 2a 2c 20 41 75 74 68 43 6f 6e 74  Parse*, AuthCont
29c80 65 78 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ext*, const char
29c90 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
29ca0 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 6f 70  e3AuthContextPop
29cb0 28 41 75 74 68 43 6f 6e 74 65 78 74 2a 29 3b 0a  (AuthContext*);.
29cc0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74    int sqlite3Aut
29cd0 68 52 65 61 64 43 6f 6c 28 50 61 72 73 65 2a 2c  hReadCol(Parse*,
29ce0 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 63   const char *, c
29cf0 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 69 6e 74  onst char *, int
29d00 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
29d10 65 20 73 71 6c 69 74 65 33 41 75 74 68 52 65 61  e sqlite3AuthRea
29d20 64 28 61 2c 62 2c 63 2c 64 29 0a 23 20 64 65 66  d(a,b,c,d).# def
29d30 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68 43  ine sqlite3AuthC
29d40 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 29 20  heck(a,b,c,d,e) 
29d50 20 20 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 64     SQLITE_OK.# d
29d60 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74  efine sqlite3Aut
29d70 68 43 6f 6e 74 65 78 74 50 75 73 68 28 61 2c 62  hContextPush(a,b
29d80 2c 63 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c  ,c).# define sql
29d90 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50  ite3AuthContextP
29da0 6f 70 28 61 29 20 20 28 28 76 6f 69 64 29 28 61  op(a)  ((void)(a
29db0 29 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  )).#endif.void s
29dc0 71 6c 69 74 65 33 41 74 74 61 63 68 28 50 61 72  qlite3Attach(Par
29dd0 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  se*, Expr*, Expr
29de0 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
29df0 73 71 6c 69 74 65 33 44 65 74 61 63 68 28 50 61  sqlite3Detach(Pa
29e00 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
29e10 69 64 20 73 71 6c 69 74 65 33 46 69 78 49 6e 69  id sqlite3FixIni
29e20 74 28 44 62 46 69 78 65 72 2a 2c 20 50 61 72 73  t(DbFixer*, Pars
29e30 65 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63  e*, int, const c
29e40 68 61 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65  har*, const Toke
29e50 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
29e60 46 69 78 53 72 63 4c 69 73 74 28 44 62 46 69 78  FixSrcList(DbFix
29e70 65 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  er*, SrcList*);.
29e80 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 53 65  int sqlite3FixSe
29e90 6c 65 63 74 28 44 62 46 69 78 65 72 2a 2c 20 53  lect(DbFixer*, S
29ea0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
29eb0 69 74 65 33 46 69 78 45 78 70 72 28 44 62 46 69  ite3FixExpr(DbFi
29ec0 78 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e  xer*, Expr*);.in
29ed0 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
29ee0 4c 69 73 74 28 44 62 46 69 78 65 72 2a 2c 20 45  List(DbFixer*, E
29ef0 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
29f00 71 6c 69 74 65 33 46 69 78 54 72 69 67 67 65 72  qlite3FixTrigger
29f10 53 74 65 70 28 44 62 46 69 78 65 72 2a 2c 20 54  Step(DbFixer*, T
29f20 72 69 67 67 65 72 53 74 65 70 2a 29 3b 0a 69 6e  riggerStep*);.in
29f30 74 20 73 71 6c 69 74 65 33 41 74 6f 46 28 63 6f  t sqlite3AtoF(co
29f40 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20 64 6f 75  nst char *z, dou
29f50 62 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 29 3b 0a  ble*, int, u8);.
29f60 69 6e 74 20 73 71 6c 69 74 65 33 47 65 74 49 6e  int sqlite3GetIn
29f70 74 33 32 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  t32(const char *
29f80 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
29f90 69 74 65 33 41 74 6f 69 28 63 6f 6e 73 74 20 63  ite3Atoi(const c
29fa0 68 61 72 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53  har*);.#ifndef S
29fb0 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
29fc0 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31  .int sqlite3Utf1
29fd0 36 42 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76  6ByteLen(const v
29fe0 6f 69 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20  oid *pData, int 
29ff0 6e 43 68 61 72 29 3b 0a 23 65 6e 64 69 66 0a 69  nChar);.#endif.i
2a000 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 43 68  nt sqlite3Utf8Ch
2a010 61 72 4c 65 6e 28 63 6f 6e 73 74 20 63 68 61 72  arLen(const char
2a020 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 42 79   *pData, int nBy
2a030 74 65 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  te);.u32 sqlite3
2a040 55 74 66 38 52 65 61 64 28 63 6f 6e 73 74 20 75  Utf8Read(const u
2a050 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  8**);.LogEst sql
2a060 69 74 65 33 4c 6f 67 45 73 74 28 75 36 34 29 3b  ite3LogEst(u64);
2a070 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
2a080 6f 67 45 73 74 41 64 64 28 4c 6f 67 45 73 74 2c  ogEstAdd(LogEst,
2a090 4c 6f 67 45 73 74 29 3b 0a 23 69 66 6e 64 65 66  LogEst);.#ifndef
2a0a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52   SQLITE_OMIT_VIR
2a0b0 54 55 41 4c 54 41 42 4c 45 0a 4c 6f 67 45 73 74  TUALTABLE.LogEst
2a0c0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 46 72   sqlite3LogEstFr
2a0d0 6f 6d 44 6f 75 62 6c 65 28 64 6f 75 62 6c 65 29  omDouble(double)
2a0e0 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
2a0f0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a100 4c 45 5f 53 54 4d 54 5f 53 43 41 4e 53 54 41 54  LE_STMT_SCANSTAT
2a110 55 53 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66  US) || \.    def
2a120 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
2a130 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
2a140 34 29 20 7c 7c 20 5c 0a 20 20 20 20 64 65 66 69  4) || \.    defi
2a150 6e 65 64 28 53 51 4c 49 54 45 5f 45 58 50 4c 41  ned(SQLITE_EXPLA
2a160 49 4e 5f 45 53 54 49 4d 41 54 45 44 5f 52 4f 57  IN_ESTIMATED_ROW
2a170 53 29 0a 75 36 34 20 73 71 6c 69 74 65 33 4c 6f  S).u64 sqlite3Lo
2a180 67 45 73 74 54 6f 49 6e 74 28 4c 6f 67 45 73 74  gEstToInt(LogEst
2a190 29 3b 0a 23 65 6e 64 69 66 0a 56 4c 69 73 74 20  );.#endif.VList 
2a1a0 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 41 64 64  *sqlite3VListAdd
2a1b0 28 73 71 6c 69 74 65 33 2a 2c 56 4c 69 73 74 2a  (sqlite3*,VList*
2a1c0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2a1d0 2c 69 6e 74 29 3b 0a 63 6f 6e 73 74 20 63 68 61  ,int);.const cha
2a1e0 72 20 2a 73 71 6c 69 74 65 33 56 4c 69 73 74 4e  r *sqlite3VListN
2a1f0 75 6d 54 6f 4e 61 6d 65 28 56 4c 69 73 74 2a 2c  umToName(VList*,
2a200 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2a210 33 56 4c 69 73 74 4e 61 6d 65 54 6f 4e 75 6d 28  3VListNameToNum(
2a220 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68 61  VList*,const cha
2a230 72 2a 2c 69 6e 74 29 3b 0a 0a 2f 2a 0a 2a 2a 20  r*,int);../*.** 
2a240 52 6f 75 74 69 6e 65 73 20 74 6f 20 72 65 61 64  Routines to read
2a250 20 61 6e 64 20 77 72 69 74 65 20 76 61 72 69 61   and write varia
2a260 62 6c 65 2d 6c 65 6e 67 74 68 20 69 6e 74 65 67  ble-length integ
2a270 65 72 73 2e 20 20 54 68 65 73 65 20 75 73 65 64  ers.  These used
2a280 20 74 6f 0a 2a 2a 20 62 65 20 64 65 66 69 6e 65   to.** be define
2a290 64 20 6c 6f 63 61 6c 6c 79 2c 20 62 75 74 20 6e  d locally, but n
2a2a0 6f 77 20 77 65 20 75 73 65 20 74 68 65 20 76 61  ow we use the va
2a2b0 72 69 6e 74 20 72 6f 75 74 69 6e 65 73 20 69 6e  rint routines in
2a2c0 20 74 68 65 20 75 74 69 6c 2e 63 0a 2a 2a 20 66   the util.c.** f
2a2d0 69 6c 65 2e 0a 2a 2f 0a 69 6e 74 20 73 71 6c 69  ile..*/.int sqli
2a2e0 74 65 33 50 75 74 56 61 72 69 6e 74 28 75 6e 73  te3PutVarint(uns
2a2f0 69 67 6e 65 64 20 63 68 61 72 2a 2c 20 75 36 34  igned char*, u64
2a300 29 3b 0a 75 38 20 73 71 6c 69 74 65 33 47 65 74  );.u8 sqlite3Get
2a310 56 61 72 69 6e 74 28 63 6f 6e 73 74 20 75 6e 73  Varint(const uns
2a320 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 75 36  igned char *, u6
2a330 34 20 2a 29 3b 0a 75 38 20 73 71 6c 69 74 65 33  4 *);.u8 sqlite3
2a340 47 65 74 56 61 72 69 6e 74 33 32 28 63 6f 6e 73  GetVarint32(cons
2a350 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2a360 2a 2c 20 75 33 32 20 2a 29 3b 0a 69 6e 74 20 73  *, u32 *);.int s
2a370 71 6c 69 74 65 33 56 61 72 69 6e 74 4c 65 6e 28  qlite3VarintLen(
2a380 75 36 34 20 76 29 3b 0a 0a 2f 2a 0a 2a 2a 20 54  u64 v);../*.** T
2a390 68 65 20 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 69  he common case i
2a3a0 73 20 66 6f 72 20 61 20 76 61 72 69 6e 74 20 74  s for a varint t
2a3b0 6f 20 62 65 20 61 20 73 69 6e 67 6c 65 20 62 79  o be a single by
2a3c0 74 65 2e 20 20 54 68 65 79 20 66 6f 6c 6c 6f 77  te.  They follow
2a3d0 69 6e 67 0a 2a 2a 20 6d 61 63 72 6f 73 20 68 61  ing.** macros ha
2a3e0 6e 64 6c 65 20 74 68 65 20 63 6f 6d 6d 6f 6e 20  ndle the common 
2a3f0 63 61 73 65 20 77 69 74 68 6f 75 74 20 61 20 70  case without a p
2a400 72 6f 63 65 64 75 72 65 20 63 61 6c 6c 2c 20 62  rocedure call, b
2a410 75 74 20 74 68 65 6e 20 63 61 6c 6c 0a 2a 2a 20  ut then call.** 
2a420 74 68 65 20 70 72 6f 63 65 64 75 72 65 20 66 6f  the procedure fo
2a430 72 20 6c 61 72 67 65 72 20 76 61 72 69 6e 74 73  r larger varints
2a440 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 67 65 74  ..*/.#define get
2a450 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c  Varint32(A,B)  \
2a460 0a 20 20 28 75 38 29 28 28 2a 28 41 29 3c 28 75  .  (u8)((*(A)<(u
2a470 38 29 30 78 38 30 29 3f 28 28 42 29 3d 28 75 33  8)0x80)?((B)=(u3
2a480 32 29 2a 28 41 29 29 2c 31 3a 73 71 6c 69 74 65  2)*(A)),1:sqlite
2a490 33 47 65 74 56 61 72 69 6e 74 33 32 28 28 41 29  3GetVarint32((A)
2a4a0 2c 28 75 33 32 20 2a 29 26 28 42 29 29 29 0a 23  ,(u32 *)&(B))).#
2a4b0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2a4c0 33 32 28 41 2c 42 29 20 20 5c 0a 20 20 28 75 38  32(A,B)  \.  (u8
2a4d0 29 28 28 28 75 33 32 29 28 42 29 3c 28 75 33 32  )(((u32)(B)<(u32
2a4e0 29 30 78 38 30 29 3f 28 2a 28 41 29 3d 28 75 6e  )0x80)?(*(A)=(un
2a4f0 73 69 67 6e 65 64 20 63 68 61 72 29 28 42 29 29  signed char)(B))
2a500 2c 31 3a 5c 0a 20 20 73 71 6c 69 74 65 33 50 75  ,1:\.  sqlite3Pu
2a510 74 56 61 72 69 6e 74 28 28 41 29 2c 28 42 29 29  tVarint((A),(B))
2a520 29 0a 23 64 65 66 69 6e 65 20 67 65 74 56 61 72  ).#define getVar
2a530 69 6e 74 20 20 20 20 73 71 6c 69 74 65 33 47 65  int    sqlite3Ge
2a540 74 56 61 72 69 6e 74 0a 23 64 65 66 69 6e 65 20  tVarint.#define 
2a550 70 75 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c  putVarint    sql
2a560 69 74 65 33 50 75 74 56 61 72 69 6e 74 0a 0a 0a  ite3PutVarint...
2a570 63 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69  const char *sqli
2a580 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79  te3IndexAffinity
2a590 53 74 72 28 73 71 6c 69 74 65 33 2a 2c 20 49 6e  Str(sqlite3*, In
2a5a0 64 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  dex*);.void sqli
2a5b0 74 65 33 54 61 62 6c 65 41 66 66 69 6e 69 74 79  te3TableAffinity
2a5c0 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
2a5d0 69 6e 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  int);.char sqlit
2a5e0 65 33 43 6f 6d 70 61 72 65 41 66 66 69 6e 69 74  e3CompareAffinit
2a5f0 79 28 45 78 70 72 20 2a 70 45 78 70 72 2c 20 63  y(Expr *pExpr, c
2a600 68 61 72 20 61 66 66 32 29 3b 0a 69 6e 74 20 73  har aff2);.int s
2a610 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e  qlite3IndexAffin
2a620 69 74 79 4f 6b 28 45 78 70 72 20 2a 70 45 78 70  ityOk(Expr *pExp
2a630 72 2c 20 63 68 61 72 20 69 64 78 5f 61 66 66 69  r, char idx_affi
2a640 6e 69 74 79 29 3b 0a 63 68 61 72 20 73 71 6c 69  nity);.char sqli
2a650 74 65 33 54 61 62 6c 65 43 6f 6c 75 6d 6e 41 66  te3TableColumnAf
2a660 66 69 6e 69 74 79 28 54 61 62 6c 65 2a 2c 69 6e  finity(Table*,in
2a670 74 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65 33  t);.char sqlite3
2a680 45 78 70 72 41 66 66 69 6e 69 74 79 28 45 78 70  ExprAffinity(Exp
2a690 72 20 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73  r *pExpr);.int s
2a6a0 71 6c 69 74 65 33 41 74 6f 69 36 34 28 63 6f 6e  qlite3Atoi64(con
2a6b0 73 74 20 63 68 61 72 2a 2c 20 69 36 34 2a 2c 20  st char*, i64*, 
2a6c0 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71  int, u8);.int sq
2a6d0 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49  lite3DecOrHexToI
2a6e0 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  64(const char*, 
2a6f0 69 36 34 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  i64*);.void sqli
2a700 74 65 33 45 72 72 6f 72 57 69 74 68 4d 73 67 28  te3ErrorWithMsg(
2a710 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63  sqlite3*, int, c
2a720 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e 2e 29 3b  onst char*,...);
2a730 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72  .void sqlite3Err
2a740 6f 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  or(sqlite3*,int)
2a750 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 79  ;.void sqlite3Sy
2a760 73 74 65 6d 45 72 72 6f 72 28 73 71 6c 69 74 65  stemError(sqlite
2a770 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73  3*,int);.void *s
2a780 71 6c 69 74 65 33 48 65 78 54 6f 42 6c 6f 62 28  qlite3HexToBlob(
2a790 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20  sqlite3*, const 
2a7a0 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 3b  char *z, int n);
2a7b0 0a 75 38 20 73 71 6c 69 74 65 33 48 65 78 54 6f  .u8 sqlite3HexTo
2a7c0 49 6e 74 28 69 6e 74 20 68 29 3b 0a 69 6e 74 20  Int(int h);.int 
2a7d0 73 71 6c 69 74 65 33 54 77 6f 50 61 72 74 4e 61  sqlite3TwoPartNa
2a7e0 6d 65 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  me(Parse *, Toke
2a7f0 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f  n *, Token *, To
2a800 6b 65 6e 20 2a 2a 29 3b 0a 0a 23 69 66 20 64 65  ken **);..#if de
2a810 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4e 45 45  fined(SQLITE_NEE
2a820 44 5f 45 52 52 5f 4e 41 4d 45 29 0a 63 6f 6e 73  D_ERR_NAME).cons
2a830 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2a840 72 72 4e 61 6d 65 28 69 6e 74 29 3b 0a 23 65 6e  rrName(int);.#en
2a850 64 69 66 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  dif..const char 
2a860 2a 73 71 6c 69 74 65 33 45 72 72 53 74 72 28 69  *sqlite3ErrStr(i
2a870 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a880 52 65 61 64 53 63 68 65 6d 61 28 50 61 72 73 65  ReadSchema(Parse
2a890 20 2a 70 50 61 72 73 65 29 3b 0a 43 6f 6c 6c 53   *pParse);.CollS
2a8a0 65 71 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 43  eq *sqlite3FindC
2a8b0 6f 6c 6c 53 65 71 28 73 71 6c 69 74 65 33 2a 2c  ollSeq(sqlite3*,
2a8c0 75 38 20 65 6e 63 2c 20 63 6f 6e 73 74 20 63 68  u8 enc, const ch
2a8d0 61 72 2a 2c 69 6e 74 29 3b 0a 43 6f 6c 6c 53 65  ar*,int);.CollSe
2a8e0 71 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  q *sqlite3Locate
2a8f0 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70  CollSeq(Parse *p
2a900 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61  Parse, const cha
2a910 72 2a 7a 4e 61 6d 65 29 3b 0a 43 6f 6c 6c 53 65  r*zName);.CollSe
2a920 71 20 2a 73 71 6c 69 74 65 33 45 78 70 72 43 6f  q *sqlite3ExprCo
2a930 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 70 50 61  llSeq(Parse *pPa
2a940 72 73 65 2c 20 45 78 70 72 20 2a 70 45 78 70 72  rse, Expr *pExpr
2a950 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2a960 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65 54 6f  ExprAddCollateTo
2a970 6b 65 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  ken(Parse *pPars
2a980 65 2c 20 45 78 70 72 2a 2c 20 63 6f 6e 73 74 20  e, Expr*, const 
2a990 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a 45 78  Token*, int);.Ex
2a9a0 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 41  pr *sqlite3ExprA
2a9b0 64 64 43 6f 6c 6c 61 74 65 53 74 72 69 6e 67 28  ddCollateString(
2a9c0 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 63 6f 6e  Parse*,Expr*,con
2a9d0 73 74 20 63 68 61 72 2a 29 3b 0a 45 78 70 72 20  st char*);.Expr 
2a9e0 2a 73 71 6c 69 74 65 33 45 78 70 72 53 6b 69 70  *sqlite3ExprSkip
2a9f0 43 6f 6c 6c 61 74 65 28 45 78 70 72 2a 29 3b 0a  Collate(Expr*);.
2aa00 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b  int sqlite3Check
2aa10 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a 2c  CollSeq(Parse *,
2aa20 20 43 6f 6c 6c 53 65 71 20 2a 29 3b 0a 69 6e 74   CollSeq *);.int
2aa30 20 73 71 6c 69 74 65 33 43 68 65 63 6b 4f 62 6a   sqlite3CheckObj
2aa40 65 63 74 4e 61 6d 65 28 50 61 72 73 65 20 2a 2c  ectName(Parse *,
2aa50 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a   const char *);.
2aa60 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64 62 65  void sqlite3Vdbe
2aa70 53 65 74 43 68 61 6e 67 65 73 28 73 71 6c 69 74  SetChanges(sqlit
2aa80 65 33 20 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  e3 *, int);.int 
2aa90 73 71 6c 69 74 65 33 41 64 64 49 6e 74 36 34 28  sqlite3AddInt64(
2aaa0 69 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73  i64*,i64);.int s
2aab0 71 6c 69 74 65 33 53 75 62 49 6e 74 36 34 28 69  qlite3SubInt64(i
2aac0 36 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71  64*,i64);.int sq
2aad0 6c 69 74 65 33 4d 75 6c 49 6e 74 36 34 28 69 36  lite3MulInt64(i6
2aae0 34 2a 2c 69 36 34 29 3b 0a 69 6e 74 20 73 71 6c  4*,i64);.int sql
2aaf0 69 74 65 33 41 62 73 49 6e 74 33 32 28 69 6e 74  ite3AbsInt32(int
2ab00 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  );.#ifdef SQLITE
2ab10 5f 45 4e 41 42 4c 45 5f 38 5f 33 5f 4e 41 4d 45  _ENABLE_8_3_NAME
2ab20 53 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46 69  S.void sqlite3Fi
2ab30 6c 65 53 75 66 66 69 78 33 28 63 6f 6e 73 74 20  leSuffix3(const 
2ab40 63 68 61 72 2a 2c 20 63 68 61 72 2a 29 3b 0a 23  char*, char*);.#
2ab50 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2ab60 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2ab70 28 58 2c 59 29 0a 23 65 6e 64 69 66 0a 75 38 20  (X,Y).#endif.u8 
2ab80 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
2ab90 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  n(const char *z,
2aba0 75 38 29 3b 0a 0a 63 6f 6e 73 74 20 76 6f 69 64  u8);..const void
2abb0 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 54 65   *sqlite3ValueTe
2abc0 78 74 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  xt(sqlite3_value
2abd0 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  *, u8);.int sqli
2abe0 74 65 33 56 61 6c 75 65 42 79 74 65 73 28 73 71  te3ValueBytes(sq
2abf0 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38  lite3_value*, u8
2ac00 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2ac10 61 6c 75 65 53 65 74 53 74 72 28 73 71 6c 69 74  alueSetStr(sqlit
2ac20 65 33 5f 76 61 6c 75 65 2a 2c 20 69 6e 74 2c 20  e3_value*, int, 
2ac30 63 6f 6e 73 74 20 76 6f 69 64 20 2a 2c 75 38 2c  const void *,u8,
2ac40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ac50 20 20 20 20 20 20 20 20 20 76 6f 69 64 28 2a 29           void(*)
2ac60 28 76 6f 69 64 2a 29 29 3b 0a 76 6f 69 64 20 73  (void*));.void s
2ac70 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 4e 75  qlite3ValueSetNu
2ac80 6c 6c 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ll(sqlite3_value
2ac90 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2aca0 56 61 6c 75 65 46 72 65 65 28 73 71 6c 69 74 65  ValueFree(sqlite
2acb0 33 5f 76 61 6c 75 65 2a 29 3b 0a 73 71 6c 69 74  3_value*);.sqlit
2acc0 65 33 5f 76 61 6c 75 65 20 2a 73 71 6c 69 74 65  e3_value *sqlite
2acd0 33 56 61 6c 75 65 4e 65 77 28 73 71 6c 69 74 65  3ValueNew(sqlite
2ace0 33 20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  3 *);.#ifndef SQ
2acf0 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
2ad00 63 68 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66  char *sqlite3Utf
2ad10 31 36 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c  16to8(sqlite3 *,
2ad20 20 63 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e   const void*, in
2ad30 74 2c 20 75 38 29 3b 0a 23 65 6e 64 69 66 0a 69  t, u8);.#endif.i
2ad40 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46  nt sqlite3ValueF
2ad50 72 6f 6d 45 78 70 72 28 73 71 6c 69 74 65 33 20  romExpr(sqlite3 
2ad60 2a 2c 20 45 78 70 72 20 2a 2c 20 75 38 2c 20 75  *, Expr *, u8, u
2ad70 38 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  8, sqlite3_value
2ad80 20 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74   **);.void sqlit
2ad90 65 33 56 61 6c 75 65 41 70 70 6c 79 41 66 66 69  e3ValueApplyAffi
2ada0 6e 69 74 79 28 73 71 6c 69 74 65 33 5f 76 61 6c  nity(sqlite3_val
2adb0 75 65 20 2a 2c 20 75 38 2c 20 75 38 29 3b 0a 23  ue *, u8, u8);.#
2adc0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 41 4d  ifndef SQLITE_AM
2add0 41 4c 47 41 4d 41 54 49 4f 4e 0a 65 78 74 65 72  ALGAMATION.exter
2ade0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2adf0 20 63 68 61 72 20 73 71 6c 69 74 65 33 4f 70 63   char sqlite3Opc
2ae00 6f 64 65 50 72 6f 70 65 72 74 79 5b 5d 3b 0a 65  odeProperty[];.e
2ae10 78 74 65 72 6e 20 63 6f 6e 73 74 20 63 68 61 72  xtern const char
2ae20 20 73 71 6c 69 74 65 33 53 74 72 42 49 4e 41 52   sqlite3StrBINAR
2ae30 59 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  Y[];.extern cons
2ae40 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
2ae50 73 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f  sqlite3UpperToLo
2ae60 77 65 72 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f  wer[];.extern co
2ae70 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
2ae80 72 20 73 71 6c 69 74 65 33 43 74 79 70 65 4d 61  r sqlite3CtypeMa
2ae90 70 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  p[];.extern cons
2aea0 74 20 54 6f 6b 65 6e 20 73 71 6c 69 74 65 33 49  t Token sqlite3I
2aeb0 6e 74 54 6f 6b 65 6e 73 5b 5d 3b 0a 65 78 74 65  ntTokens[];.exte
2aec0 72 6e 20 53 51 4c 49 54 45 5f 57 53 44 20 73 74  rn SQLITE_WSD st
2aed0 72 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66  ruct Sqlite3Conf
2aee0 69 67 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  ig sqlite3Config
2aef0 3b 0a 65 78 74 65 72 6e 20 46 75 6e 63 44 65 66  ;.extern FuncDef
2af00 48 61 73 68 20 73 71 6c 69 74 65 33 42 75 69 6c  Hash sqlite3Buil
2af10 74 69 6e 46 75 6e 63 74 69 6f 6e 73 3b 0a 23 69  tinFunctions;.#i
2af20 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
2af30 54 5f 57 53 44 0a 65 78 74 65 72 6e 20 69 6e 74  T_WSD.extern int
2af40 20 73 71 6c 69 74 65 33 50 65 6e 64 69 6e 67 42   sqlite3PendingB
2af50 79 74 65 3b 0a 23 65 6e 64 69 66 0a 23 65 6e 64  yte;.#endif.#end
2af60 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  if.void sqlite3R
2af70 6f 6f 74 50 61 67 65 4d 6f 76 65 64 28 73 71 6c  ootPageMoved(sql
2af80 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c  ite3*, int, int,
2af90 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
2afa0 74 65 33 52 65 69 6e 64 65 78 28 50 61 72 73 65  te3Reindex(Parse
2afb0 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2afc0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2afd0 41 6c 74 65 72 46 75 6e 63 74 69 6f 6e 73 28 76  AlterFunctions(v
2afe0 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  oid);.void sqlit
2aff0 65 33 41 6c 74 65 72 52 65 6e 61 6d 65 54 61 62  e3AlterRenameTab
2b000 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  le(Parse*, SrcLi
2b010 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  st*, Token*);.in
2b020 74 20 73 71 6c 69 74 65 33 47 65 74 54 6f 6b 65  t sqlite3GetToke
2b030 6e 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n(const unsigned
2b040 20 63 68 61 72 20 2a 2c 20 69 6e 74 20 2a 29 3b   char *, int *);
2b050 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4e 65 73  .void sqlite3Nes
2b060 74 65 64 50 61 72 73 65 28 50 61 72 73 65 2a 2c  tedParse(Parse*,
2b070 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
2b080 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
2b090 45 78 70 69 72 65 50 72 65 70 61 72 65 64 53 74  ExpirePreparedSt
2b0a0 61 74 65 6d 65 6e 74 73 28 73 71 6c 69 74 65 33  atements(sqlite3
2b0b0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2b0c0 6f 64 65 53 75 62 73 65 6c 65 63 74 28 50 61 72  odeSubselect(Par
2b0d0 73 65 2a 2c 20 45 78 70 72 20 2a 2c 20 69 6e 74  se*, Expr *, int
2b0e0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
2b0f0 69 74 65 33 53 65 6c 65 63 74 50 72 65 70 28 50  ite3SelectPrep(P
2b100 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
2b110 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
2b120 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
2b130 74 57 72 6f 6e 67 4e 75 6d 54 65 72 6d 73 45 72  tWrongNumTermsEr
2b140 72 6f 72 28 50 61 72 73 65 20 2a 70 50 61 72 73  ror(Parse *pPars
2b150 65 2c 20 53 65 6c 65 63 74 20 2a 70 29 3b 0a 69  e, Select *p);.i
2b160 6e 74 20 73 71 6c 69 74 65 33 4d 61 74 63 68 53  nt sqlite3MatchS
2b170 70 61 6e 4e 61 6d 65 28 63 6f 6e 73 74 20 63 68  panName(const ch
2b180 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2b190 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
2b1a0 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
2b1b0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 45   sqlite3ResolveE
2b1c0 78 70 72 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e  xprNames(NameCon
2b1d0 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  text*, Expr*);.i
2b1e0 6e 74 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  nt sqlite3Resolv
2b1f0 65 45 78 70 72 4c 69 73 74 4e 61 6d 65 73 28 4e  eExprListNames(N
2b200 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2b210 72 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71  rList*);.void sq
2b220 6c 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 65  lite3ResolveSele
2b230 63 74 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 20  ctNames(Parse*, 
2b240 53 65 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e  Select*, NameCon
2b250 74 65 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  text*);.void sql
2b260 69 74 65 33 52 65 73 6f 6c 76 65 53 65 6c 66 52  ite3ResolveSelfR
2b270 65 66 65 72 65 6e 63 65 28 50 61 72 73 65 2a 2c  eference(Parse*,
2b280 54 61 62 6c 65 2a 2c 69 6e 74 2c 45 78 70 72 2a  Table*,int,Expr*
2b290 2c 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74  ,ExprList*);.int
2b2a0 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 4f   sqlite3ResolveO
2b2b0 72 64 65 72 47 72 6f 75 70 42 79 28 50 61 72 73  rderGroupBy(Pars
2b2c0 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78 70  e*, Select*, Exp
2b2d0 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68  rList*, const ch
2b2e0 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2b2f0 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28  e3ColumnDefault(
2b300 56 64 62 65 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  Vdbe *, Table *,
2b310 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2b320 20 73 71 6c 69 74 65 33 41 6c 74 65 72 46 69 6e   sqlite3AlterFin
2b330 69 73 68 41 64 64 43 6f 6c 75 6d 6e 28 50 61 72  ishAddColumn(Par
2b340 73 65 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29 3b 0a  se *, Token *);.
2b350 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c 74 65  void sqlite3Alte
2b360 72 42 65 67 69 6e 41 64 64 43 6f 6c 75 6d 6e 28  rBeginAddColumn(
2b370 50 61 72 73 65 20 2a 2c 20 53 72 63 4c 69 73 74  Parse *, SrcList
2b380 20 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71   *);.CollSeq *sq
2b390 6c 69 74 65 33 47 65 74 43 6f 6c 6c 53 65 71 28  lite3GetCollSeq(
2b3a0 50 61 72 73 65 2a 2c 20 75 38 2c 20 43 6f 6c 6c  Parse*, u8, Coll
2b3b0 53 65 71 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  Seq *, const cha
2b3c0 72 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  r*);.char sqlite
2b3d0 33 41 66 66 69 6e 69 74 79 54 79 70 65 28 63 6f  3AffinityType(co
2b3e0 6e 73 74 20 63 68 61 72 2a 2c 20 75 38 2a 29 3b  nst char*, u8*);
2b3f0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2b400 6c 79 7a 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b  lyze(Parse*, Tok
2b410 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e  en*, Token*);.in
2b420 74 20 73 71 6c 69 74 65 33 49 6e 76 6f 6b 65 42  t sqlite3InvokeB
2b430 75 73 79 48 61 6e 64 6c 65 72 28 42 75 73 79 48  usyHandler(BusyH
2b440 61 6e 64 6c 65 72 2a 29 3b 0a 69 6e 74 20 73 71  andler*);.int sq
2b450 6c 69 74 65 33 46 69 6e 64 44 62 28 73 71 6c 69  lite3FindDb(sqli
2b460 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69  te3*, Token*);.i
2b470 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44 62  nt sqlite3FindDb
2b480 4e 61 6d 65 28 73 71 6c 69 74 65 33 20 2a 2c 20  Name(sqlite3 *, 
2b490 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
2b4a0 6e 74 20 73 71 6c 69 74 65 33 41 6e 61 6c 79 73  nt sqlite3Analys
2b4b0 69 73 4c 6f 61 64 28 73 71 6c 69 74 65 33 2a 2c  isLoad(sqlite3*,
2b4c0 69 6e 74 20 69 44 42 29 3b 0a 76 6f 69 64 20 73  int iDB);.void s
2b4d0 71 6c 69 74 65 33 44 65 6c 65 74 65 49 6e 64 65  qlite3DeleteInde
2b4e0 78 53 61 6d 70 6c 65 73 28 73 71 6c 69 74 65 33  xSamples(sqlite3
2b4f0 2a 2c 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64 20  *,Index*);.void 
2b500 73 71 6c 69 74 65 33 44 65 66 61 75 6c 74 52 6f  sqlite3DefaultRo
2b510 77 45 73 74 28 49 6e 64 65 78 2a 29 3b 0a 76 6f  wEst(Index*);.vo
2b520 69 64 20 73 71 6c 69 74 65 33 52 65 67 69 73 74  id sqlite3Regist
2b530 65 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28  erLikeFunctions(
2b540 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a  sqlite3*, int);.
2b550 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4c 69 6b  int sqlite3IsLik
2b560 65 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  eFunction(sqlite
2b570 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 2a 2c 63 68  3*,Expr*,int*,ch
2b580 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ar*);.void sqlit
2b590 65 33 53 63 68 65 6d 61 43 6c 65 61 72 28 76 6f  e3SchemaClear(vo
2b5a0 69 64 20 2a 29 3b 0a 53 63 68 65 6d 61 20 2a 73  id *);.Schema *s
2b5b0 71 6c 69 74 65 33 53 63 68 65 6d 61 47 65 74 28  qlite3SchemaGet(
2b5c0 73 71 6c 69 74 65 33 20 2a 2c 20 42 74 72 65 65  sqlite3 *, Btree
2b5d0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2b5e0 53 63 68 65 6d 61 54 6f 49 6e 64 65 78 28 73 71  SchemaToIndex(sq
2b5f0 6c 69 74 65 33 20 2a 64 62 2c 20 53 63 68 65 6d  lite3 *db, Schem
2b600 61 20 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  a *);.KeyInfo *s
2b610 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 41 6c 6c  qlite3KeyInfoAll
2b620 6f 63 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c  oc(sqlite3*,int,
2b630 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
2b640 65 33 4b 65 79 49 6e 66 6f 55 6e 72 65 66 28 4b  e3KeyInfoUnref(K
2b650 65 79 49 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66  eyInfo*);.KeyInf
2b660 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49 6e 66  o *sqlite3KeyInf
2b670 6f 52 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  oRef(KeyInfo*);.
2b680 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2b690 4b 65 79 49 6e 66 6f 4f 66 49 6e 64 65 78 28 50  KeyInfoOfIndex(P
2b6a0 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a  arse*, Index*);.
2b6b0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2b6c0 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4b  BUG.int sqlite3K
2b6d0 65 79 49 6e 66 6f 49 73 57 72 69 74 65 61 62 6c  eyInfoIsWriteabl
2b6e0 65 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a 23 65 6e  e(KeyInfo*);.#en
2b6f0 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  dif.int sqlite3C
2b700 72 65 61 74 65 46 75 6e 63 28 73 71 6c 69 74 65  reateFunc(sqlite
2b710 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  3 *, const char 
2b720 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 76 6f 69  *, int, int, voi
2b730 64 20 2a 2c 0a 20 20 76 6f 69 64 20 28 2a 29 28  d *,.  void (*)(
2b740 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2b750 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c  ,int,sqlite3_val
2b760 75 65 20 2a 2a 29 2c 0a 20 20 76 6f 69 64 20 28  ue **),.  void (
2b770 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65  *)(sqlite3_conte
2b780 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f  xt*,int,sqlite3_
2b790 76 61 6c 75 65 20 2a 2a 29 2c 20 76 6f 69 64 20  value **), void 
2b7a0 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  (*)(sqlite3_cont
2b7b0 65 78 74 2a 29 2c 0a 20 20 46 75 6e 63 44 65 73  ext*),.  FuncDes
2b7c0 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
2b7d0 63 74 6f 72 0a 29 3b 0a 76 6f 69 64 20 73 71 6c  ctor.);.void sql
2b7e0 69 74 65 33 4f 6f 6d 46 61 75 6c 74 28 73 71 6c  ite3OomFault(sql
2b7f0 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ite3*);.void sql
2b800 69 74 65 33 4f 6f 6d 43 6c 65 61 72 28 73 71 6c  ite3OomClear(sql
2b810 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  ite3*);.int sqli
2b820 74 65 33 41 70 69 45 78 69 74 28 73 71 6c 69 74  te3ApiExit(sqlit
2b830 65 33 20 2a 64 62 2c 20 69 6e 74 29 3b 0a 69 6e  e3 *db, int);.in
2b840 74 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  t sqlite3OpenTem
2b850 70 44 61 74 61 62 61 73 65 28 50 61 72 73 65 20  pDatabase(Parse 
2b860 2a 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65  *);..void sqlite
2b870 33 53 74 72 41 63 63 75 6d 49 6e 69 74 28 53 74  3StrAccumInit(St
2b880 72 41 63 63 75 6d 2a 2c 20 73 71 6c 69 74 65 33  rAccum*, sqlite3
2b890 2a 2c 20 63 68 61 72 2a 2c 20 69 6e 74 2c 20 69  *, char*, int, i
2b8a0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
2b8b0 33 53 74 72 41 63 63 75 6d 41 70 70 65 6e 64 28  3StrAccumAppend(
2b8c0 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
2b8d0 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  char*,int);.void
2b8e0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b8f0 41 70 70 65 6e 64 41 6c 6c 28 53 74 72 41 63 63  AppendAll(StrAcc
2b900 75 6d 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  um*,const char*)
2b910 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 70  ;.void sqlite3Ap
2b920 70 65 6e 64 43 68 61 72 28 53 74 72 41 63 63 75  pendChar(StrAccu
2b930 6d 2a 2c 69 6e 74 2c 63 68 61 72 29 3b 0a 63 68  m*,int,char);.ch
2b940 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72 41 63  ar *sqlite3StrAc
2b950 63 75 6d 46 69 6e 69 73 68 28 53 74 72 41 63 63  cumFinish(StrAcc
2b960 75 6d 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  um*);.void sqlit
2b970 65 33 53 74 72 41 63 63 75 6d 52 65 73 65 74 28  e3StrAccumReset(
2b980 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
2b990 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65   sqlite3SelectDe
2b9a0 73 74 49 6e 69 74 28 53 65 6c 65 63 74 44 65 73  stInit(SelectDes
2b9b0 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 45 78 70  t*,int,int);.Exp
2b9c0 72 20 2a 73 71 6c 69 74 65 33 43 72 65 61 74 65  r *sqlite3Create
2b9d0 43 6f 6c 75 6d 6e 45 78 70 72 28 73 71 6c 69 74  ColumnExpr(sqlit
2b9e0 65 33 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  e3 *, SrcList *,
2b9f0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 0a 76 6f 69   int, int);..voi
2ba00 64 20 73 71 6c 69 74 65 33 42 61 63 6b 75 70 52  d sqlite3BackupR
2ba10 65 73 74 61 72 74 28 73 71 6c 69 74 65 33 5f 62  estart(sqlite3_b
2ba20 61 63 6b 75 70 20 2a 29 3b 0a 76 6f 69 64 20 73  ackup *);.void s
2ba30 71 6c 69 74 65 33 42 61 63 6b 75 70 55 70 64 61  qlite3BackupUpda
2ba40 74 65 28 73 71 6c 69 74 65 33 5f 62 61 63 6b 75  te(sqlite3_backu
2ba50 70 20 2a 2c 20 50 67 6e 6f 2c 20 63 6f 6e 73 74  p *, Pgno, const
2ba60 20 75 38 20 2a 29 3b 0a 0a 23 69 66 6e 64 65 66   u8 *);..#ifndef
2ba70 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 55 42   SQLITE_OMIT_SUB
2ba80 51 55 45 52 59 0a 69 6e 74 20 73 71 6c 69 74 65  QUERY.int sqlite
2ba90 33 45 78 70 72 43 68 65 63 6b 49 4e 28 50 61 72  3ExprCheckIN(Par
2baa0 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 23 65 6c  se*, Expr*);.#el
2bab0 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
2bac0 74 65 33 45 78 70 72 43 68 65 63 6b 49 4e 28 78  te3ExprCheckIN(x
2bad0 2c 79 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 65  ,y) SQLITE_OK.#e
2bae0 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2baf0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33  ITE_ENABLE_STAT3
2bb00 5f 4f 52 5f 53 54 41 54 34 0a 76 6f 69 64 20 73  _OR_STAT4.void s
2bb10 71 6c 69 74 65 33 41 6e 61 6c 79 7a 65 46 75 6e  qlite3AnalyzeFun
2bb20 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 69 6e  ctions(void);.in
2bb30 74 20 73 71 6c 69 74 65 33 53 74 61 74 34 50 72  t sqlite3Stat4Pr
2bb40 6f 62 65 53 65 74 56 61 6c 75 65 28 0a 20 20 20  obeSetValue(.   
2bb50 20 50 61 72 73 65 2a 2c 49 6e 64 65 78 2a 2c 55   Parse*,Index*,U
2bb60 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 2a 2a 2c  npackedRecord**,
2bb70 45 78 70 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e  Expr*,int,int,in
2bb80 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
2bb90 53 74 61 74 34 56 61 6c 75 65 46 72 6f 6d 45 78  Stat4ValueFromEx
2bba0 70 72 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  pr(Parse*, Expr*
2bbb0 2c 20 75 38 2c 20 73 71 6c 69 74 65 33 5f 76 61  , u8, sqlite3_va
2bbc0 6c 75 65 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lue**);.void sql
2bbd0 69 74 65 33 53 74 61 74 34 50 72 6f 62 65 46 72  ite3Stat4ProbeFr
2bbe0 65 65 28 55 6e 70 61 63 6b 65 64 52 65 63 6f 72  ee(UnpackedRecor
2bbf0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
2bc00 53 74 61 74 34 43 6f 6c 75 6d 6e 28 73 71 6c 69  Stat4Column(sqli
2bc10 74 65 33 2a 2c 20 63 6f 6e 73 74 20 76 6f 69 64  te3*, const void
2bc20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 73 71 6c  *, int, int, sql
2bc30 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 63  ite3_value**);.c
2bc40 68 61 72 20 73 71 6c 69 74 65 33 49 6e 64 65 78  har sqlite3Index
2bc50 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73  ColumnAffinity(s
2bc60 71 6c 69 74 65 33 2a 2c 20 49 6e 64 65 78 2a 2c  qlite3*, Index*,
2bc70 20 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f   int);.#endif../
2bc80 2a 0a 2a 2a 20 54 68 65 20 69 6e 74 65 72 66 61  *.** The interfa
2bc90 63 65 20 74 6f 20 74 68 65 20 4c 45 4d 4f 4e 2d  ce to the LEMON-
2bca0 67 65 6e 65 72 61 74 65 64 20 70 61 72 73 65 72  generated parser
2bcb0 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
2bcc0 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
2bcd0 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50    void *sqlite3P
2bce0 61 72 73 65 72 41 6c 6c 6f 63 28 76 6f 69 64 2a  arserAlloc(void*
2bcf0 28 2a 29 28 75 36 34 29 29 3b 0a 20 20 76 6f 69  (*)(u64));.  voi
2bd00 64 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 46  d sqlite3ParserF
2bd10 72 65 65 28 76 6f 69 64 2a 2c 20 76 6f 69 64 28  ree(void*, void(
2bd20 2a 29 28 76 6f 69 64 2a 29 29 3b 0a 23 65 6e 64  *)(void*));.#end
2bd30 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  if.void sqlite3P
2bd40 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2bd50 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29  , Token, Parse*)
2bd60 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
2bd70 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
2bd80 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2bd90 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
2bda0 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
2bdb0 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
2bdc0 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2bdd0 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
2bde0 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
2bdf0 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
2be00 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2be10 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2be20 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2be30 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2be40 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
2be50 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2be60 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2be70 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
2be80 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
2be90 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
2bea0 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2beb0 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2bec0 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2bed0 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
2bee0 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2bef0 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
2bf00 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
2bf10 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
2bf20 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2bf30 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2bf40 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
2bf50 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2bf60 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
2bf70 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
2bf80 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
2bf90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2bfa0 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
2bfb0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2bfc0 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
2bfd0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2bfe0 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
2bff0 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2c000 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64  VtabLock(X).#  d
2c010 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2c020 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
2c030 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2c040 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
2c050 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2c060 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
2c070 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
2c080 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2c090 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
2c0a0 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
2c0b0 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
2c0c0 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
2c0d0 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
2c0e0 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2c0f0 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
2c100 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
2c110 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
2c120 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2c130 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
2c140 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
2c150 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
2c160 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2c170 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2c180 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
2c190 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
2c1a0 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
2c1b0 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2c1c0 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2c1d0 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
2c1e0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c1f0 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
2c200 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
2c210 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2c220 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
2c230 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
2c240 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2c250 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
2c260 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
2c270 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
2c280 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
2c290 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  e3*, Table*);.  
2c2a0 20 4d 6f 64 75 6c 65 20 2a 73 71 6c 69 74 65 33   Module *sqlite3
2c2b0 56 74 61 62 43 72 65 61 74 65 4d 6f 64 75 6c 65  VtabCreateModule
2c2c0 28 0a 20 20 20 20 20 73 71 6c 69 74 65 33 2a 2c  (.     sqlite3*,
2c2d0 0a 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  .     const char
2c2e0 2a 2c 0a 20 20 20 20 20 63 6f 6e 73 74 20 73 71  *,.     const sq
2c2f0 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 2a 2c 0a 20  lite3_module*,. 
2c300 20 20 20 20 76 6f 69 64 2a 2c 0a 20 20 20 20 20      void*,.     
2c310 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 0a 20  void(*)(void*). 
2c320 20 20 29 3b 0a 23 20 20 64 65 66 69 6e 65 20 73    );.#  define s
2c330 71 6c 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63  qlite3VtabInSync
2c340 28 64 62 29 20 28 28 64 62 29 2d 3e 6e 56 54 72  (db) ((db)->nVTr
2c350 61 6e 73 3e 30 20 26 26 20 28 64 62 29 2d 3e 61  ans>0 && (db)->a
2c360 56 54 72 61 6e 73 3d 3d 30 29 0a 23 65 6e 64 69  VTrans==0).#endi
2c370 66 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  f.int sqlite3Vta
2c380 62 45 70 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 49  bEponymousTableI
2c390 6e 69 74 28 50 61 72 73 65 2a 2c 4d 6f 64 75 6c  nit(Parse*,Modul
2c3a0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2c3b0 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73 54 61  3VtabEponymousTa
2c3c0 62 6c 65 43 6c 65 61 72 28 73 71 6c 69 74 65 33  bleClear(sqlite3
2c3d0 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64  *,Module*);.void
2c3e0 20 73 71 6c 69 74 65 33 56 74 61 62 4d 61 6b 65   sqlite3VtabMake
2c3f0 57 72 69 74 61 62 6c 65 28 50 61 72 73 65 2a 2c  Writable(Parse*,
2c400 54 61 62 6c 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Table*);.void sq
2c410 6c 69 74 65 33 56 74 61 62 42 65 67 69 6e 50 61  lite3VtabBeginPa
2c420 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  rse(Parse*, Toke
2c430 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  n*, Token*, Toke
2c440 6e 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  n*, int);.void s
2c450 71 6c 69 74 65 33 56 74 61 62 46 69 6e 69 73 68  qlite3VtabFinish
2c460 50 61 72 73 65 28 50 61 72 73 65 2a 2c 20 54 6f  Parse(Parse*, To
2c470 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ken*);.void sqli
2c480 74 65 33 56 74 61 62 41 72 67 49 6e 69 74 28 50  te3VtabArgInit(P
2c490 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
2c4a0 69 74 65 33 56 74 61 62 41 72 67 45 78 74 65 6e  ite3VtabArgExten
2c4b0 64 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  d(Parse*, Token*
2c4c0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74  );.int sqlite3Vt
2c4d0 61 62 43 61 6c 6c 43 72 65 61 74 65 28 73 71 6c  abCallCreate(sql
2c4e0 69 74 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73  ite3*, int, cons
2c4f0 74 20 63 68 61 72 20 2a 2c 20 63 68 61 72 20 2a  t char *, char *
2c500 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56  *);.int sqlite3V
2c510 74 61 62 43 61 6c 6c 43 6f 6e 6e 65 63 74 28 50  tabCallConnect(P
2c520 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a  arse*, Table*);.
2c530 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 43  int sqlite3VtabC
2c540 61 6c 6c 44 65 73 74 72 6f 79 28 73 71 6c 69 74  allDestroy(sqlit
2c550 65 33 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20  e3*, int, const 
2c560 63 68 61 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c  char *);.int sql
2c570 69 74 65 33 56 74 61 62 42 65 67 69 6e 28 73 71  ite3VtabBegin(sq
2c580 6c 69 74 65 33 20 2a 2c 20 56 54 61 62 6c 65 20  lite3 *, VTable 
2c590 2a 29 3b 0a 46 75 6e 63 44 65 66 20 2a 73 71 6c  *);.FuncDef *sql
2c5a0 69 74 65 33 56 74 61 62 4f 76 65 72 6c 6f 61 64  ite3VtabOverload
2c5b0 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33  Function(sqlite3
2c5c0 20 2a 2c 46 75 6e 63 44 65 66 2a 2c 20 69 6e 74   *,FuncDef*, int
2c5d0 20 6e 41 72 67 2c 20 45 78 70 72 2a 29 3b 0a 76   nArg, Expr*);.v
2c5e0 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 76 61 6c  oid sqlite3Inval
2c5f0 69 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74  idFunction(sqlit
2c600 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c  e3_context*,int,
2c610 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29  sqlite3_value**)
2c620 3b 0a 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20  ;.sqlite3_int64 
2c630 73 71 6c 69 74 65 33 53 74 6d 74 43 75 72 72 65  sqlite3StmtCurre
2c640 6e 74 54 69 6d 65 28 73 71 6c 69 74 65 33 5f 63  ntTime(sqlite3_c
2c650 6f 6e 74 65 78 74 2a 29 3b 0a 69 6e 74 20 73 71  ontext*);.int sq
2c660 6c 69 74 65 33 56 64 62 65 50 61 72 61 6d 65 74  lite3VdbeParamet
2c670 65 72 49 6e 64 65 78 28 56 64 62 65 2a 2c 20 63  erIndex(Vdbe*, c
2c680 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69 6e 74 29  onst char*, int)
2c690 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 72 61  ;.int sqlite3Tra
2c6a0 6e 73 66 65 72 42 69 6e 64 69 6e 67 73 28 73 71  nsferBindings(sq
2c6b0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 2c 20 73 71  lite3_stmt *, sq
2c6c0 6c 69 74 65 33 5f 73 74 6d 74 20 2a 29 3b 0a 76  lite3_stmt *);.v
2c6d0 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2c6e0 72 52 65 73 65 74 28 50 61 72 73 65 2a 29 3b 0a  rReset(Parse*);.
2c6f0 69 6e 74 20 73 71 6c 69 74 65 33 52 65 70 72 65  int sqlite3Repre
2c700 70 61 72 65 28 56 64 62 65 2a 29 3b 0a 76 6f 69  pare(Vdbe*);.voi
2c710 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73  d sqlite3ExprLis
2c720 74 43 68 65 63 6b 4c 65 6e 67 74 68 28 50 61 72  tCheckLength(Par
2c730 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
2c740 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 43 6f  const char*);.Co
2c750 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65 33 42 69  llSeq *sqlite3Bi
2c760 6e 61 72 79 43 6f 6d 70 61 72 65 43 6f 6c 6c 53  naryCompareCollS
2c770 65 71 28 50 61 72 73 65 20 2a 2c 20 45 78 70 72  eq(Parse *, Expr
2c780 20 2a 2c 20 45 78 70 72 20 2a 29 3b 0a 69 6e 74   *, Expr *);.int
2c790 20 73 71 6c 69 74 65 33 54 65 6d 70 49 6e 4d 65   sqlite3TempInMe
2c7a0 6d 6f 72 79 28 63 6f 6e 73 74 20 73 71 6c 69 74  mory(const sqlit
2c7b0 65 33 2a 29 3b 0a 63 6f 6e 73 74 20 63 68 61 72  e3*);.const char
2c7c0 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c   *sqlite3Journal
2c7d0 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 29 3b 0a 23  Modename(int);.#
2c7e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2c7f0 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 73 71 6c  IT_WAL.  int sql
2c800 69 74 65 33 43 68 65 63 6b 70 6f 69 6e 74 28 73  ite3Checkpoint(s
2c810 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20 69 6e  qlite3*, int, in
2c820 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b 0a  t, int*, int*);.
2c830 20 20 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c    int sqlite3Wal
2c840 44 65 66 61 75 6c 74 48 6f 6f 6b 28 76 6f 69 64  DefaultHook(void
2c850 2a 2c 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74  *,sqlite3*,const
2c860 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a 23 65 6e   char*,int);.#en
2c870 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2c880 54 45 5f 4f 4d 49 54 5f 43 54 45 0a 20 20 57 69  TE_OMIT_CTE.  Wi
2c890 74 68 20 2a 73 71 6c 69 74 65 33 57 69 74 68 41  th *sqlite3WithA
2c8a0 64 64 28 50 61 72 73 65 2a 2c 57 69 74 68 2a 2c  dd(Parse*,With*,
2c8b0 54 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a  Token*,ExprList*
2c8c0 2c 53 65 6c 65 63 74 2a 29 3b 0a 20 20 76 6f 69  ,Select*);.  voi
2c8d0 64 20 73 71 6c 69 74 65 33 57 69 74 68 44 65 6c  d sqlite3WithDel
2c8e0 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 57 69 74  ete(sqlite3*,Wit
2c8f0 68 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  h*);.  void sqli
2c900 74 65 33 57 69 74 68 50 75 73 68 28 50 61 72 73  te3WithPush(Pars
2c910 65 2a 2c 20 57 69 74 68 2a 2c 20 75 38 29 3b 0a  e*, With*, u8);.
2c920 23 65 6c 73 65 0a 23 64 65 66 69 6e 65 20 73 71  #else.#define sq
2c930 6c 69 74 65 33 57 69 74 68 50 75 73 68 28 78 2c  lite3WithPush(x,
2c940 79 2c 7a 29 0a 23 64 65 66 69 6e 65 20 73 71 6c  y,z).#define sql
2c950 69 74 65 33 57 69 74 68 44 65 6c 65 74 65 28 78  ite3WithDelete(x
2c960 2c 79 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 44  ,y).#endif../* D
2c970 65 63 6c 61 72 61 74 69 6f 6e 73 20 66 6f 72 20  eclarations for 
2c980 66 75 6e 63 74 69 6f 6e 73 20 69 6e 20 66 6b 65  functions in fke
2c990 79 2e 63 2e 20 41 6c 6c 20 6f 66 20 74 68 65 73  y.c. All of thes
2c9a0 65 20 61 72 65 20 72 65 70 6c 61 63 65 64 20 62  e are replaced b
2c9b0 79 0a 2a 2a 20 6e 6f 2d 6f 70 20 6d 61 63 72 6f  y.** no-op macro
2c9c0 73 20 69 66 20 4f 4d 49 54 5f 46 4f 52 45 49 47  s if OMIT_FOREIG
2c9d0 4e 5f 4b 45 59 20 69 73 20 64 65 66 69 6e 65 64  N_KEY is defined
2c9e0 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 6e  . In this case n
2c9f0 6f 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79  o foreign.** key
2ca00 20 66 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69   functionality i
2ca10 73 20 61 76 61 69 6c 61 62 6c 65 2e 20 49 66 20  s available. If 
2ca20 4f 4d 49 54 5f 54 52 49 47 47 45 52 20 69 73 20  OMIT_TRIGGER is 
2ca30 64 65 66 69 6e 65 64 20 62 75 74 0a 2a 2a 20 4f  defined but.** O
2ca40 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20  MIT_FOREIGN_KEY 
2ca50 69 73 20 6e 6f 74 2c 20 6f 6e 6c 79 20 73 6f 6d  is not, only som
2ca60 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74 69 6f  e of the functio
2ca70 6e 73 20 61 72 65 20 6e 6f 2d 6f 70 65 64 2e 20  ns are no-oped. 
2ca80 49 6e 0a 2a 2a 20 74 68 69 73 20 63 61 73 65 20  In.** this case 
2ca90 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 72 65  foreign keys are
2caa0 20 70 61 72 73 65 64 2c 20 62 75 74 20 6e 6f 20   parsed, but no 
2cab0 6f 74 68 65 72 20 66 75 6e 63 74 69 6f 6e 61 6c  other functional
2cac0 69 74 79 20 69 73 0a 2a 2a 20 70 72 6f 76 69 64  ity is.** provid
2cad0 65 64 20 28 65 6e 66 6f 72 63 65 6d 65 6e 74 20  ed (enforcement 
2cae0 6f 66 20 46 4b 20 63 6f 6e 73 74 72 61 69 6e 74  of FK constraint
2caf0 73 20 72 65 71 75 69 72 65 73 20 74 68 65 20 74  s requires the t
2cb00 72 69 67 67 65 72 73 20 73 75 62 2d 73 79 73 74  riggers sub-syst
2cb10 65 6d 29 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  em)..*/.#if !def
2cb20 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2cb30 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
2cb40 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2cb50 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
2cb60 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46 6b 43   void sqlite3FkC
2cb70 68 65 63 6b 28 50 61 72 73 65 2a 2c 20 54 61 62  heck(Parse*, Tab
2cb80 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
2cb90 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  nt*, int);.  voi
2cba0 64 20 73 71 6c 69 74 65 33 46 6b 44 72 6f 70 54  d sqlite3FkDropT
2cbb0 61 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63  able(Parse*, Src
2cbc0 4c 69 73 74 20 2a 2c 20 54 61 62 6c 65 2a 29 3b  List *, Table*);
2cbd0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2cbe0 6b 41 63 74 69 6f 6e 73 28 50 61 72 73 65 2a 2c  kActions(Parse*,
2cbf0 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 4c 69 73   Table*, ExprLis
2cc00 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  t*, int, int*, i
2cc10 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
2cc20 65 33 46 6b 52 65 71 75 69 72 65 64 28 50 61 72  e3FkRequired(Par
2cc30 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
2cc40 2a 2c 20 69 6e 74 29 3b 0a 20 20 75 33 32 20 73  *, int);.  u32 s
2cc50 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2cc60 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 29 3b  Parse*, Table*);
2cc70 0a 20 20 46 4b 65 79 20 2a 73 71 6c 69 74 65 33  .  FKey *sqlite3
2cc80 46 6b 52 65 66 65 72 65 6e 63 65 73 28 54 61 62  FkReferences(Tab
2cc90 6c 65 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  le *);.#else.  #
2cca0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b  define sqlite3Fk
2ccb0 41 63 74 69 6f 6e 73 28 61 2c 62 2c 63 2c 64 2c  Actions(a,b,c,d,
2ccc0 65 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73  e,f).  #define s
2ccd0 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 61 2c  qlite3FkCheck(a,
2cce0 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2ccf0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 72  fine sqlite3FkDr
2cd00 6f 70 54 61 62 6c 65 28 61 2c 62 2c 63 29 0a 20  opTable(a,b,c). 
2cd10 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2cd20 46 6b 4f 6c 64 6d 61 73 6b 28 61 2c 62 29 20 20  FkOldmask(a,b)  
2cd30 20 20 20 20 20 20 20 30 0a 20 20 23 64 65 66 69         0.  #defi
2cd40 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75  ne sqlite3FkRequ
2cd50 69 72 65 64 28 61 2c 62 2c 63 2c 64 29 20 20 20  ired(a,b,c,d)   
2cd60 20 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c   0.  #define sql
2cd70 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63 65 73  ite3FkReferences
2cd80 28 61 29 20 20 20 20 20 20 20 20 30 0a 23 65 6e  (a)        0.#en
2cd90 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
2cda0 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
2cdb0 4b 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  KEY.  void sqlit
2cdc0 65 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74  e3FkDelete(sqlit
2cdd0 65 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20  e3 *, Table*);. 
2cde0 20 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f   int sqlite3FkLo
2cdf0 63 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a  cateIndex(Parse*
2ce00 2c 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e  ,Table*,FKey*,In
2ce10 64 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65  dex**,int**);.#e
2ce20 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2ce30 6c 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c  lite3FkDelete(a,
2ce40 62 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  b).  #define sql
2ce50 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
2ce60 78 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e  x(a,b,c,d,e).#en
2ce70 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69  dif.../*.** Avai
2ce80 6c 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65  lable fault inje
2ce90 63 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62  ctors.  Should b
2cea0 65 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e  e numbered begin
2ceb0 6e 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a  ning with 0..*/.
2cec0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2ced0 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c  AULTINJECTOR_MAL
2cee0 4c 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e  LOC     0.#defin
2cef0 65 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e  e SQLITE_FAULTIN
2cf00 4a 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20  JECTOR_COUNT    
2cf10 20 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69    1../*.** The i
2cf20 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2cf30 63 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20  code in fault.c 
2cf40 75 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66  used for identif
2cf50 79 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a  ying "benign".**
2cf60 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73   malloc failures
2cf70 2e 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70  . This is only p
2cf80 72 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45  resent if SQLITE
2cf90 5f 55 4e 54 45 53 54 41 42 4c 45 0a 2a 2a 20 69  _UNTESTABLE.** i
2cfa0 73 20 6e 6f 74 20 64 65 66 69 6e 65 64 2e 0a 2a  s not defined..*
2cfb0 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
2cfc0 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 76 6f  _UNTESTABLE.  vo
2cfd0 69 64 20 73 71 6c 69 74 65 33 42 65 67 69 6e 42  id sqlite3BeginB
2cfe0 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64  enignMalloc(void
2cff0 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
2d000 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2d010 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20  (void);.#else.  
2d020 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 42  #define sqlite3B
2d030 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  eginBenignMalloc
2d040 28 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  ().  #define sql
2d050 69 74 65 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c  ite3EndBenignMal
2d060 6c 6f 63 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a  loc().#endif../*
2d070 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75  .** Allowed retu
2d080 72 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  rn values from s
2d090 71 6c 69 74 65 33 46 69 6e 64 49 6e 49 6e 64 65  qlite3FindInInde
2d0a0 78 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  x().*/.#define I
2d0b0 4e 5f 49 4e 44 45 58 5f 52 4f 57 49 44 20 20 20  N_INDEX_ROWID   
2d0c0 20 20 20 20 20 31 20 20 20 2f 2a 20 53 65 61 72       1   /* Sear
2d0d0 63 68 20 74 68 65 20 72 6f 77 69 64 20 6f 66 20  ch the rowid of 
2d0e0 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65  the table */.#de
2d0f0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50  fine IN_INDEX_EP
2d100 48 20 20 20 20 20 20 20 20 20 20 32 20 20 20 2f  H          2   /
2d110 2a 20 53 65 61 72 63 68 20 61 6e 20 65 70 68 65  * Search an ephe
2d120 6d 65 72 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a  meral b-tree */.
2d130 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2d140 5f 49 4e 44 45 58 5f 41 53 43 20 20 20 20 33 20  _INDEX_ASC    3 
2d150 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e    /* Existing in
2d160 64 65 78 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f  dex ASCENDING */
2d170 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2d180 58 5f 49 4e 44 45 58 5f 44 45 53 43 20 20 20 34  X_INDEX_DESC   4
2d190 20 20 20 2f 2a 20 45 78 69 73 74 69 6e 67 20 69     /* Existing i
2d1a0 6e 64 65 78 20 44 45 53 43 45 4e 44 49 4e 47 20  ndex DESCENDING 
2d1b0 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2d1c0 44 45 58 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20  DEX_NOOP        
2d1d0 20 35 20 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65   5   /* No table
2d1e0 20 61 76 61 69 6c 61 62 6c 65 2e 20 55 73 65 20   available. Use 
2d1f0 63 6f 6d 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f  comparisons */./
2d200 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61  *.** Allowed fla
2d210 67 73 20 66 6f 72 20 74 68 65 20 33 72 64 20 70  gs for the 3rd p
2d220 61 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69  arameter to sqli
2d230 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2d240 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f  ..*/.#define IN_
2d250 49 4e 44 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20  INDEX_NOOP_OK   
2d260 20 20 30 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20    0x0001  /* OK 
2d270 74 6f 20 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44  to return IN_IND
2d280 45 58 5f 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69  EX_NOOP */.#defi
2d290 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42  ne IN_INDEX_MEMB
2d2a0 45 52 53 48 49 50 20 20 30 78 30 30 30 32 20 20  ERSHIP  0x0002  
2d2b0 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2d2c0 73 65 64 20 66 6f 72 20 6d 65 6d 62 65 72 73 68  sed for membersh
2d2d0 69 70 20 74 65 73 74 20 2a 2f 0a 23 64 65 66 69  ip test */.#defi
2d2e0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50  ne IN_INDEX_LOOP
2d2f0 20 20 20 20 20 20 20 20 30 78 30 30 30 34 20 20          0x0004  
2d300 2f 2a 20 49 4e 20 6f 70 65 72 61 74 6f 72 20 75  /* IN operator u
2d310 73 65 64 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f  sed as a loop */
2d320 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
2d330 49 6e 49 6e 64 65 78 28 50 61 72 73 65 20 2a 2c  InIndex(Parse *,
2d340 20 45 78 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e   Expr *, u32, in
2d350 74 2a 2c 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20  t*, int*);..int 
2d360 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70  sqlite3JournalOp
2d370 65 6e 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  en(sqlite3_vfs *
2d380 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2d390 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20  sqlite3_file *, 
2d3a0 69 6e 74 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  int, int);.int s
2d3b0 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a  qlite3JournalSiz
2d3c0 65 28 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 29  e(sqlite3_vfs *)
2d3d0 3b 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ;.#if defined(SQ
2d3e0 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f 4d  LITE_ENABLE_ATOM
2d3f0 49 43 5f 57 52 49 54 45 29 20 5c 0a 20 7c 7c 20  IC_WRITE) \. || 
2d400 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2d410 4e 41 42 4c 45 5f 42 41 54 43 48 5f 41 54 4f 4d  NABLE_BATCH_ATOM
2d420 49 43 5f 57 52 49 54 45 29 0a 20 20 69 6e 74 20  IC_WRITE).  int 
2d430 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
2d440 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
2d450 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e *);.#endif..in
2d460 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2d470 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74  IsInMemory(sqlit
2d480 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69  e3_file *p);.voi
2d490 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
2d4a0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
2d4b0 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  file *);..void s
2d4c0 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
2d4d0 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73  ghtAndFlags(Pars
2d4e0 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2d4f0 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p);.#if SQLITE_
2d500 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
2d510 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
2d520 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
2d530 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
2d540 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2d550 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
2d560 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
2d570 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
2d580 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
2d590 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2d5a0 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
2d5b0 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
2d5c0 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
2d5d0 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
2d5e0 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
2d5f0 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
2d600 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2d610 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
2d620 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
2d630 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2d640 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
2d650 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
2d660 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2d670 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
2d680 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
2d690 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d6a0 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
2d6b0 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
2d6c0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2d6d0 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
2d6e0 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
2d6f0 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2d700 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
2d710 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2d720 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
2d730 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2d740 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
2d750 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2d760 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
2d770 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ar *);.#endif../
2d780 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
2d790 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
2d7a0 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
2d7b0 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
2d7c0 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
2d7d0 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
2d7e0 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
2d7f0 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
2d800 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
2d810 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
2d820 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2d830 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
2d840 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2d850 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
2d860 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
2d870 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
2d880 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
2d890 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
2d8a0 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20  e*);.SQLITE_API 
2d8b0 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
2d8c0 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  id (SQLITE_CDECL
2d8d0 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65   *sqlite3IoTrace
2d8e0 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
2d8f0 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
2d900 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
2d910 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
2d920 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
2d930 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2d940 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
2d950 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
2d960 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
2d970 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
2d980 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
2d990 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
2d9a0 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
2d9b0 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
2d9c0 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
2d9d0 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
2d9e0 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
2d9f0 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
2da00 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2da10 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
2da20 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
2da30 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
2da40 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
2da50 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
2da60 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
2da70 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
2da80 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
2da90 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
2daa0 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2dab0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
2dac0 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2dad0 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
2dae0 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
2daf0 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
2db00 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
2db10 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
2db20 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2db30 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
2db40 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2db50 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
2db60 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
2db70 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2db80 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
2db90 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2dba0 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2dbb0 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
2dbc0 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
2dbd0 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
2dbe0 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
2dbf0 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
2dc00 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2dc10 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
2dc20 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
2dc30 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
2dc40 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
2dc50 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
2dc60 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
2dc70 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2dc80 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
2dc90 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
2dca0 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
2dcb0 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
2dcc0 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
2dcd0 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
2dce0 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
2dcf0 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
2dd00 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
2dd10 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
2dd20 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
2dd30 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
2dd40 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
2dd50 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
2dd60 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
2dd70 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
2dd80 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
2dd90 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
2dda0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2ddb0 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
2ddc0 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
2ddd0 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
2dde0 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
2ddf0 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
2de00 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2de10 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
2de20 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
2de30 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
2de40 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
2de50 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
2de60 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
2de70 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
2de80 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
2de90 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
2dea0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
2deb0 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
2dec0 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
2ded0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
2dee0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
2def0 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
2df00 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2df10 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
2df20 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
2df30 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
2df40 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
2df50 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2df60 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
2df70 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
2df80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2df90 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2dfa0 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
2dfb0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2dfc0 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
2dfd0 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
2dfe0 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
2dff0 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
2e000 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
2e010 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
2e020 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2e030 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
2e040 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
2e050 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
2e060 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2e070 45 5f 50 43 41 43 48 45 20 20 20 20 20 30 78 30  E_PCACHE     0x0
2e080 34 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68 65  4  /* Page cache
2e090 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a   allocations */.
2e0a0 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69 6e 67  ./*.** Threading
2e0b0 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a 23 69   interface.*/.#i
2e0c0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
2e0d0 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a 69 6e  KER_THREADS>0.in
2e0e0 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 43  t sqlite3ThreadC
2e0f0 72 65 61 74 65 28 53 51 4c 69 74 65 54 68 72 65  reate(SQLiteThre
2e100 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28 76 6f  ad**,void*(*)(vo
2e110 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69 6e 74  id*),void*);.int
2e120 20 73 71 6c 69 74 65 33 54 68 72 65 61 64 4a 6f   sqlite3ThreadJo
2e130 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a  in(SQLiteThread*
2e140 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e 64 69  , void**);.#endi
2e150 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  f..#if defined(S
2e160 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44 42 53  QLITE_ENABLE_DBS
2e170 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64 65 66  TAT_VTAB) || def
2e180 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
2e190 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 62 73  ).int sqlite3Dbs
2e1a0 74 61 74 52 65 67 69 73 74 65 72 28 73 71 6c 69  tatRegister(sqli
2e1b0 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69  te3*);.#endif..i
2e1c0 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 56 65  nt sqlite3ExprVe
2e1d0 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20 2a 70  ctorSize(Expr *p
2e1e0 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  Expr);.int sqlit
2e1f0 65 33 45 78 70 72 49 73 56 65 63 74 6f 72 28 45  e3ExprIsVector(E
2e200 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70  xpr *pExpr);.Exp
2e210 72 20 2a 73 71 6c 69 74 65 33 56 65 63 74 6f 72  r *sqlite3Vector
2e220 46 69 65 6c 64 53 75 62 65 78 70 72 28 45 78 70  FieldSubexpr(Exp
2e230 72 2a 2c 20 69 6e 74 29 3b 0a 45 78 70 72 20 2a  r*, int);.Expr *
2e240 73 71 6c 69 74 65 33 45 78 70 72 46 6f 72 56 65  sqlite3ExprForVe
2e250 63 74 6f 72 46 69 65 6c 64 28 50 61 72 73 65 2a  ctorField(Parse*
2e260 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 76 6f 69  ,Expr*,int);.voi
2e270 64 20 73 71 6c 69 74 65 33 56 65 63 74 6f 72 45  d sqlite3VectorE
2e280 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c 20  rrorMsg(Parse*, 
2e290 45 78 70 72 2a 29 3b 0a 0a 23 69 66 6e 64 65 66  Expr*);..#ifndef
2e2a0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
2e2b0 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
2e2c0 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 73 71  .const char **sq
2e2d0 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f 70 74 69  lite3CompileOpti
2e2e0 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70 74 29 3b  ons(int *pnOpt);
2e2f0 0a 23 65 6e 64 69 66 0a 0a 23 65 6e 64 69 66 20  .#endif..#endif 
2e300 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20 2a  /* SQLITEINT_H *
2e310 2f 0a                                            /.