/ Hex Artifact Content
Login

Artifact f4079dcc83ec216d34531792626206a1a35463bc:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 57  E 1.#endif../* W
0ee0: 68 61 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 47  hat version of G
0ef0: 43 43 20 69 73 20 62 65 69 6e 67 20 75 73 65 64  CC is being used
0f00: 2e 20 20 30 20 6d 65 61 6e 73 20 47 43 43 20 69  .  0 means GCC i
0f10: 73 20 6e 6f 74 20 62 65 69 6e 67 20 75 73 65 64  s not being used
0f20: 20 2a 2f 0a 23 69 66 64 65 66 20 5f 5f 47 4e 55   */.#ifdef __GNU
0f30: 43 5f 5f 0a 23 20 64 65 66 69 6e 65 20 47 43 43  C__.# define GCC
0f40: 5f 56 45 52 53 49 4f 4e 20 28 5f 5f 47 4e 55 43  _VERSION (__GNUC
0f50: 5f 5f 2a 31 30 30 30 30 30 30 2b 5f 5f 47 4e 55  __*1000000+__GNU
0f60: 43 5f 4d 49 4e 4f 52 5f 5f 2a 31 30 30 30 2b 5f  C_MINOR__*1000+_
0f70: 5f 47 4e 55 43 5f 50 41 54 43 48 4c 45 56 45 4c  _GNUC_PATCHLEVEL
0f80: 5f 5f 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  __).#else.# defi
0f90: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 30  ne GCC_VERSION 0
0fa0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 4e 65 65 64  .#endif../* Need
0fb0: 65 64 20 66 6f 72 20 76 61 72 69 6f 75 73 20 64  ed for various d
0fc0: 65 66 69 6e 69 74 69 6f 6e 73 2e 2e 2e 20 2a 2f  efinitions... */
0fd0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f 5f 47  .#if defined(__G
0fe0: 4e 55 43 5f 5f 29 20 26 26 20 21 64 65 66 69 6e  NUC__) && !defin
0ff0: 65 64 28 5f 47 4e 55 5f 53 4f 55 52 43 45 29 0a  ed(_GNU_SOURCE).
1000: 23 20 64 65 66 69 6e 65 20 5f 47 4e 55 5f 53 4f  # define _GNU_SO
1010: 55 52 43 45 0a 23 65 6e 64 69 66 0a 0a 23 69 66  URCE.#endif..#if
1020: 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42   defined(__OpenB
1030: 53 44 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65  SD__) && !define
1040: 64 28 5f 42 53 44 5f 53 4f 55 52 43 45 29 0a 23  d(_BSD_SOURCE).#
1050: 20 64 65 66 69 6e 65 20 5f 42 53 44 5f 53 4f 55   define _BSD_SOU
1060: 52 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  RCE.#endif../*.*
1070: 2a 20 46 6f 72 20 4d 69 6e 47 57 2c 20 63 68 65  * For MinGW, che
1080: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 77 65 20  ck to see if we 
1090: 63 61 6e 20 69 6e 63 6c 75 64 65 20 74 68 65 20  can include the 
10a0: 68 65 61 64 65 72 20 66 69 6c 65 20 63 6f 6e 74  header file cont
10b0: 61 69 6e 69 6e 67 20 69 74 73 0a 2a 2a 20 76 65  aining its.** ve
10c0: 72 73 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f  rsion informatio
10d0: 6e 2c 20 61 6d 6f 6e 67 20 6f 74 68 65 72 20 74  n, among other t
10e0: 68 69 6e 67 73 2e 20 20 4e 6f 72 6d 61 6c 6c 79  hings.  Normally
10f0: 2c 20 74 68 69 73 20 69 6e 74 65 72 6e 61 6c 20  , this internal 
1100: 4d 69 6e 47 57 0a 2a 2a 20 68 65 61 64 65 72 20  MinGW.** header 
1110: 66 69 6c 65 20 77 6f 75 6c 64 20 5b 6f 6e 6c 79  file would [only
1120: 5d 20 62 65 20 69 6e 63 6c 75 64 65 64 20 61 75  ] be included au
1130: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 62 79 20 6f  tomatically by o
1140: 74 68 65 72 20 4d 69 6e 47 57 20 68 65 61 64 65  ther MinGW heade
1150: 72 0a 2a 2a 20 66 69 6c 65 73 3b 20 68 6f 77 65  r.** files; howe
1160: 76 65 72 2c 20 74 68 65 20 63 6f 6e 74 61 69 6e  ver, the contain
1170: 65 64 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f 72  ed version infor
1180: 6d 61 74 69 6f 6e 20 69 73 20 6e 6f 77 20 72 65  mation is now re
1190: 71 75 69 72 65 64 20 62 79 20 74 68 69 73 0a 2a  quired by this.*
11a0: 2a 20 68 65 61 64 65 72 20 66 69 6c 65 20 74 6f  * header file to
11b0: 20 77 6f 72 6b 20 61 72 6f 75 6e 64 20 62 69 6e   work around bin
11c0: 61 72 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74  ary compatibilit
11d0: 79 20 69 73 73 75 65 73 20 28 73 65 65 20 62 65  y issues (see be
11e0: 6c 6f 77 29 20 61 6e 64 0a 2a 2a 20 74 68 69 73  low) and.** this
11f0: 20 69 73 20 74 68 65 20 6f 6e 6c 79 20 6b 6e 6f   is the only kno
1200: 77 6e 20 77 61 79 20 74 6f 20 72 65 6c 69 61 62  wn way to reliab
1210: 6c 79 20 6f 62 74 61 69 6e 20 69 74 2e 20 20 54  ly obtain it.  T
1220: 68 69 73 20 65 6e 74 69 72 65 20 23 69 66 20 62  his entire #if b
1230: 6c 6f 63 6b 0a 2a 2a 20 77 6f 75 6c 64 20 62 65  lock.** would be
1240: 20 63 6f 6d 70 6c 65 74 65 6c 79 20 75 6e 6e 65   completely unne
1250: 63 65 73 73 61 72 79 20 69 66 20 74 68 65 72 65  cessary if there
1260: 20 77 61 73 20 61 6e 79 20 6f 74 68 65 72 20 77   was any other w
1270: 61 79 20 6f 66 20 64 65 74 65 63 74 69 6e 67 0a  ay of detecting.
1280: 2a 2a 20 4d 69 6e 47 57 20 76 69 61 20 74 68 65  ** MinGW via the
1290: 69 72 20 70 72 65 70 72 6f 63 65 73 73 6f 72 20  ir preprocessor 
12a0: 28 65 2e 67 2e 20 69 66 20 74 68 65 79 20 63 75  (e.g. if they cu
12b0: 73 74 6f 6d 69 7a 65 64 20 74 68 65 69 72 20 47  stomized their G
12c0: 43 43 20 74 6f 20 64 65 66 69 6e 65 0a 2a 2a 20  CC to define.** 
12d0: 73 6f 6d 65 20 4d 69 6e 47 57 2d 73 70 65 63 69  some MinGW-speci
12e0: 66 69 63 20 6d 61 63 72 6f 73 29 2e 20 20 57 68  fic macros).  Wh
12f0: 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 66 6f 72  en compiling for
1300: 20 4d 69 6e 47 57 2c 20 65 69 74 68 65 72 20 74   MinGW, either t
1310: 68 65 0a 2a 2a 20 5f 48 41 56 45 5f 4d 49 4e 47  he.** _HAVE_MING
1320: 57 5f 48 20 6f 72 20 5f 48 41 56 45 5f 5f 4d 49  W_H or _HAVE__MI
1330: 4e 47 57 5f 48 20 28 6e 6f 74 65 20 74 68 65 20  NGW_H (note the 
1340: 65 78 74 72 61 20 75 6e 64 65 72 73 63 6f 72 65  extra underscore
1350: 29 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 0a  ) macro must be.
1360: 2a 2a 20 64 65 66 69 6e 65 64 3b 20 6f 74 68 65  ** defined; othe
1370: 72 77 69 73 65 2c 20 64 65 74 65 63 74 69 6f 6e  rwise, detection
1380: 20 6f 66 20 63 6f 6e 64 69 74 69 6f 6e 73 20 73   of conditions s
1390: 70 65 63 69 66 69 63 20 74 6f 20 4d 69 6e 47 57  pecific to MinGW
13a0: 20 77 69 6c 6c 20 62 65 0a 2a 2a 20 64 69 73 61   will be.** disa
13b0: 62 6c 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  bled..*/.#if def
13c0: 69 6e 65 64 28 5f 48 41 56 45 5f 4d 49 4e 47 57  ined(_HAVE_MINGW
13d0: 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20 22 6d  _H).# include "m
13e0: 69 6e 67 77 2e 68 22 0a 23 65 6c 69 66 20 64 65  ingw.h".#elif de
13f0: 66 69 6e 65 64 28 5f 48 41 56 45 5f 5f 4d 49 4e  fined(_HAVE__MIN
1400: 47 57 5f 48 29 0a 23 20 69 6e 63 6c 75 64 65 20  GW_H).# include 
1410: 22 5f 6d 69 6e 67 77 2e 68 22 0a 23 65 6e 64 69  "_mingw.h".#endi
1420: 66 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e  f../*.** For Min
1430: 47 57 20 76 65 72 73 69 6f 6e 20 34 2e 78 20 28  GW version 4.x (
1440: 61 6e 64 20 68 69 67 68 65 72 29 2c 20 63 68 65  and higher), che
1450: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68 65  ck to see if the
1460: 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45   _USE_32BIT_TIME
1470: 5f 54 0a 2a 2a 20 64 65 66 69 6e 65 20 69 73 20  _T.** define is 
1480: 72 65 71 75 69 72 65 64 20 74 6f 20 6d 61 69 6e  required to main
1490: 74 61 69 6e 20 62 69 6e 61 72 79 20 63 6f 6d 70  tain binary comp
14a0: 61 74 69 62 69 6c 69 74 79 20 77 69 74 68 20 74  atibility with t
14b0: 68 65 20 4d 53 56 43 20 72 75 6e 74 69 6d 65 0a  he MSVC runtime.
14c0: 2a 2a 20 6c 69 62 72 61 72 79 20 69 6e 20 75 73  ** library in us
14d0: 65 20 28 65 2e 67 2e 20 66 6f 72 20 57 69 6e 64  e (e.g. for Wind
14e0: 6f 77 73 20 58 50 29 2e 0a 2a 2f 0a 23 69 66 20  ows XP)..*/.#if 
14f0: 21 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 33 32  !defined(_USE_32
1500: 42 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 21  BIT_TIME_T) && !
1510: 64 65 66 69 6e 65 64 28 5f 55 53 45 5f 36 34 42  defined(_USE_64B
1520: 49 54 5f 54 49 4d 45 5f 54 29 20 26 26 20 5c 0a  IT_TIME_T) && \.
1530: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 57 49 4e      defined(_WIN
1540: 33 32 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  32) && !defined(
1550: 5f 57 49 4e 36 34 29 20 26 26 20 5c 0a 20 20 20  _WIN64) && \.   
1560: 20 64 65 66 69 6e 65 64 28 5f 5f 4d 49 4e 47 57   defined(__MINGW
1570: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 29 20  _MAJOR_VERSION) 
1580: 26 26 20 5f 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52  && __MINGW_MAJOR
1590: 5f 56 45 52 53 49 4f 4e 20 3e 3d 20 34 20 26 26  _VERSION >= 4 &&
15a0: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
15b0: 5f 4d 53 56 43 52 54 5f 5f 29 0a 23 20 64 65 66  _MSVCRT__).# def
15c0: 69 6e 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54  ine _USE_32BIT_T
15d0: 49 4d 45 5f 54 0a 23 65 6e 64 69 66 0a 0a 2f 2a  IME_T.#endif../*
15e0: 20 54 68 65 20 70 75 62 6c 69 63 20 53 51 4c 69   The public SQLi
15f0: 74 65 20 69 6e 74 65 72 66 61 63 65 2e 20 20 54  te interface.  T
1600: 68 65 20 5f 46 49 4c 45 5f 4f 46 46 53 45 54 5f  he _FILE_OFFSET_
1610: 42 49 54 53 20 6d 61 63 72 6f 20 6d 75 73 74 20  BITS macro must 
1620: 61 70 70 65 61 72 0a 2a 2a 20 66 69 72 73 74 20  appear.** first 
1630: 69 6e 20 51 4e 58 2e 20 20 41 6c 73 6f 2c 20 74  in QNX.  Also, t
1640: 68 65 20 5f 55 53 45 5f 33 32 42 49 54 5f 54 49  he _USE_32BIT_TI
1650: 4d 45 5f 54 20 6d 61 63 72 6f 20 6d 75 73 74 20  ME_T macro must 
1660: 61 70 70 65 61 72 20 66 69 72 73 74 20 66 6f 72  appear first for
1670: 0a 2a 2a 20 4d 69 6e 47 57 2e 0a 2a 2f 0a 23 69  .** MinGW..*/.#i
1680: 6e 63 6c 75 64 65 20 22 73 71 6c 69 74 65 33 2e  nclude "sqlite3.
1690: 68 22 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c 75 64  h"../*.** Includ
16a0: 65 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  e the configurat
16b0: 69 6f 6e 20 68 65 61 64 65 72 20 6f 75 74 70 75  ion header outpu
16c0: 74 20 62 79 20 27 63 6f 6e 66 69 67 75 72 65 27  t by 'configure'
16d0: 20 69 66 20 77 65 27 72 65 20 75 73 69 6e 67 20   if we're using 
16e0: 74 68 65 0a 2a 2a 20 61 75 74 6f 63 6f 6e 66 2d  the.** autoconf-
16f0: 62 61 73 65 64 20 62 75 69 6c 64 0a 2a 2f 0a 23  based build.*/.#
1700: 69 66 64 65 66 20 5f 48 41 56 45 5f 53 51 4c 49  ifdef _HAVE_SQLI
1710: 54 45 5f 43 4f 4e 46 49 47 5f 48 0a 23 69 6e 63  TE_CONFIG_H.#inc
1720: 6c 75 64 65 20 22 63 6f 6e 66 69 67 2e 68 22 0a  lude "config.h".
1730: 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64 65  #endif..#include
1740: 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68 22   "sqliteLimit.h"
1750: 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75 69  ../* Disable nui
1760: 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20 6f  sance warnings o
1770: 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69 6c  n Borland compil
1780: 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ers */.#if defin
1790: 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f 29  ed(__BORLANDC__)
17a0: 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 72  .#pragma warn -r
17b0: 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62 6c  ch /* unreachabl
17c0: 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67 6d  e code */.#pragm
17d0: 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20 43  a warn -ccc /* C
17e0: 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77 61  ondition is alwa
17f0: 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73 65  ys true or false
1800: 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72 6e   */.#pragma warn
1810: 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e 65   -aus /* Assigne
1820: 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65 72  d value is never
1830: 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d 61   used */.#pragma
1840: 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43 6f   warn -csu /* Co
1850: 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20 61  mparing signed a
1860: 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a 23  nd unsigned */.#
1870: 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70 61  pragma warn -spa
1880: 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20 70   /* Suspicious p
1890: 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74 69  ointer arithmeti
18a0: 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  c */.#endif../*.
18b0: 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e 64  ** Include stand
18c0: 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65 73  ard header files
18d0: 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a 2f   as necessary.*/
18e0: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54 44  .#ifdef HAVE_STD
18f0: 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20 3c  INT_H.#include <
1900: 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69 66  stdint.h>.#endif
1910: 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  .#ifdef HAVE_INT
1920: 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64 65  TYPES_H.#include
1930: 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23 65   <inttypes.h>.#e
1940: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
1950: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
1960: 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61 73   are used to cas
1970: 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e  t pointers to in
1980: 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69 6e  tegers and.** in
1990: 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74 65  tegers to pointe
19a0: 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f 75  rs.  The way you
19b0: 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73 20   do this varies 
19c0: 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c 65  from one compile
19d0: 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78 74  r.** to the next
19e0: 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65 76  , so we have dev
19f0: 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c 6f  eloped the follo
1a00: 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66 20  wing set of #if 
1a10: 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74 6f  statements.** to
1a20: 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f 70   generate approp
1a30: 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f 72  riate macros for
1a40: 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f 66   a wide range of
1a50: 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a 2a   compilers..**.*
1a60: 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22 41  * The correct "A
1a70: 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20 74  NSI" way to do t
1a80: 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74 68  his is to use th
1a90: 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65 2e  e intptr_t type.
1aa0: 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65 6c  .** Unfortunatel
1ab0: 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66 20  y, that typedef 
1ac0: 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
1ad0: 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 72   on all compiler
1ae0: 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20 69  s, or.** if it i
1af0: 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74 20  s available, it 
1b00: 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e 63  requires an #inc
1b10: 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69 63  lude of specific
1b20: 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61 74   headers.** that
1b30: 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20 6d   vary from one m
1b40: 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e 65  achine to the ne
1b50: 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65 74  xt..**.** Ticket
1b60: 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c 76   #3860:  The llv
1b70: 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69 6c  m-gcc-4.2 compil
1b80: 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63 68  er from Apple ch
1b90: 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20 28  okes on.** the (
1ba0: 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29  (void*)&((char*)
1bb0: 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63 74  0)[X]) construct
1bc0: 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f 6b  .  But MSVC chok
1bd0: 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28 58  es on ((void*)(X
1be0: 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61 76  ))..** So we hav
1bf0: 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65 20  e to define the 
1c00: 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65 72  macros in differ
1c10: 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64 69  ent ways dependi
1c20: 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f 6d  ng on the.** com
1c30: 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64 65  piler..*/.#if de
1c40: 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46 5f  fined(__PTRDIFF_
1c50: 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69 73  TYPE__)  /* This
1c60: 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f 72   case should wor
1c70: 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20 64  k for GCC */.# d
1c80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
1c90: 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76 6f  _TO_PTR(X)  ((vo
1ca0: 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f 54  id*)(__PTRDIFF_T
1cb0: 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65 66  YPE__)(X)).# def
1cc0: 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f 54  ine SQLITE_PTR_T
1cd0: 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74 29  O_INT(X)  ((int)
1ce0: 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45 5f  (__PTRDIFF_TYPE_
1cf0: 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64 65  _)(X)).#elif !de
1d00: 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20  fined(__GNUC__) 
1d10: 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20 66        /* Works f
1d20: 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74 68  or compilers oth
1d30: 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f 0a  er than LLVM */.
1d40: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
1d50: 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28  INT_TO_PTR(X)  (
1d60: 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a 29  (void*)&((char*)
1d70: 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65 20  0)[X]).# define 
1d80: 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
1d90: 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28 63  T(X)  ((int)(((c
1da0: 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29 30  har*)X)-(char*)0
1db0: 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  )).#elif defined
1dc0: 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29 20  (HAVE_STDINT_H) 
1dd0: 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63 61    /* Use this ca
1de0: 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41 4e  se if we have AN
1df0: 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23 20  SI headers */.# 
1e00: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
1e10: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
1e20: 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29 28  oid*)(intptr_t)(
1e30: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
1e40: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
1e50: 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74 72  )  ((int)(intptr
1e60: 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20 20  _t)(X)).#else   
1e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1e80: 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61         /* Genera
1e90: 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d 20  tes a warning - 
1ea0: 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77 6f  but it always wo
1eb0: 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  rks */.# define 
1ec0: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
1ed0: 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28 58  R(X)  ((void*)(X
1ee0: 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  )).# define SQLI
1ef0: 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58 29  TE_PTR_TO_INT(X)
1f00: 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65 6e    ((int)(X)).#en
1f10: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63  dif../*.** A mac
1f20: 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74 68  ro to hint to th
1f30: 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74 20  e compiler that 
1f40: 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75 6c  a function shoul
1f50: 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c 69  d not be.** inli
1f60: 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69  ned..*/.#if defi
1f70: 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23 20  ned(__GNUC__).# 
1f80: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
1f90: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72 69  OINLINE  __attri
1fa0: 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e 65  bute__((noinline
1fb0: 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65 64  )).#elif defined
1fc0: 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f 4d  (_MSC_VER) && _M
1fd0: 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20 20  SC_VER>=1310.#  
1fe0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
1ff0: 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73 70  INLINE  __declsp
2000: 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65 6c  ec(noinline).#el
2010: 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c  se.#  define SQL
2020: 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65 6e  ITE_NOINLINE.#en
2030: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20  dif../*.** Make 
2040: 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63 6f  sure that the co
2050: 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69 63  mpiler intrinsic
2060: 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65 20  s we desire are 
2070: 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a 20  enabled when.** 
2080: 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20 61  compiling with a
2090: 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76 65  n appropriate ve
20a0: 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75 6e  rsion of MSVC un
20b0: 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20 62  less prevented b
20c0: 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f  y.** the SQLITE_
20d0: 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49  DISABLE_INTRINSI
20e0: 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69 66  C define..*/.#if
20f0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2100: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2110: 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e 65  IC).#  if define
2120: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2130: 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23 20  MSC_VER>=1400.# 
2140: 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28 5f     if !defined(_
2150: 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20 20  WIN32_WCE).#    
2160: 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72 69    include <intri
2170: 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61 67  n.h>.#      prag
2180: 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62 79  ma intrinsic(_by
2190: 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a 23  teswap_ushort).#
21a0: 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e 74        pragma int
21b0: 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61 70  rinsic(_byteswap
21c0: 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20 70  _ulong).#      p
21d0: 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28  ragma intrinsic(
21e0: 5f 52 65 61 64 57 72 69 74 65 42 61 72 72 69 65  _ReadWriteBarrie
21f0: 72 29 0a 23 20 20 20 20 65 6c 73 65 0a 23 20 20  r).#    else.#  
2200: 20 20 20 20 69 6e 63 6c 75 64 65 20 3c 63 6d 6e      include <cmn
2210: 69 6e 74 72 69 6e 2e 68 3e 0a 23 20 20 20 20 65  intrin.h>.#    e
2220: 6e 64 69 66 0a 23 20 20 65 6e 64 69 66 0a 23 65  ndif.#  endif.#e
2230: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2240: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
2250: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 62 65 20  E macro must be 
2260: 64 65 66 69 6e 65 64 20 61 73 20 30 2c 20 31 2c  defined as 0, 1,
2270: 20 6f 72 20 32 2e 0a 2a 2a 20 30 20 6d 65 61 6e   or 2..** 0 mean
2280: 73 20 6d 75 74 65 78 65 73 20 61 72 65 20 70 65  s mutexes are pe
2290: 72 6d 61 6e 65 6e 74 6c 79 20 64 69 73 61 62 6c  rmanently disabl
22a0: 65 20 61 6e 64 20 74 68 65 20 6c 69 62 72 61 72  e and the librar
22b0: 79 20 69 73 20 6e 65 76 65 72 0a 2a 2a 20 74 68  y is never.** th
22c0: 72 65 61 64 73 61 66 65 2e 20 20 31 20 6d 65 61  readsafe.  1 mea
22d0: 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79 20 69  ns the library i
22e0: 73 20 73 65 72 69 61 6c 69 7a 65 64 20 77 68 69  s serialized whi
22f0: 63 68 20 69 73 20 74 68 65 20 68 69 67 68 65 73  ch is the highes
2300: 74 0a 2a 2a 20 6c 65 76 65 6c 20 6f 66 20 74 68  t.** level of th
2310: 72 65 61 64 73 61 66 65 74 79 2e 20 20 32 20 6d  readsafety.  2 m
2320: 65 61 6e 73 20 74 68 65 20 6c 69 62 72 61 72 79  eans the library
2330: 20 69 73 20 6d 75 6c 74 69 74 68 72 65 61 64 65   is multithreade
2340: 64 20 2d 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a 20  d - multiple.** 
2350: 74 68 72 65 61 64 73 20 63 61 6e 20 75 73 65 20  threads can use 
2360: 53 51 4c 69 74 65 20 61 73 20 6c 6f 6e 67 20 61  SQLite as long a
2370: 73 20 6e 6f 20 74 77 6f 20 74 68 72 65 61 64 73  s no two threads
2380: 20 74 72 79 20 74 6f 20 75 73 65 20 74 68 65 20   try to use the 
2390: 73 61 6d 65 0a 2a 2a 20 64 61 74 61 62 61 73 65  same.** database
23a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 74 20 74   connection at t
23b0: 68 65 20 73 61 6d 65 20 74 69 6d 65 2e 0a 2a 2a  he same time..**
23c0: 0a 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f  .** Older versio
23d0: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 75 73 65  ns of SQLite use
23e0: 64 20 61 6e 20 6f 70 74 69 6f 6e 61 6c 20 54 48  d an optional TH
23f0: 52 45 41 44 53 41 46 45 20 6d 61 63 72 6f 2e 0a  READSAFE macro..
2400: 2a 2a 20 57 65 20 73 75 70 70 6f 72 74 20 74 68  ** We support th
2410: 61 74 20 66 6f 72 20 6c 65 67 61 63 79 2e 0a 2a  at for legacy..*
2420: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
2430: 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46 45  QLITE_THREADSAFE
2440: 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28 54  ).# if defined(T
2450: 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20 64  HREADSAFE).#   d
2460: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
2470: 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53 41  EADSAFE THREADSA
2480: 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65  FE.# else.#   de
2490: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52 45  fine SQLITE_THRE
24a0: 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50 3a  ADSAFE 1 /* IMP:
24b0: 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20 2a   R-07272-22309 *
24c0: 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  /.# endif.#endif
24d0: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61 66  ../*.** Powersaf
24e0: 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20 6f  e overwrite is o
24f0: 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 42  n by default.  B
2500: 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65 64  ut can be turned
2510: 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74 68   off using.** th
2520: 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45 52  e -DSQLITE_POWER
2530: 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d 30  SAFE_OVERWRITE=0
2540: 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f 70   command-line op
2550: 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  tion..*/.#ifndef
2560: 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41 46   SQLITE_POWERSAF
2570: 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64 65  E_OVERWRITE.# de
2580: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57 45  fine SQLITE_POWE
2590: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 20  RSAFE_OVERWRITE 
25a0: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
25b0: 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d 32  EVIDENCE-OF: R-2
25c0: 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f 72  5715-37072 Memor
25d0: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74 61  y allocation sta
25e0: 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61 62  tistics are enab
25f0: 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75 6c  led by.** defaul
2600: 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65 20  t unless SQLite 
2610: 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  is compiled with
2620: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
2630: 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a 2a  MEMSTATUS=0 in.*
2640: 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65 6d  * which case mem
2650: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73  ory allocation s
2660: 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64 69  tatistics are di
2670: 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75 6c  sabled by defaul
2680: 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  t..*/.#if !defin
2690: 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ed(SQLITE_DEFAUL
26a0: 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20 64  T_MEMSTATUS).# d
26b0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
26c0: 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20 31  AULT_MEMSTATUS 1
26d0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45  .#endif../*.** E
26e0: 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74 68  xactly one of th
26f0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72  e following macr
2700: 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  os must be defin
2710: 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a  ed in order to.*
2720: 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68 20  * specify which 
2730: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
2740: 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 75  n subsystem to u
2750: 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 51  se..**.**     SQ
2760: 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c  LITE_SYSTEM_MALL
2770: 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20 55  OC          // U
2780: 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65 6d  se normal system
2790: 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20 20   malloc().**    
27a0: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
27b0: 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20 2f  LLOC           /
27c0: 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74 69  / Use Win32 nati
27d0: 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20 20  ve heap API.**  
27e0: 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d     SQLITE_ZERO_M
27f0: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2800: 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20 61   // Use a stub a
2810: 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61 6c  llocator that al
2820: 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20 20  ways fails.**   
2830: 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55    SQLITE_MEMDEBU
2840: 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  G               
2850: 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65 72  // Debugging ver
2860: 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20 6d  sion of system m
2870: 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f 6e  alloc().**.** On
2880: 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68 65   Windows, if the
2890: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
28a0: 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d 61  LLOC_VALIDATE ma
28b0: 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20 61  cro is defined a
28c0: 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74  nd the.** assert
28d0: 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61 62  () macro is enab
28e0: 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20 69  led, each call i
28f0: 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e 61  nto the Win32 na
2900: 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79 73  tive heap subsys
2910: 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75 73  tem.** will caus
2920: 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20 74  e HeapValidate t
2930: 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49 66  o be called.  If
2940: 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f 6e   heap validation
2950: 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61 6e   should fail, an
2960: 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77 69  .** assertion wi
2970: 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64 2e  ll be triggered.
2980: 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20 6f  .**.** If none o
2990: 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20  f the above are 
29a0: 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73 65  defined, then se
29b0: 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f  t SQLITE_SYSTEM_
29c0: 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68 65  MALLOC as.** the
29d0: 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69 66   default..*/.#if
29e0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
29f0: 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20 5c  SYSTEM_MALLOC) \
2a00: 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51 4c  .  + defined(SQL
2a10: 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f 43  ITE_WIN32_MALLOC
2a20: 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28  ) \.  + defined(
2a30: 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c 4c  SQLITE_ZERO_MALL
2a40: 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65  OC) \.  + define
2a50: 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55  d(SQLITE_MEMDEBU
2a60: 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54 77  G)>1.# error "Tw
2a70: 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65  o or more of the
2a80: 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70 69   following compi
2a90: 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75 72  le-time configur
2aa0: 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a 20  ation options\. 
2ab0: 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74 20  are defined but 
2ac0: 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20 61  at most one is a
2ad0: 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54 45  llowed:\. SQLITE
2ae0: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c 20  _SYSTEM_MALLOC, 
2af0: 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c  SQLITE_WIN32_MAL
2b00: 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d 44  LOC, SQLITE_MEMD
2b10: 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f 5a  EBUG,\. SQLITE_Z
2b20: 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e 64  ERO_MALLOC".#end
2b30: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
2b40: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2b50: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2b60: 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f  ed(SQLITE_WIN32_
2b70: 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65  MALLOC) \.  + de
2b80: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45 52  fined(SQLITE_ZER
2b90: 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20  O_MALLOC) \.  + 
2ba0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2bb0: 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64 65  EMDEBUG)==0.# de
2bc0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53 54  fine SQLITE_SYST
2bd0: 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e 64  EM_MALLOC 1.#end
2be0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51 4c  if../*.** If SQL
2bf0: 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f  ITE_MALLOC_SOFT_
2c00: 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65 72  LIMIT is not zer
2c10: 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20 6b  o, then try to k
2c20: 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65 73  eep the.** sizes
2c30: 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63   of memory alloc
2c40: 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68 69  ations below thi
2c50: 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70 6f  s value where po
2c60: 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20 21  ssible..*/.#if !
2c70: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d  defined(SQLITE_M
2c80: 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49 54  ALLOC_SOFT_LIMIT
2c90: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
2ca0: 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49  E_MALLOC_SOFT_LI
2cb0: 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66 0a  MIT 1024.#endif.
2cc0: 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20 74  ./*.** We need t
2cd0: 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f  o define _XOPEN_
2ce0: 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f 77  SOURCE as follow
2cf0: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
2d00: 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69 76  able.** recursiv
2d10: 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f 73  e mutexes on mos
2d20: 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20 61  t Unix systems a
2d30: 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20 4f  nd fchmod() on O
2d40: 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20 5f  penBSD..** But _
2d50: 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65 66  XOPEN_SOURCE def
2d60: 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62 6c  ine causes probl
2d70: 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20 58  ems for Mac OS X
2d80: 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74 2e  , so omit.** it.
2d90: 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64  .*/.#if !defined
2da0: 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29 20  (_XOPEN_SOURCE) 
2db0: 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44 41  && !defined(__DA
2dc0: 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66 69  RWIN__) && !defi
2dd0: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a 23  ned(__APPLE__).#
2de0: 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e 5f    define _XOPEN_
2df0: 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64 69  SOURCE 600.#endi
2e00: 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47 20  f../*.** NDEBUG 
2e10: 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55 47  and SQLITE_DEBUG
2e20: 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e 20   are opposites. 
2e30: 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61 79   It should alway
2e40: 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a 2a  s be true that.*
2e50: 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  * defined(NDEBUG
2e60: 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c 49  )==!defined(SQLI
2e70: 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20 74  TE_DEBUG).  If t
2e80: 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72 65  his is not curre
2e90: 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d 61  ntly true,.** ma
2ea0: 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64 65  ke it true by de
2eb0: 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66 69  fining or undefi
2ec0: 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a 0a  ning NDEBUG..**.
2ed0: 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42 55  ** Setting NDEBU
2ee0: 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64 65  G makes the code
2ef0: 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61 73   smaller and fas
2f00: 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e 67  ter by disabling
2f10: 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28 29   the.** assert()
2f20: 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20 74   statements in t
2f30: 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65 20  he code.  So we 
2f40: 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c 74  want the default
2f50: 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65   action.** to be
2f60: 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20 62   for NDEBUG to b
2f70: 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55 47  e set and NDEBUG
2f80: 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65 64   to be undefined
2f90: 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45 5f   only if SQLITE_
2fa0: 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74 2e  DEBUG.** is set.
2fb0: 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62 65    Thus NDEBUG be
2fc0: 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e 20  comes an opt-in 
2fd0: 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20 6f  rather than an o
2fe0: 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75 72  pt-out.** featur
2ff0: 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e  e..*/.#if !defin
3000: 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21 64  ed(NDEBUG) && !d
3010: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3020: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e 44  BUG).# define ND
3030: 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23 69  EBUG 1.#endif.#i
3040: 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47  f defined(NDEBUG
3050: 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51 4c  ) && defined(SQL
3060: 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e 64  ITE_DEBUG).# und
3070: 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69 66  ef NDEBUG.#endif
3080: 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20 53  ../*.** Enable S
3090: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
30a0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69 66  LAIN_COMMENTS if
30b0: 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69 73   SQLITE_DEBUG is
30c0: 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a 23   turned on..*/.#
30d0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
30e0: 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49  TE_ENABLE_EXPLAI
30f0: 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20 64  N_COMMENTS) && d
3100: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45  efined(SQLITE_DE
3110: 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53 51  BUG).# define SQ
3120: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c  LITE_ENABLE_EXPL
3130: 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a 23  AIN_COMMENTS 1.#
3140: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
3150: 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63 72   testcase() macr
3160: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69 64  o is used to aid
3170: 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65 73   in coverage tes
3180: 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20 64  ting.  When.** d
3190: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
31a0: 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64 69  sting, the condi
31b0: 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65 20  tion inside the 
31c0: 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20 74  argument to.** t
31d0: 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20 62  estcase() must b
31e0: 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74 68  e evaluated both
31f0: 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20   true and false 
3200: 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67  in order to.** g
3210: 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20 63  et full branch c
3220: 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74 65  overage.  The te
3230: 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20 69  stcase() macro i
3240: 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74 6f  s inserted.** to
3250: 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64 65   help ensure ade
3260: 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65 72  quate test cover
3270: 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77 68  age in places wh
3280: 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63 6f  ere simple.** co
3290: 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f 6e  ndition/decision
32a0: 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e 61   coverage is ina
32b0: 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65 78  dequate.  For ex
32c0: 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65 28  ample, testcase(
32d0: 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65 64  ).** can be used
32e0: 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62 6f   to make sure bo
32f0: 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61 72  undary values ar
3300: 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a 2a  e tested.  For.*
3310: 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73 2c  * bitmask tests,
3320: 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e 20   testcase() can 
3330: 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65 20  be used to make 
3340: 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a 2a  sure each bit.**
3350: 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74 20   is significant 
3360: 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61 73  and used at leas
3370: 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69 74  t once.  On swit
3380: 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a  ch statements.**
3390: 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65 20   where multiple 
33a0: 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65 20  cases go to the 
33b0: 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63 6f  same block of co
33c0: 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a 2a  de, testcase().*
33d0: 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68 61  * can insure tha
33e0: 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65 20  t all cases are 
33f0: 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a 2f  evaluated..**.*/
3400: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 43  .#ifdef SQLITE_C
3410: 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20 76  OVERAGE_TEST.  v
3420: 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65 72  oid sqlite3Cover
3430: 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66 69  age(int);.# defi
3440: 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20 20  ne testcase(X)  
3450: 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65 33  if( X ){ sqlite3
3460: 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45 5f  Coverage(__LINE_
3470: 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64 65  _); }.#else.# de
3480: 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29  fine testcase(X)
3490: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
34a0: 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63 72  he TESTONLY macr
34b0: 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 63  o is used to enc
34c0: 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64 65  lose variable de
34d0: 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a 2a  clarations or.**
34e0: 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20 63   other bits of c
34f0: 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65 65  ode that are nee
3500: 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20 74  ded to support t
3510: 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a 20  he arguments.** 
3520: 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65 28  within testcase(
3530: 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20 6d  ) and assert() m
3540: 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21 64  acros..*/.#if !d
3550: 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20 7c  efined(NDEBUG) |
3560: 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
3570: 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29 0a  _COVERAGE_TEST).
3580: 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c  # define TESTONL
3590: 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20  Y(X)  X.#else.# 
35a0: 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59 28  define TESTONLY(
35b0: 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  X).#endif../*.**
35c0: 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e 65   Sometimes we ne
35d0: 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e  ed a small amoun
35e0: 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20 61  t of code such a
35f0: 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e 69  s a variable ini
3600: 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 74  tialization.** t
3610: 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c 61  o setup for a la
3620: 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74 61  ter assert() sta
3630: 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20 6e  tement.  We do n
3640: 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f 64  ot want this cod
3650: 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20 77  e to.** appear w
3660: 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73 20  hen assert() is 
3670: 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20 66  disabled.  The f
3680: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20 69  ollowing macro i
3690: 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20 75  s therefore.** u
36a0: 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20 74  sed to contain t
36b0: 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e 20  hat setup code. 
36c0: 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f 6e   The "VVA" acron
36d0: 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a  ym stands for.**
36e0: 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c 20   "Verification, 
36f0: 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64 20  Validation, and 
3700: 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e 20  Accreditation". 
3710: 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73 2c   In other words,
3720: 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69 74   the.** code wit
3730: 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20 77  hin VVA_ONLY() w
3740: 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75 72  ill only run dur
3750: 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f 6e  ing verification
3760: 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a 23   processes..*/.#
3770: 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23 20  ifndef NDEBUG.# 
3780: 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28  define VVA_ONLY(
3790: 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64 65  X)  X.#else.# de
37a0: 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58 29  fine VVA_ONLY(X)
37b0: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
37c0: 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e 45  he ALWAYS and NE
37d0: 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72 6f  VER macros surro
37e0: 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72  und boolean expr
37f0: 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a 2a  essions which.**
3800: 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74 6f   are intended to
3810: 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65 20   always be true 
3820: 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65 63  or false, respec
3830: 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a 2a  tively.  Such.**
3840: 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f 75   expressions cou
3850: 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66 72  ld be omitted fr
3860: 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d 70  om the code comp
3870: 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68 65  letely.  But the
3880: 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64 65  y.** are include
3890: 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65 73  d in a few cases
38a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e 68   in order to enh
38b0: 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69 65  ance the resilie
38c0: 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74 65  nce.** of SQLite
38d0: 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20 62   to unexpected b
38e0: 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61 6b  ehavior - to mak
38f0: 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c 66  e the code "self
3900: 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72 20  -healing".** or 
3910: 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65 72  "ductile" rather
3920: 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72 69   than being "bri
3930: 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68 69  ttle" and crashi
3940: 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74 0a  ng at the first.
3950: 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c 61  ** hint of unpla
3960: 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a 2a  nned behavior..*
3970: 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f  *.** In other wo
3980: 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64 20  rds, ALWAYS and 
3990: 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64 20  NEVER are added 
39a0: 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63 6f  for defensive co
39b0: 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20 64  de..**.** When d
39c0: 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74 65  oing coverage te
39d0: 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e 64  sting ALWAYS and
39e0: 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64 2d   NEVER are hard-
39f0: 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20 74  coded to.** be t
3a00: 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73 6f  rue and false so
3a10: 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61 63   that the unreac
3a20: 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79 20  hable code they 
3a30: 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a 20  specify will.** 
3a40: 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20 61  not be counted a
3a50: 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65 2e  s untested code.
3a60: 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28  .*/.#if defined(
3a70: 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45 5f  SQLITE_COVERAGE_
3a80: 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65 64  TEST) || defined
3a90: 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f 4e  (SQLITE_MUTATION
3aa0: 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65 20  _TEST).# define 
3ab0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3ac0: 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56 45  1).# define NEVE
3ad0: 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a 23  R(X)       (0).#
3ae0: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3af0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 41  EBUG).# define A
3b00: 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28 28  LWAYS(X)      ((
3b10: 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29 2c  X)?1:(assert(0),
3b20: 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  0)).# define NEV
3b30: 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58 29  ER(X)       ((X)
3b40: 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30  ?(assert(0),1):0
3b50: 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
3b60: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3b70: 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (X).# define NEV
3b80: 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29 0a  ER(X)       (X).
3b90: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 6f  #endif../*.** So
3ba0: 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72  me malloc failur
3bb0: 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73 73  es are only poss
3bc0: 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f 54  ible if SQLITE_T
3bd0: 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52 45  EST_REALLOC_STRE
3be0: 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65 64  SS is.** defined
3bf0: 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64 65  .  We need to de
3c00: 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68 6f  fend against tho
3c10: 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65 6e  se failures when
3c20: 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a 2a   testing with.**
3c30: 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45 41   SQLITE_TEST_REA
3c40: 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75 74  LLOC_STRESS, but
3c50: 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20 74   we don't want t
3c60: 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20 62  he unreachable b
3c70: 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69 6e  ranches.** durin
3c80: 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c 64  g a normal build
3c90: 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  .  The following
3ca0: 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75 73   macro can be us
3cb0: 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74 65  ed to disable te
3cc0: 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65 20  sts.** that are 
3cd0: 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78 63  always false exc
3ce0: 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45 5f  ept when SQLITE_
3cf0: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
3d00: 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a 23  ESS is set..*/.#
3d10: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3d20: 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53  E_TEST_REALLOC_S
3d30: 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65 20  TRESS).# define 
3d40: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
3d50: 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a 23  STRESS(X)  (X).#
3d60: 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e 44  elif !defined(ND
3d70: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4f  EBUG).# define O
3d80: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
3d90: 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f 28  TRESS(X)  ((X)?(
3da0: 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29 0a  assert(0),1):0).
3db0: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f  #else.# define O
3dc0: 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f 53  NLY_IF_REALLOC_S
3dd0: 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23 65  TRESS(X)  (0).#e
3de0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63 6c  ndif../*.** Decl
3df0: 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66 6f  arations used fo
3e00: 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f 70  r tracing the op
3e10: 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20 69  erating system i
3e20: 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23 69  nterfaces..*/.#i
3e30: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
3e40: 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45 29  _FORCE_OS_TRACE)
3e50: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
3e60: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
3e70: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
3e80: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
3e90: 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78 74  TE_OS_WIN).  ext
3ea0: 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 4f  ern int sqlite3O
3eb0: 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e 65  STrace;.# define
3ec0: 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20 20   OSTRACE(X)     
3ed0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
3ee0: 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74 65  OSTrace ) sqlite
3ef0: 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a 23  3DebugPrintf X.#
3f00: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 48   define SQLITE_H
3f10: 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65 6c  AVE_OS_TRACE.#el
3f20: 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54 52  se.# define OSTR
3f30: 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20 20  ACE(X).# undef  
3f40: 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54  SQLITE_HAVE_OS_T
3f50: 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  RACE.#endif../*.
3f60: 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74 65  ** Is the sqlite
3f70: 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63 74  3ErrName() funct
3f80: 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74 68  ion needed in th
3f90: 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65 6e  e build?  Curren
3fa0: 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e 65  tly,.** it is ne
3fb0: 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f 77  eded by "mutex_w
3fc0: 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62 75  32.c" (when debu
3fd0: 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e 2e  gging), "os_win.
3fe0: 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54 52  c" (when.** OSTR
3ff0: 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29 2c  ACE is enabled),
4000: 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c 20   and by several 
4010: 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73 20  "test*.c" files 
4020: 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63 6f  (which are.** co
4030: 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51 4c  mpiled using SQL
4040: 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23 69  ITE_TEST)..*/.#i
4050: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
4060: 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29 20  _HAVE_OS_TRACE) 
4070: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
4080: 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20 20  E_TEST) || \.   
4090: 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
40a0: 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49 54  _DEBUG) && SQLIT
40b0: 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66 69  E_OS_WIN).# defi
40c0: 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f 45  ne SQLITE_NEED_E
40d0: 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23 20  RR_NAME.#else.# 
40e0: 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e 45  undef  SQLITE_NE
40f0: 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e 64  ED_ERR_NAME.#end
4100: 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54 45  if../*.** SQLITE
4110: 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f  _ENABLE_EXPLAIN_
4120: 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63 6f  COMMENTS is inco
4130: 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51  mpatible with SQ
4140: 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49  LITE_OMIT_EXPLAI
4150: 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  N.*/.#ifdef SQLI
4160: 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e 0a  TE_OMIT_EXPLAIN.
4170: 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  # undef SQLITE_E
4180: 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43 4f  NABLE_EXPLAIN_CO
4190: 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a 2f  MMENTS.#endif../
41a0: 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65  *.** Return true
41b0: 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20 74   (non-zero) if t
41c0: 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20 69  he input is an i
41d0: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 74  nteger that is t
41e0: 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20 66  oo large.** to f
41f0: 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20 20  it in 32-bits.  
4200: 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75 73  This macro is us
4210: 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61 72  ed inside of var
4220: 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29 0a  ious testcase().
4230: 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65 72  ** macros to ver
4240: 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76 65  ify that we have
4250: 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20 66   tested SQLite f
4260: 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73 75  or large-file su
4270: 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69 6e  pport..*/.#defin
4280: 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29 20  e IS_BIG_INT(X) 
4290: 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78 66   (((X)&~(i64)0xf
42a0: 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f 2a  fffffff)!=0)../*
42b0: 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75 6e  .** The macro un
42c0: 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68 69  likely() is a hi
42d0: 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e 64  nt that surround
42e0: 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 65  s a boolean.** e
42f0: 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20 69  xpression that i
4300: 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65 2e  s usually false.
4310: 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28 29    Macro likely()
4320: 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61 20   surrounds.** a 
4330: 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73 69  boolean expressi
4340: 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61 6c  on that is usual
4350: 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65 20  ly true.  These 
4360: 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a 20  hints could,.** 
4370: 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75 73  in theory, be us
4380: 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69 6c  ed by the compil
4390: 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20 62  er to generate b
43a0: 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74 0a  etter code, but.
43b0: 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68 65  ** currently the
43c0: 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d 65  y are just comme
43d0: 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72 65  nts for human re
43e0: 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  aders..*/.#defin
43f0: 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20 28  e likely(X)    (
4400: 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69 6b  X).#define unlik
4410: 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69 6e  ely(X)  (X)..#in
4420: 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a 23  clude "hash.h".#
4430: 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e 68  include "parse.h
4440: 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 69  ".#include <stdi
4450: 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73  o.h>.#include <s
4460: 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75 64  tdlib.h>.#includ
4470: 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69 6e  e <string.h>.#in
4480: 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68 3e  clude <assert.h>
4490: 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64 65  .#include <stdde
44a0: 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63  f.h>../*.** If c
44b0: 6f 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70  ompiling for a p
44c0: 72 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61  rocessor that la
44d0: 63 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69  cks floating poi
44e0: 6e 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73  nt support,.** s
44f0: 75 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65  ubstitute intege
4500: 72 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70  r for floating-p
4510: 6f 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53  oint.*/.#ifdef S
4520: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54  QLITE_OMIT_FLOAT
4530: 49 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69  ING_POINT.# defi
4540: 6e 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65  ne double sqlite
4550: 5f 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20  _int64.# define 
4560: 66 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74  float sqlite_int
4570: 36 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47  64.# define LONG
4580: 44 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69  DOUBLE_TYPE sqli
4590: 74 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65  te_int64.# ifnde
45a0: 66 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c  f SQLITE_BIG_DBL
45b0: 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49  .#   define SQLI
45c0: 54 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71  TE_BIG_DBL (((sq
45d0: 6c 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c  lite3_int64)1)<<
45e0: 35 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65  50).# endif.# de
45f0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fine SQLITE_OMIT
4600: 5f 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20  _DATETIME_FUNCS 
4610: 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  1.# define SQLIT
4620: 45 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23  E_OMIT_TRACE 1.#
4630: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49   undef SQLITE_MI
4640: 58 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54  XED_ENDIAN_64BIT
4650: 5f 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53  _FLOAT.# undef S
4660: 51 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e  QLITE_HAVE_ISNAN
4670: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4680: 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23  SQLITE_BIG_DBL.#
4690: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42   define SQLITE_B
46a0: 49 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65  IG_DBL (1e99).#e
46b0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54  ndif../*.** OMIT
46c0: 5f 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74  _TEMPDB is set t
46d0: 6f 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d  o 1 if SQLITE_OM
46e0: 49 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66  IT_TEMPDB is def
46f0: 69 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66  ined, or 0.** af
4700: 74 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20  terward. Having 
4710: 74 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77  this macro allow
4720: 73 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68  s us to cause th
4730: 65 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20  e C compiler.** 
4740: 74 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65  to omit code use
4750: 64 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73  d by TEMP tables
4760: 20 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23   without messy #
4770: 69 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74  ifndef statement
4780: 73 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  s..*/.#ifdef SQL
4790: 49 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a  ITE_OMIT_TEMPDB.
47a0: 23 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d  #define OMIT_TEM
47b0: 50 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66  PDB 1.#else.#def
47c0: 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  ine OMIT_TEMPDB 
47d0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
47e0: 54 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74  The "file format
47f0: 22 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69  " number is an i
4800: 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69  nteger that is i
4810: 6e 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65  ncremented whene
4820: 76 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d  ver.** the VDBE-
4830: 6c 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61  level file forma
4840: 74 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20  t changes.  The 
4850: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73  following macros
4860: 20 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74   define the.** t
4870: 68 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20  he default file 
4880: 66 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64  format for new d
4890: 61 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65  atabases and the
48a0: 20 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f   maximum file fo
48b0: 72 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65  rmat.** that the
48c0: 20 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61   library can rea
48d0: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  d..*/.#define SQ
48e0: 4c 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f  LITE_MAX_FILE_FO
48f0: 52 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53  RMAT 4.#ifndef S
4900: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49  QLITE_DEFAULT_FI
4910: 4c 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69  LE_FORMAT.# defi
4920: 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ne SQLITE_DEFAUL
4930: 54 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a  T_FILE_FORMAT 4.
4940: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65  #endif../*.** De
4950: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
4960: 74 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63  triggers are rec
4970: 75 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c  ursive by defaul
4980: 74 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a  t.  This can be.
4990: 2a 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75  ** changed at ru
49a0: 6e 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70  n-time using a p
49b0: 72 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ragma..*/.#ifnde
49c0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
49d0: 5f 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47  _RECURSIVE_TRIGG
49e0: 45 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  ERS.# define SQL
49f0: 49 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55  ITE_DEFAULT_RECU
4a00: 52 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30  RSIVE_TRIGGERS 0
4a10: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50  .#endif../*.** P
4a20: 72 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74  rovide a default
4a30: 20 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54   value for SQLIT
4a40: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20  E_TEMP_STORE in 
4a50: 63 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73  case it is not s
4a60: 70 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74  pecified.** on t
4a70: 68 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a  he command-line.
4a80: 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  */.#ifndef SQLIT
4a90: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64  E_TEMP_STORE.# d
4aa0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d  efine SQLITE_TEM
4ab0: 50 5f 53 54 4f 52 45 20 31 0a 23 20 64 65 66 69  P_STORE 1.# defi
4ac0: 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  ne SQLITE_TEMP_S
4ad0: 54 4f 52 45 5f 78 63 20 31 20 20 2f 2a 20 45 78  TORE_xc 1  /* Ex
4ae0: 63 6c 75 64 65 20 66 72 6f 6d 20 63 74 69 6d 65  clude from ctime
4af0: 2e 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  .c */.#endif../*
4b00: 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c 75 65 20  .** If no value 
4b10: 68 61 73 20 62 65 65 6e 20 70 72 6f 76 69 64 65  has been provide
4b20: 64 20 66 6f 72 20 53 51 4c 49 54 45 5f 4d 41 58  d for SQLITE_MAX
4b30: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c  _WORKER_THREADS,
4b40: 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c 49 54 45   or if.** SQLITE
4b50: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 73 20 73  _TEMP_STORE is s
4b60: 65 74 20 74 6f 20 33 20 28 6e 65 76 65 72 20 75  et to 3 (never u
4b70: 73 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c  se temporary fil
4b80: 65 73 29 2c 20 73 65 74 20 69 74 0a 2a 2a 20 74  es), set it.** t
4b90: 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69 66 20 53  o zero..*/.#if S
4ba0: 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45  QLITE_TEMP_STORE
4bb0: 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45 5f 54 48  ==3 || SQLITE_TH
4bc0: 52 45 41 44 53 41 46 45 3d 3d 30 0a 23 20 75 6e  READSAFE==0.# un
4bd0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  def SQLITE_MAX_W
4be0: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
4bf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41  define SQLITE_MA
4c00: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
4c10: 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
4c20: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4c30: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4c40: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4c50: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 38  WORKER_THREADS 8
4c60: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
4c70: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
4c80: 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20  ORKER_THREADS.# 
4c90: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
4ca0: 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52  FAULT_WORKER_THR
4cb0: 45 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69  EADS 0.#endif.#i
4cc0: 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  f SQLITE_DEFAULT
4cd0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e  _WORKER_THREADS>
4ce0: 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45  SQLITE_MAX_WORKE
4cf0: 52 5f 54 48 52 45 41 44 53 0a 23 20 75 6e 64 65  R_THREADS.# unde
4d00: 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f 52  f SQLITE_MAX_WOR
4d10: 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 64 65  KER_THREADS.# de
4d20: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f  fine SQLITE_MAX_
4d30: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 20 53  WORKER_THREADS S
4d40: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 4f  QLITE_DEFAULT_WO
4d50: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 65 6e  RKER_THREADS.#en
4d60: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 64  dif../*.** The d
4d70: 65 66 61 75 6c 74 20 69 6e 69 74 69 61 6c 20 61  efault initial a
4d80: 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72 20 74 68  llocation for th
4d90: 65 20 70 61 67 65 63 61 63 68 65 20 77 68 65 6e  e pagecache when
4da0: 20 75 73 69 6e 67 20 73 65 70 61 72 61 74 65 0a   using separate.
4db0: 2a 2a 20 70 61 67 65 63 61 63 68 65 73 20 66 6f  ** pagecaches fo
4dc0: 72 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20  r each database 
4dd0: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 20 70  connection.  A p
4de0: 6f 73 69 74 69 76 65 20 6e 75 6d 62 65 72 20 69  ositive number i
4df0: 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62 65 72 20  s the.** number 
4e00: 6f 66 20 70 61 67 65 73 2e 20 20 41 20 6e 65 67  of pages.  A neg
4e10: 61 74 69 76 65 20 6e 75 6d 62 65 72 20 4e 20 74  ative number N t
4e20: 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d 65 61 6e  ranslations mean
4e30: 73 20 74 68 61 74 20 61 20 62 75 66 66 65 72 0a  s that a buffer.
4e40: 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e 20 62 79  ** of -1024*N by
4e50: 74 65 73 20 69 73 20 61 6c 6c 6f 63 61 74 65 64  tes is allocated
4e60: 20 61 6e 64 20 75 73 65 64 20 66 6f 72 20 61 73   and used for as
4e70: 20 6d 61 6e 79 20 70 61 67 65 73 20 61 73 20 69   many pages as i
4e80: 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a 2a 2f 0a  t will hold..*/.
4e90: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 44  #ifndef SQLITE_D
4ea0: 45 46 41 55 4c 54 5f 50 43 41 43 48 45 5f 49 4e  EFAULT_PCACHE_IN
4eb0: 49 54 53 5a 0a 23 20 64 65 66 69 6e 65 20 53 51  ITSZ.# define SQ
4ec0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41  LITE_DEFAULT_PCA
4ed0: 43 48 45 5f 49 4e 49 54 53 5a 20 31 30 30 0a 23  CHE_INITSZ 100.#
4ee0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 47 43 43  endif../*.** GCC
4ef0: 20 64 6f 65 73 20 6e 6f 74 20 64 65 66 69 6e 65   does not define
4f00: 20 74 68 65 20 6f 66 66 73 65 74 6f 66 28 29 20   the offsetof() 
4f10: 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c 6c 20 68  macro so we'll h
4f20: 61 76 65 20 74 6f 20 64 6f 20 69 74 0a 2a 2a 20  ave to do it.** 
4f30: 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f 0a 23 69  ourselves..*/.#i
4f40: 66 6e 64 65 66 20 6f 66 66 73 65 74 6f 66 0a 23  fndef offsetof.#
4f50: 64 65 66 69 6e 65 20 6f 66 66 73 65 74 6f 66 28  define offsetof(
4f60: 53 54 52 55 43 54 55 52 45 2c 46 49 45 4c 44 29  STRUCTURE,FIELD)
4f70: 20 28 28 69 6e 74 29 28 28 63 68 61 72 2a 29 26   ((int)((char*)&
4f80: 28 28 53 54 52 55 43 54 55 52 45 2a 29 30 29 2d  ((STRUCTURE*)0)-
4f90: 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64 69 66 0a  >FIELD)).#endif.
4fa0: 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f  ./*.** Macros to
4fb0: 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69 6d 75 6d   compute minimum
4fc0: 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20 6f 66 20   and maximum of 
4fd0: 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a 2a 2f 0a  two numbers..*/.
4fe0: 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23 20 64 65  #ifndef MIN.# de
4ff0: 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29 20 28 28  fine MIN(A,B) ((
5000: 41 29 3c 28 42 29 3f 28 41 29 3a 28 42 29 29 0a  A)<(B)?(A):(B)).
5010: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4d  #endif.#ifndef M
5020: 41 58 0a 23 20 64 65 66 69 6e 65 20 4d 41 58 28  AX.# define MAX(
5030: 41 2c 42 29 20 28 28 41 29 3e 28 42 29 3f 28 41  A,B) ((A)>(B)?(A
5040: 29 3a 28 42 29 29 0a 23 65 6e 64 69 66 0a 0a 2f  ):(B)).#endif../
5050: 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f 20 6f 62  *.** Swap two ob
5060: 6a 65 63 74 73 20 6f 66 20 74 79 70 65 20 54 59  jects of type TY
5070: 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  PE..*/.#define S
5080: 57 41 50 28 54 59 50 45 2c 41 2c 42 29 20 7b 54  WAP(TYPE,A,B) {T
5090: 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b 20 42 3d  YPE t=A; A=B; B=
50a0: 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 65 63 6b  t;}../*.** Check
50b0: 20 74 6f 20 73 65 65 20 69 66 20 74 68 69 73 20   to see if this 
50c0: 6d 61 63 68 69 6e 65 20 75 73 65 73 20 45 42 43  machine uses EBC
50d0: 44 49 43 2e 20 20 28 59 65 73 2c 20 62 65 6c 69  DIC.  (Yes, beli
50e0: 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20 6e 6f 74  eve it or.** not
50f0: 2c 20 74 68 65 72 65 20 61 72 65 20 73 74 69 6c  , there are stil
5100: 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75 74 20 74  l machines out t
5110: 68 65 72 65 20 74 68 61 74 20 75 73 65 20 45 42  here that use EB
5120: 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66 20 27 41  CDIC.).*/.#if 'A
5130: 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23 20 64 65  ' == '\301'.# de
5140: 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 42 43 44  fine SQLITE_EBCD
5150: 49 43 20 31 0a 23 65 6c 73 65 0a 23 20 64 65 66  IC 1.#else.# def
5160: 69 6e 65 20 53 51 4c 49 54 45 5f 41 53 43 49 49  ine SQLITE_ASCII
5170: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
5180: 20 49 6e 74 65 67 65 72 73 20 6f 66 20 6b 6e 6f   Integers of kno
5190: 77 6e 20 73 69 7a 65 73 2e 20 20 54 68 65 73 65  wn sizes.  These
51a0: 20 74 79 70 65 64 65 66 73 20 6d 69 67 68 74 20   typedefs might 
51b0: 63 68 61 6e 67 65 20 66 6f 72 20 61 72 63 68 69  change for archi
51c0: 74 65 63 74 75 72 65 73 0a 2a 2a 20 77 68 65 72  tectures.** wher
51d0: 65 20 74 68 65 20 73 69 7a 65 73 20 76 65 72 79  e the sizes very
51e0: 2e 20 20 50 72 65 70 72 6f 63 65 73 73 6f 72 20  .  Preprocessor 
51f0: 6d 61 63 72 6f 73 20 61 72 65 20 61 76 61 69 6c  macros are avail
5200: 61 62 6c 65 20 73 6f 20 74 68 61 74 20 74 68 65  able so that the
5210: 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e 20 62 65  .** types can be
5220: 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79 20 72 65   conveniently re
5230: 64 65 66 69 6e 65 64 20 61 74 20 63 6f 6d 70 69  defined at compi
5240: 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b 65 20 74  le-type.  Like t
5250: 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  his:.**.**      
5260: 20 20 20 63 63 20 27 2d 44 55 49 4e 54 50 54 52     cc '-DUINTPTR
5270: 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f 6e 67 20  _TYPE=long long 
5280: 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23 69 66 6e  int' ....*/.#ifn
5290: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 0a  def UINT32_TYPE.
52a0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 55 49 4e  # ifdef HAVE_UIN
52b0: 54 33 32 5f 54 0a 23 20 20 64 65 66 69 6e 65 20  T32_T.#  define 
52c0: 55 49 4e 54 33 32 5f 54 59 50 45 20 75 69 6e 74  UINT32_TYPE uint
52d0: 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  32_t.# else.#  d
52e0: 65 66 69 6e 65 20 55 49 4e 54 33 32 5f 54 59 50  efine UINT32_TYP
52f0: 45 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 0a 23  E unsigned int.#
5300: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5310: 66 6e 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50  fndef UINT16_TYP
5320: 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f 55  E.# ifdef HAVE_U
5330: 49 4e 54 31 36 5f 54 0a 23 20 20 64 65 66 69 6e  INT16_T.#  defin
5340: 65 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 69  e UINT16_TYPE ui
5350: 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65 0a 23 20  nt16_t.# else.# 
5360: 20 64 65 66 69 6e 65 20 55 49 4e 54 31 36 5f 54   define UINT16_T
5370: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 73 68 6f  YPE unsigned sho
5380: 72 74 20 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23  rt int.# endif.#
5390: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 49 4e  endif.#ifndef IN
53a0: 54 31 36 5f 54 59 50 45 0a 23 20 69 66 64 65 66  T16_TYPE.# ifdef
53b0: 20 48 41 56 45 5f 49 4e 54 31 36 5f 54 0a 23 20   HAVE_INT16_T.# 
53c0: 20 64 65 66 69 6e 65 20 49 4e 54 31 36 5f 54 59   define INT16_TY
53d0: 50 45 20 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73  PE int16_t.# els
53e0: 65 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31  e.#  define INT1
53f0: 36 5f 54 59 50 45 20 73 68 6f 72 74 20 69 6e 74  6_TYPE short int
5400: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5410: 23 69 66 6e 64 65 66 20 55 49 4e 54 38 5f 54 59  #ifndef UINT8_TY
5420: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5430: 55 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e  UINT8_T.#  defin
5440: 65 20 55 49 4e 54 38 5f 54 59 50 45 20 75 69 6e  e UINT8_TYPE uin
5450: 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23 20 20 64  t8_t.# else.#  d
5460: 65 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45  efine UINT8_TYPE
5470: 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 0a 23   unsigned char.#
5480: 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69   endif.#endif.#i
5490: 66 6e 64 65 66 20 49 4e 54 38 5f 54 59 50 45 0a  fndef INT8_TYPE.
54a0: 23 20 69 66 64 65 66 20 48 41 56 45 5f 49 4e 54  # ifdef HAVE_INT
54b0: 38 5f 54 0a 23 20 20 64 65 66 69 6e 65 20 49 4e  8_T.#  define IN
54c0: 54 38 5f 54 59 50 45 20 69 6e 74 38 5f 74 0a 23  T8_TYPE int8_t.#
54d0: 20 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20   else.#  define 
54e0: 49 4e 54 38 5f 54 59 50 45 20 73 69 67 6e 65 64  INT8_TYPE signed
54f0: 20 63 68 61 72 0a 23 20 65 6e 64 69 66 0a 23 65   char.# endif.#e
5500: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 4c 4f 4e  ndif.#ifndef LON
5510: 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a 23 20 64  GDOUBLE_TYPE.# d
5520: 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55 42 4c 45  efine LONGDOUBLE
5530: 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f 75 62 6c  _TYPE long doubl
5540: 65 0a 23 65 6e 64 69 66 0a 74 79 70 65 64 65 66  e.#endif.typedef
5550: 20 73 71 6c 69 74 65 5f 69 6e 74 36 34 20 69 36   sqlite_int64 i6
5560: 34 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 38  4;          /* 8
5570: 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69 6e 74  -byte signed int
5580: 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66 20  eger */.typedef 
5590: 73 71 6c 69 74 65 5f 75 69 6e 74 36 34 20 75 36  sqlite_uint64 u6
55a0: 34 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 38 2d  4;         /* 8-
55b0: 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69 6e  byte unsigned in
55c0: 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65 66  teger */.typedef
55d0: 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75 33 32   UINT32_TYPE u32
55e0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 34  ;           /* 4
55f0: 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20 69  -byte unsigned i
5600: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
5610: 66 20 55 49 4e 54 31 36 5f 54 59 50 45 20 75 31  f UINT16_TYPE u1
5620: 36 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  6;           /* 
5630: 32 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  2-byte unsigned 
5640: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5650: 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 69 31  ef INT16_TYPE i1
5660: 36 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  6;            /*
5670: 20 32 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   2-byte signed i
5680: 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64 65  nteger */.typede
5690: 66 20 55 49 4e 54 38 5f 54 59 50 45 20 75 38 3b  f UINT8_TYPE u8;
56a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
56b0: 31 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64 20  1-byte unsigned 
56c0: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
56d0: 65 66 20 49 4e 54 38 5f 54 59 50 45 20 69 38 3b  ef INT8_TYPE i8;
56e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
56f0: 20 31 2d 62 79 74 65 20 73 69 67 6e 65 64 20 69   1-byte signed i
5700: 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  nteger */../*.**
5710: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33 32 20   SQLITE_MAX_U32 
5720: 69 73 20 61 20 75 36 34 20 63 6f 6e 73 74 61 6e  is a u64 constan
5730: 74 20 74 68 61 74 20 69 73 20 74 68 65 20 6d 61  t that is the ma
5740: 78 69 6d 75 6d 20 75 36 34 20 76 61 6c 75 65 0a  ximum u64 value.
5750: 2a 2a 20 74 68 61 74 20 63 61 6e 20 62 65 20 73  ** that can be s
5760: 74 6f 72 65 64 20 69 6e 20 61 20 75 33 32 20 77  tored in a u32 w
5770: 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f 66 20 64  ithout loss of d
5780: 61 74 61 2e 20 20 54 68 65 20 76 61 6c 75 65 0a  ata.  The value.
5790: 2a 2a 20 69 73 20 30 78 30 30 30 30 30 30 30 30  ** is 0x00000000
57a0: 66 66 66 66 66 66 66 66 2e 20 20 42 75 74 20 62  ffffffff.  But b
57b0: 65 63 61 75 73 65 20 6f 66 20 71 75 69 72 6b 73  ecause of quirks
57c0: 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70 69 6c 65   of some compile
57d0: 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76 65 20 74  rs, we.** have t
57e0: 6f 20 73 70 65 63 69 66 79 20 74 68 65 20 76 61  o specify the va
57f0: 6c 75 65 20 69 6e 20 74 68 65 20 6c 65 73 73 20  lue in the less 
5800: 69 6e 74 75 69 74 69 76 65 20 6d 61 6e 6e 65 72  intuitive manner
5810: 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64 65 66 69   shown:.*/.#defi
5820: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55 33  ne SQLITE_MAX_U3
5830: 32 20 20 28 28 28 28 75 36 34 29 31 29 3c 3c 33  2  ((((u64)1)<<3
5840: 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  2)-1)../*.** The
5850: 20 64 61 74 61 74 79 70 65 20 75 73 65 64 20 74   datatype used t
5860: 6f 20 73 74 6f 72 65 20 65 73 74 69 6d 61 74 65  o store estimate
5870: 73 20 6f 66 20 74 68 65 20 6e 75 6d 62 65 72 20  s of the number 
5880: 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a 2a 2a 20  of rows in a.** 
5890: 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 2e 20  table or index. 
58a0: 20 54 68 69 73 20 69 73 20 61 6e 20 75 6e 73 69   This is an unsi
58b0: 67 6e 65 64 20 69 6e 74 65 67 65 72 20 74 79 70  gned integer typ
58c0: 65 2e 20 20 46 6f 72 20 39 39 2e 39 25 20 6f 66  e.  For 99.9% of
58d0: 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64 2c 20 61  .** the world, a
58e0: 20 33 32 2d 62 69 74 20 69 6e 74 65 67 65 72 20   32-bit integer 
58f0: 69 73 20 73 75 66 66 69 63 69 65 6e 74 2e 20 20  is sufficient.  
5900: 42 75 74 20 61 20 36 34 2d 62 69 74 20 69 6e 74  But a 64-bit int
5910: 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62 65 20 75  eger.** can be u
5920: 73 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74  sed at compile-t
5930: 69 6d 65 20 69 66 20 64 65 73 69 72 65 64 2e 0a  ime if desired..
5940: 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
5950: 5f 36 34 42 49 54 5f 53 54 41 54 53 0a 20 74 79  _64BIT_STATS. ty
5960: 70 65 64 65 66 20 75 36 34 20 74 52 6f 77 63 6e  pedef u64 tRowcn
5970: 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62 69 74 20  t;    /* 64-bit 
5980: 6f 6e 6c 79 20 69 66 20 72 65 71 75 65 73 74 65  only if requeste
5990: 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  d at compile-tim
59a0: 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74 79 70 65  e */.#else. type
59b0: 64 65 66 20 75 33 32 20 74 52 6f 77 63 6e 74 3b  def u32 tRowcnt;
59c0: 20 20 20 20 2f 2a 20 33 32 2d 62 69 74 20 69 73      /* 32-bit is
59d0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 2a 2f 0a   the default */.
59e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 73  #endif../*.** Es
59f0: 74 69 6d 61 74 65 64 20 71 75 61 6e 74 69 74 69  timated quantiti
5a00: 65 73 20 75 73 65 64 20 66 6f 72 20 71 75 65 72  es used for quer
5a10: 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72 65 20 73  y planning are s
5a20: 74 6f 72 65 64 20 61 73 20 31 36 2d 62 69 74 0a  tored as 16-bit.
5a30: 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73 2e 20 20  ** logarithms.  
5a40: 46 6f 72 20 71 75 61 6e 74 69 74 79 20 58 2c 20  For quantity X, 
5a50: 74 68 65 20 76 61 6c 75 65 20 73 74 6f 72 65 64  the value stored
5a60: 20 69 73 20 31 30 2a 6c 6f 67 32 28 58 29 2e 20   is 10*log2(X). 
5a70: 20 54 68 69 73 0a 2a 2a 20 67 69 76 65 73 20 61   This.** gives a
5a80: 20 70 6f 73 73 69 62 6c 65 20 72 61 6e 67 65 20   possible range 
5a90: 6f 66 20 76 61 6c 75 65 73 20 6f 66 20 61 70 70  of values of app
5aa0: 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e 30 65 39  roximately 1.0e9
5ab0: 38 36 20 74 6f 20 31 65 2d 39 38 36 2e 0a 2a 2a  86 to 1e-986..**
5ac0: 20 42 75 74 20 74 68 65 20 61 6c 6c 6f 77 65 64   But the allowed
5ad0: 20 76 61 6c 75 65 73 20 61 72 65 20 22 67 72 61   values are "gra
5ae0: 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76 65 72 79  iny".  Not every
5af0: 20 76 61 6c 75 65 20 69 73 20 72 65 70 72 65 73   value is repres
5b00: 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20  entable..** For 
5b10: 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e 74 69 74  example, quantit
5b20: 69 65 73 20 31 36 20 61 6e 64 20 31 37 20 61 72  ies 16 and 17 ar
5b30: 65 20 62 6f 74 68 20 72 65 70 72 65 73 65 6e 74  e both represent
5b40: 65 64 20 62 79 20 61 20 4c 6f 67 45 73 74 0a 2a  ed by a LogEst.*
5b50: 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77 65 76 65  * of 40.  Howeve
5b60: 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45 73 74 20  r, since LogEst 
5b70: 71 75 61 6e 74 69 74 69 65 73 20 61 72 65 20 73  quantities are s
5b80: 75 70 70 6f 73 65 20 74 6f 20 62 65 20 65 73 74  uppose to be est
5b90: 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f 74 20 65  imates,.** not e
5ba0: 78 61 63 74 20 76 61 6c 75 65 73 2c 20 74 68 69  xact values, thi
5bb0: 73 20 69 6d 70 72 65 63 69 73 69 6f 6e 20 69 73  s imprecision is
5bc0: 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65 6d 2e 0a   not a problem..
5bd0: 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74 22 20 69  **.** "LogEst" i
5be0: 73 20 73 68 6f 72 74 20 66 6f 72 20 22 4c 6f 67  s short for "Log
5bf0: 61 72 69 74 68 6d 69 63 20 45 73 74 69 6d 61 74  arithmic Estimat
5c00: 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61 6d 70 6c  e"..**.** Exampl
5c10: 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31 20 2d 3e  es:.**      1 ->
5c20: 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
5c30: 32 30 20 2d 3e 20 34 33 20 20 20 20 20 20 20 20  20 -> 43        
5c40: 20 20 31 30 30 30 30 20 2d 3e 20 31 33 32 0a 2a    10000 -> 132.*
5c50: 2a 20 20 20 20 20 20 32 20 2d 3e 20 31 30 20 20  *      2 -> 10  
5c60: 20 20 20 20 20 20 20 20 20 20 20 32 35 20 2d 3e             25 ->
5c70: 20 34 36 20 20 20 20 20 20 20 20 20 20 32 35 30   46          250
5c80: 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20 20 20 20  00 -> 146.**    
5c90: 20 20 33 20 2d 3e 20 31 36 20 20 20 20 20 20 20    3 -> 16       
5ca0: 20 20 20 20 20 31 30 30 20 2d 3e 20 36 36 20 20       100 -> 66  
5cb0: 20 20 20 20 20 20 31 30 30 30 30 30 30 20 2d 3e        1000000 ->
5cc0: 20 31 39 39 0a 2a 2a 20 20 20 20 20 20 34 20 2d   199.**      4 -
5cd0: 3e 20 32 30 20 20 20 20 20 20 20 20 20 20 20 31  > 20           1
5ce0: 30 30 30 20 2d 3e 20 39 39 20 20 20 20 20 20 20  000 -> 99       
5cf0: 20 31 30 34 38 35 37 36 20 2d 3e 20 32 30 30 0a   1048576 -> 200.
5d00: 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20 33 33 20  **     10 -> 33 
5d10: 20 20 20 20 20 20 20 20 20 20 31 30 32 34 20 2d            1024 -
5d20: 3e 20 31 30 30 20 20 20 20 34 32 39 34 39 36 37  > 100    4294967
5d30: 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a 0a 2a 2a  296 -> 320.**.**
5d40: 20 54 68 65 20 4c 6f 67 45 73 74 20 63 61 6e 20   The LogEst can 
5d50: 62 65 20 6e 65 67 61 74 69 76 65 20 74 6f 20 69  be negative to i
5d60: 6e 64 69 63 61 74 65 20 66 72 61 63 74 69 6f 6e  ndicate fraction
5d70: 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a 20 45 78  al values..** Ex
5d80: 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  amples:.**.**   
5d90: 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20 20 20 20   0.5 -> -10     
5da0: 20 20 20 20 20 20 30 2e 31 20 2d 3e 20 2d 33 33        0.1 -> -33
5db0: 20 20 20 20 20 20 20 20 30 2e 30 36 32 35 20 2d          0.0625 -
5dc0: 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65 64 65 66  > -40.*/.typedef
5dd0: 20 49 4e 54 31 36 5f 54 59 50 45 20 4c 6f 67 45   INT16_TYPE LogE
5de0: 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74  st;../*.** Set t
5df0: 68 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  he SQLITE_PTRSIZ
5e00: 45 20 6d 61 63 72 6f 20 74 6f 20 74 68 65 20 6e  E macro to the n
5e10: 75 6d 62 65 72 20 6f 66 20 62 79 74 65 73 20 69  umber of bytes i
5e20: 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23  n a pointer.*/.#
5e30: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 50 54  ifndef SQLITE_PT
5e40: 52 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e  RSIZE.# if defin
5e50: 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e  ed(__SIZEOF_POIN
5e60: 54 45 52 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e  TER__).#   defin
5e70: 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45  e SQLITE_PTRSIZE
5e80: 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49 4e 54 45   __SIZEOF_POINTE
5e90: 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65 66 69 6e  R__.# elif defin
5ea0: 65 64 28 69 33 38 36 29 20 20 20 20 20 7c 7c 20  ed(i386)     || 
5eb0: 64 65 66 69 6e 65 64 28 5f 5f 69 33 38 36 5f 5f  defined(__i386__
5ec0: 29 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f  )   || defined(_
5ed0: 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20 20 5c 0a  M_IX86) ||    \.
5ee0: 20 20 20 20 20 20 20 64 65 66 69 6e 65 64 28 5f         defined(_
5ef0: 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64 65 66 69  M_ARM)   || defi
5f00: 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20 20 20 20  ned(__arm__)    
5f10: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
5f20: 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c  ).#   define SQL
5f30: 49 54 45 5f 50 54 52 53 49 5a 45 20 34 0a 23 20  ITE_PTRSIZE 4.# 
5f40: 65 6c 73 65 0a 23 20 20 20 64 65 66 69 6e 65 20  else.#   define 
5f50: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 38  SQLITE_PTRSIZE 8
5f60: 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  .# endif.#endif.
5f70: 0a 2f 2a 20 54 68 65 20 75 70 74 72 20 74 79 70  ./* The uptr typ
5f80: 65 20 69 73 20 61 6e 20 75 6e 73 69 67 6e 65 64  e is an unsigned
5f90: 20 69 6e 74 65 67 65 72 20 6c 61 72 67 65 20 65   integer large e
5fa0: 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64 20 61 20  nough to hold a 
5fb0: 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69 66 20 64  pointer.*/.#if d
5fc0: 65 66 69 6e 65 64 28 48 41 56 45 5f 53 54 44 49  efined(HAVE_STDI
5fd0: 4e 54 5f 48 29 0a 20 20 74 79 70 65 64 65 66 20  NT_H).  typedef 
5fe0: 75 69 6e 74 70 74 72 5f 74 20 75 70 74 72 3b 0a  uintptr_t uptr;.
5ff0: 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 50 54 52  #elif SQLITE_PTR
6000: 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70 65 64 65  SIZE==4.  typede
6010: 66 20 75 33 32 20 75 70 74 72 3b 0a 23 65 6c 73  f u32 uptr;.#els
6020: 65 0a 20 20 74 79 70 65 64 65 66 20 75 36 34 20  e.  typedef u64 
6030: 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a  uptr;.#endif../*
6040: 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 57  .** The SQLITE_W
6050: 49 54 48 49 4e 28 50 2c 53 2c 45 29 20 6d 61 63  ITHIN(P,S,E) mac
6060: 72 6f 20 63 68 65 63 6b 73 20 74 6f 20 73 65 65  ro checks to see
6070: 20 69 66 20 70 6f 69 6e 74 65 72 20 50 20 70 6f   if pointer P po
6080: 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f 6d 65 74  ints to.** somet
6090: 68 69 6e 67 20 62 65 74 77 65 65 6e 20 53 20 28  hing between S (
60a0: 69 6e 63 6c 75 73 69 76 65 29 20 61 6e 64 20 45  inclusive) and E
60b0: 20 28 65 78 63 6c 75 73 69 76 65 29 2e 0a 2a 2a   (exclusive)..**
60c0: 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72  .** In other wor
60d0: 64 73 2c 20 53 20 69 73 20 61 20 62 75 66 66 65  ds, S is a buffe
60e0: 72 20 61 6e 64 20 45 20 69 73 20 61 20 70 6f 69  r and E is a poi
60f0: 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72 73  nter to the firs
6100: 74 20 62 79 74 65 20 61 66 74 65 72 0a 2a 2a 20  t byte after.** 
6110: 74 68 65 20 65 6e 64 20 6f 66 20 62 75 66 66 65  the end of buffe
6120: 72 20 53 2e 20 20 54 68 69 73 20 6d 61 63 72 6f  r S.  This macro
6130: 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
6140: 20 50 20 70 6f 69 6e 74 73 20 74 6f 20 73 6f 6d   P points to som
6150: 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e 74 61 69  ething.** contai
6160: 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  ned within the b
6170: 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23 64 65 66  uffer S..*/.#def
6180: 69 6e 65 20 53 51 4c 49 54 45 5f 57 49 54 48 49  ine SQLITE_WITHI
6190: 4e 28 50 2c 53 2c 45 29 20 28 28 28 75 70 74 72  N(P,S,E) (((uptr
61a0: 29 28 50 29 3e 3d 28 75 70 74 72 29 28 53 29 29  )(P)>=(uptr)(S))
61b0: 26 26 28 28 75 70 74 72 29 28 50 29 3c 28 75 70  &&((uptr)(P)<(up
61c0: 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a 0a 2a 2a  tr)(E))).../*.**
61d0: 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72   Macros to deter
61e0: 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74 68 65  mine whether the
61f0: 20 6d 61 63 68 69 6e 65 20 69 73 20 62 69 67 20   machine is big 
6200: 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64 69 61 6e  or little endian
6210: 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74 68 65 72  ,.** and whether
6220: 20 6f 72 20 6e 6f 74 20 74 68 61 74 20 64 65 74   or not that det
6230: 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73 20 72 75  ermination is ru
6240: 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d 70 69 6c  n-time or compil
6250: 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 46 6f  e-time..**.** Fo
6260: 72 20 62 65 73 74 20 70 65 72 66 6f 72 6d 61 6e  r best performan
6270: 63 65 2c 20 61 6e 20 61 74 74 65 6d 70 74 20 69  ce, an attempt i
6280: 73 20 6d 61 64 65 20 74 6f 20 67 75 65 73 73 20  s made to guess 
6290: 61 74 20 74 68 65 20 62 79 74 65 2d 6f 72 64 65  at the byte-orde
62a0: 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d 70 72 65  r.** using C-pre
62b0: 70 72 6f 63 65 73 73 6f 72 20 6d 61 63 72 6f 73  processor macros
62c0: 2e 20 20 49 66 20 74 68 61 74 20 69 73 20 75 6e  .  If that is un
62d0: 73 75 63 63 65 73 73 66 75 6c 2c 20 6f 72 20 69  successful, or i
62e0: 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45 5f 52 55  f.** -DSQLITE_RU
62f0: 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52 3d  NTIME_BYTEORDER=
6300: 31 20 69 73 20 73 65 74 2c 20 74 68 65 6e 20 62  1 is set, then b
6310: 79 74 65 2d 6f 72 64 65 72 20 69 73 20 64 65 74  yte-order is det
6320: 65 72 6d 69 6e 65 64 0a 2a 2a 20 61 74 20 72 75  ermined.** at ru
6330: 6e 2d 74 69 6d 65 2e 0a 2a 2f 0a 23 69 66 20 28  n-time..*/.#if (
6340: 64 65 66 69 6e 65 64 28 69 33 38 36 29 20 20 20  defined(i386)   
6350: 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69    || defined(__i
6360: 33 38 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69  386__)   || defi
6370: 6e 65 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20  ned(_M_IX86) || 
6380: 20 20 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65     \.     define
6390: 64 28 5f 5f 78 38 36 5f 36 34 29 20 7c 7c 20 64  d(__x86_64) || d
63a0: 65 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 5f  efined(__x86_64_
63b0: 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 4d  _) || defined(_M
63c0: 5f 58 36 34 29 20 20 7c 7c 20 20 20 20 5c 0a 20  _X64)  ||    \. 
63d0: 20 20 20 20 64 65 66 69 6e 65 64 28 5f 4d 5f 41      defined(_M_A
63e0: 4d 44 36 34 29 20 7c 7c 20 64 65 66 69 6e 65 64  MD64) || defined
63f0: 28 5f 4d 5f 41 52 4d 29 20 20 20 20 20 7c 7c 20  (_M_ARM)     || 
6400: 64 65 66 69 6e 65 64 28 5f 5f 78 38 36 29 20 20  defined(__x86)  
6410: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6420: 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 29 20  fined(__arm__)) 
6430: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
6440: 54 45 5f 52 55 4e 54 49 4d 45 5f 42 59 54 45 4f  TE_RUNTIME_BYTEO
6450: 52 44 45 52 29 0a 23 20 64 65 66 69 6e 65 20 53  RDER).# define S
6460: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
6470: 20 20 20 31 32 33 34 0a 23 20 64 65 66 69 6e 65     1234.# define
6480: 20 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41   SQLITE_BIGENDIA
6490: 4e 20 20 20 20 30 0a 23 20 64 65 66 69 6e 65 20  N    0.# define 
64a0: 53 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44  SQLITE_LITTLEEND
64b0: 49 41 4e 20 31 0a 23 20 64 65 66 69 6e 65 20 53  IAN 1.# define S
64c0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
64d0: 45 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  E  SQLITE_UTF16L
64e0: 45 0a 23 65 6e 64 69 66 0a 23 69 66 20 28 64 65  E.#endif.#if (de
64f0: 66 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20  fined(sparc)    
6500: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63  || defined(__ppc
6510: 5f 5f 29 29 20 20 5c 0a 20 20 20 20 26 26 20 21  __))  \.    && !
6520: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 52  defined(SQLITE_R
6530: 55 4e 54 49 4d 45 5f 42 59 54 45 4f 52 44 45 52  UNTIME_BYTEORDER
6540: 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  ).# define SQLIT
6550: 45 5f 42 59 54 45 4f 52 44 45 52 20 20 20 20 34  E_BYTEORDER    4
6560: 33 32 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  321.# define SQL
6570: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
6580: 20 31 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49   1.# define SQLI
6590: 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49 41 4e 20  TE_LITTLEENDIAN 
65a0: 30 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  0.# define SQLIT
65b0: 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 20 53  E_UTF16NATIVE  S
65c0: 51 4c 49 54 45 5f 55 54 46 31 36 42 45 0a 23 65  QLITE_UTF16BE.#e
65d0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
65e0: 64 28 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44  d(SQLITE_BYTEORD
65f0: 45 52 29 0a 23 20 69 66 64 65 66 20 53 51 4c 49  ER).# ifdef SQLI
6600: 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 0a  TE_AMALGAMATION.
6610: 20 20 63 6f 6e 73 74 20 69 6e 74 20 73 71 6c 69    const int sqli
6620: 74 65 33 6f 6e 65 20 3d 20 31 3b 0a 23 20 65 6c  te3one = 1;.# el
6630: 73 65 0a 20 20 65 78 74 65 72 6e 20 63 6f 6e 73  se.  extern cons
6640: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
6650: 3b 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66 69  ;.# endif.# defi
6660: 6e 65 20 53 51 4c 49 54 45 5f 42 59 54 45 4f 52  ne SQLITE_BYTEOR
6670: 44 45 52 20 20 20 20 30 20 20 20 20 20 2f 2a 20  DER    0     /* 
6680: 30 20 6d 65 61 6e 73 20 22 75 6e 6b 6e 6f 77 6e  0 means "unknown
6690: 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65   at compile-time
66a0: 22 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20 53 51  " */.# define SQ
66b0: 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20  LITE_BIGENDIAN  
66c0: 20 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71    (*(char *)(&sq
66d0: 6c 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20  lite3one)==0).# 
66e0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49  define SQLITE_LI
66f0: 54 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68  TTLEENDIAN (*(ch
6700: 61 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e  ar *)(&sqlite3on
6710: 65 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20  e)==1).# define 
6720: 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
6730: 56 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45  VE  (SQLITE_BIGE
6740: 4e 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46  NDIAN?SQLITE_UTF
6750: 31 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31  16BE:SQLITE_UTF1
6760: 36 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  6LE).#endif../*.
6770: 2a 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72  ** Constants for
6780: 20 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64   the largest and
6790: 20 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62   smallest possib
67a0: 6c 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64  le 64-bit signed
67b0: 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68   integers..** Th
67c0: 65 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64  ese macros are d
67d0: 65 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20  esigned to work 
67e0: 63 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74  correctly on bot
67f0: 68 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d  h 32-bit and 64-
6800: 62 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73  bit.** compilers
6810: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52  ..*/.#define LAR
6820: 47 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66  GEST_INT64  (0xf
6830: 66 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30  fffffff|(((i64)0
6840: 78 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29  x7fffffff)<<32))
6850: 0a 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53  .#define SMALLES
6860: 54 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d  T_INT64 (((i64)-
6870: 31 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54  1) - LARGEST_INT
6880: 36 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64  64)../*.** Round
6890: 20 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20   up a number to 
68a0: 74 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20  the next larger 
68b0: 6d 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20  multiple of 8.  
68c0: 54 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20  This is used.** 
68d0: 74 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20  to force 8-byte 
68e0: 61 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d  alignment on 64-
68f0: 62 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65  bit architecture
6900: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f  s..*/.#define RO
6910: 55 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78  UND8(x)     (((x
6920: 29 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  )+7)&~7)../*.** 
6930: 52 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68  Round down to th
6940: 65 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70  e nearest multip
6950: 6c 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69  le of 8.*/.#defi
6960: 6e 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29  ne ROUNDDOWN8(x)
6970: 20 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a   ((x)&~7)../*.**
6980: 20 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65   Assert that the
6990: 20 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c   pointer X is al
69a0: 69 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79  igned to an 8-by
69b0: 74 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68  te boundary.  Th
69c0: 69 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75  is.** macro is u
69d0: 73 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20  sed only within 
69e0: 61 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69  assert() to veri
69f0: 66 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65  fy that the code
6a00: 20 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69   gets.** all ali
6a10: 67 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69  gnment restricti
6a20: 6f 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a  ons correct..**.
6a30: 2a 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51  ** Except, if SQ
6a40: 4c 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47  LITE_4_BYTE_ALIG
6a50: 4e 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65  NED_MALLOC is de
6a60: 66 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a  fined, then the.
6a70: 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61  ** underlying ma
6a80: 6c 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74  lloc() implement
6a90: 61 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75  ation might retu
6aa0: 72 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69  rn us 4-byte ali
6ab0: 67 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73  gned.** pointers
6ac0: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
6ad0: 20 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62   only verify 4-b
6ae0: 79 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a  yte alignment..*
6af0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
6b00: 34 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d  4_BYTE_ALIGNED_M
6b10: 41 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45  ALLOC.# define E
6b20: 49 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d  IGHT_BYTE_ALIGNM
6b30: 45 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61  ENT(X)   ((((cha
6b40: 72 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29  r*)(X) - (char*)
6b50: 30 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a  0)&3)==0).#else.
6b60: 23 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42  # define EIGHT_B
6b70: 59 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29  YTE_ALIGNMENT(X)
6b80: 20 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29     ((((char*)(X)
6b90: 20 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d   - (char*)0)&7)=
6ba0: 3d 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  =0).#endif../*.*
6bb0: 2a 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f  * Disable MMAP o
6bc0: 6e 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72  n platforms wher
6bd0: 65 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f  e it is known to
6be0: 20 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66   not work.*/.#if
6bf0: 20 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42   defined(__OpenB
6c00: 53 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64  SD__) || defined
6c10: 28 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75  (__QNXNTO__).# u
6c20: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
6c30: 4d 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69  MMAP_SIZE.# defi
6c40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
6c50: 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66  AP_SIZE 0.#endif
6c60: 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20  ../*.** Default 
6c70: 6d 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20  maximum size of 
6c80: 6d 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d  memory used by m
6c90: 65 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f  emory-mapped I/O
6ca0: 20 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23   in the VFS.*/.#
6cb0: 69 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a  ifdef __APPLE__.
6cc0: 23 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65  # include <Targe
6cd0: 74 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e  tConditionals.h>
6ce0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
6cf0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6d00: 53 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65  SIZE.# if define
6d10: 64 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20  d(__linux__) \. 
6d20: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e   || defined(_WIN
6d30: 33 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69  32) \.  || (defi
6d40: 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26  ned(__APPLE__) &
6d50: 26 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48  & defined(__MACH
6d60: 5f 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69  __)) \.  || defi
6d70: 6e 65 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c  ned(__sun) \.  |
6d80: 7c 20 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65  | defined(__Free
6d90: 42 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65  BSD__) \.  || de
6da0: 66 69 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c  fined(__DragonFl
6db0: 79 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20  y__).#   define 
6dc0: 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f  SQLITE_MAX_MMAP_
6dd0: 53 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20  SIZE 0x7fff0000 
6de0: 20 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a   /* 2147418112 *
6df0: 2f 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66  /.# else.#   def
6e00: 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  ine SQLITE_MAX_M
6e10: 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64  MAP_SIZE 0.# end
6e20: 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  if.# define SQLI
6e30: 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45  TE_MAX_MMAP_SIZE
6e40: 5f 78 63 20 31 20 2f 2a 20 65 78 63 6c 75 64 65  _xc 1 /* exclude
6e50: 20 66 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f   from ctime.c */
6e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
6e70: 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50 5f  he default MMAP_
6e80: 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e 20  SIZE is zero on 
6e90: 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20 20  all platforms.  
6ea0: 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c 61  Or, even if a la
6eb0: 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74 20  rger.** default 
6ec0: 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70 65  MMAP_SIZE is spe
6ed0: 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69 6c  cified at compil
6ee0: 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75 72  e-time, make sur
6ef0: 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a 2a  e that it does.*
6f00: 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68 65  * not exceed the
6f10: 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73 69   maximum mmap si
6f20: 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ze..*/.#ifndef S
6f30: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d  QLITE_DEFAULT_MM
6f40: 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65  AP_SIZE.# define
6f50: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
6f60: 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 20 64 65  MMAP_SIZE 0.# de
6f70: 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41  fine SQLITE_DEFA
6f80: 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45 5f 78 63  ULT_MMAP_SIZE_xc
6f90: 20 31 20 20 2f 2a 20 45 78 63 6c 75 64 65 20 66   1  /* Exclude f
6fa0: 72 6f 6d 20 63 74 69 6d 65 2e 63 20 2a 2f 0a 23  rom ctime.c */.#
6fb0: 65 6e 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45  endif.#if SQLITE
6fc0: 5f 44 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49  _DEFAULT_MMAP_SI
6fd0: 5a 45 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ZE>SQLITE_MAX_MM
6fe0: 41 50 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20  AP_SIZE.# undef 
6ff0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7000: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
7010: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
7020: 5f 4d 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54  _MMAP_SIZE SQLIT
7030: 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a  E_MAX_MMAP_SIZE.
7040: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e  #endif../*.** On
7050: 6c 79 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45  ly one of SQLITE
7060: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72  _ENABLE_STAT3 or
7070: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53   SQLITE_ENABLE_S
7080: 54 41 54 34 20 63 61 6e 20 62 65 20 64 65 66 69  TAT4 can be defi
7090: 6e 65 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79  ned..** Priority
70a0: 20 69 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c   is given to SQL
70b0: 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34  ITE_ENABLE_STAT4
70c0: 2e 20 20 49 66 20 65 69 74 68 65 72 20 61 72 65  .  If either are
70d0: 20 64 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a   defined, also.*
70e0: 2a 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  * define SQLITE_
70f0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
7100: 53 54 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20  STAT4.*/.#ifdef 
7110: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
7120: 41 54 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49  AT4.# undef SQLI
7130: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
7140: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
7150: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
7160: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
7170: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7180: 33 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  3.# define SQLIT
7190: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f  E_ENABLE_STAT3_O
71a0: 52 5f 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20  R_STAT4 1.#elif 
71b0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
71c0: 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75  AT3_OR_STAT4.# u
71d0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  ndef SQLITE_ENAB
71e0: 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54  LE_STAT3_OR_STAT
71f0: 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
7200: 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42  SELECTTRACE_ENAB
7210: 4c 45 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68  LED will be eith
7220: 65 72 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64  er 1 or 0 depend
7230: 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f  ing on whether o
7240: 72 20 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c  r not.** the Sel
7250: 65 63 74 20 71 75 65 72 79 20 67 65 6e 65 72 61  ect query genera
7260: 74 6f 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69  tor tracing logi
7270: 63 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a  c is turned on..
7280: 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
7290: 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20  QLITE_DEBUG) || 
72a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
72b0: 4e 41 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43  NABLE_SELECTTRAC
72c0: 45 29 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45  E).# define SELE
72d0: 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20  CTTRACE_ENABLED 
72e0: 31 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  1.#else.# define
72f0: 20 53 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41   SELECTTRACE_ENA
7300: 42 4c 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  BLED 0.#endif../
7310: 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65  *.** An instance
7320: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
7330: 67 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75  g structure is u
7340: 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
7350: 20 62 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a   busy-handler.**
7360: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20   callback for a 
7370: 67 69 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e  given sqlite han
7380: 64 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73  dle..**.** The s
7390: 71 6c 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65  qlite.busyHandle
73a0: 72 20 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20  r member of the 
73b0: 73 71 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f  sqlite struct co
73c0: 6e 74 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a  ntains the busy.
73d0: 2a 2a 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20  ** callback for 
73e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
73f0: 64 6c 65 2e 20 45 61 63 68 20 70 61 67 65 72 20  dle. Each pager 
7400: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 20 73  opened via the s
7410: 71 6c 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20  qlite.** handle 
7420: 69 73 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e  is passed a poin
7430: 74 65 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75  ter to sqlite.bu
7440: 73 79 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62  syHandler. The b
7450: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7460: 61 6c 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65  allback is curre
7470: 6e 74 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c  ntly invoked onl
7480: 79 20 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61  y from within pa
7490: 67 65 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65  ger.c..*/.typede
74a0: 66 20 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  f struct BusyHan
74b0: 64 6c 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72  dler BusyHandler
74c0: 3b 0a 73 74 72 75 63 74 20 42 75 73 79 48 61 6e  ;.struct BusyHan
74d0: 64 6c 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78  dler {.  int (*x
74e0: 46 75 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74  Func)(void *,int
74f0: 29 3b 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20  );  /* The busy 
7500: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f  callback */.  vo
7510: 69 64 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20  id *pArg;       
7520: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
7530: 74 20 61 72 67 20 74 6f 20 62 75 73 79 20 63 61  t arg to busy ca
7540: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20  llback */.  int 
7550: 6e 42 75 73 79 3b 20 20 20 20 20 20 20 20 20 20  nBusy;          
7560: 20 20 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d         /* Increm
7570: 65 6e 74 65 64 20 77 69 74 68 20 65 61 63 68 20  ented with each 
7580: 62 75 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a  busy call */.};.
7590: 0a 2f 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74  ./*.** Name of t
75a0: 68 65 20 6d 61 73 74 65 72 20 64 61 74 61 62 61  he master databa
75b0: 73 65 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d  se table.  The m
75c0: 61 73 74 65 72 20 64 61 74 61 62 61 73 65 20 74  aster database t
75d0: 61 62 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65  able.** is a spe
75e0: 63 69 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20  cial table that 
75f0: 68 6f 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20  holds the names 
7600: 61 6e 64 20 61 74 74 72 69 62 75 74 65 73 20 6f  and attributes o
7610: 66 20 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61  f all.** user ta
7620: 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73  bles and indices
7630: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53  ..*/.#define MAS
7640: 54 45 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22  TER_NAME       "
7650: 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23  sqlite_master".#
7660: 64 65 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54  define TEMP_MAST
7670: 45 52 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65  ER_NAME  "sqlite
7680: 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f  _temp_master"../
7690: 2a 0a 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61  *.** The root-pa
76a0: 67 65 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72  ge of the master
76b0: 20 64 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e   database table.
76c0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54  .*/.#define MAST
76d0: 45 52 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a  ER_ROOT       1.
76e0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20  ./*.** The name 
76f0: 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 74 61  of the schema ta
7700: 62 6c 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  ble..*/.#define 
7710: 53 43 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20  SCHEMA_TABLE(x) 
7720: 20 28 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29   ((!OMIT_TEMPDB)
7730: 26 26 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41  &&(x==1)?TEMP_MA
7740: 53 54 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52  STER_NAME:MASTER
7750: 5f 4e 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20  _NAME)../*.** A 
7760: 63 6f 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72  convenience macr
7770: 6f 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 74  o that returns t
7780: 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65  he number of ele
7790: 6d 65 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61  ments in.** an a
77a0: 72 72 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  rray..*/.#define
77b0: 20 41 72 72 61 79 53 69 7a 65 28 58 29 20 20 20   ArraySize(X)   
77c0: 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58   ((int)(sizeof(X
77d0: 29 2f 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29  )/sizeof(X[0])))
77e0: 0a 0a 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e  ../*.** Determin
77f0: 65 20 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e  e if the argumen
7800: 74 20 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20  t is a power of 
7810: 74 77 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49  two.*/.#define I
7820: 73 50 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28  sPowerOfTwo(X) (
7830: 28 28 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30  ((X)&((X)-1))==0
7840: 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  )../*.** The fol
7850: 6c 6f 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20  lowing value as 
7860: 61 20 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61  a destructor mea
7870: 6e 73 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65  ns to use sqlite
7880: 33 44 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68  3DbFree()..** Th
7890: 65 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28  e sqlite3DbFree(
78a0: 29 20 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72  ) routine requir
78b0: 65 73 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72  es two parameter
78c0: 73 20 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65  s instead of the
78d0: 0a 2a 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65  .** one paramete
78e0: 72 20 74 68 61 74 20 64 65 73 74 72 75 63 74 6f  r that destructo
78f0: 72 73 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74  rs normally want
7900: 2e 20 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f  .  So we have to
7910: 20 69 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68   introduce.** th
7920: 69 73 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74  is magic value t
7930: 68 61 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f  hat the code kno
7940: 77 73 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66  ws to handle dif
7950: 66 65 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a  ferently.  Any.*
7960: 2a 20 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77  * pointer will w
7970: 6f 72 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67  ork here as long
7980: 20 61 73 20 69 74 20 69 73 20 64 69 73 74 69 6e   as it is distin
7990: 63 74 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53  ct from SQLITE_S
79a0: 54 41 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c  TATIC.** and SQL
79b0: 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a  ITE_TRANSIENT..*
79c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
79d0: 5f 44 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c  _DYNAMIC   ((sql
79e0: 69 74 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f  ite3_destructor_
79f0: 74 79 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c  type)sqlite3Mall
7a00: 6f 63 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57  ocSize)../*.** W
7a10: 68 65 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  hen SQLITE_OMIT_
7a20: 57 53 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20  WSD is defined, 
7a30: 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
7a40: 65 20 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72  e target platfor
7a50: 6d 20 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75  m does.** not su
7a60: 70 70 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53  pport Writable S
7a70: 74 61 74 69 63 20 44 61 74 61 20 28 57 53 44 29  tatic Data (WSD)
7a80: 20 73 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20   such as global 
7a90: 61 6e 64 20 73 74 61 74 69 63 20 76 61 72 69 61  and static varia
7aa0: 62 6c 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72  bles..** All var
7ab0: 69 61 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68  iables must eith
7ac0: 65 72 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61  er be on the sta
7ad0: 63 6b 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c  ck or dynamicall
7ae0: 79 20 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d  y allocated from
7af0: 0a 2a 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57  .** the heap.  W
7b00: 68 65 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70  hen WSD is unsup
7b10: 70 6f 72 74 65 64 2c 20 74 68 65 20 76 61 72 69  ported, the vari
7b20: 61 62 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e  able declaration
7b30: 73 20 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74  s scattered.** t
7b40: 68 72 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51  hroughout the SQ
7b50: 4c 69 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62  Lite code must b
7b60: 65 63 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20  ecome constants 
7b70: 69 6e 73 74 65 61 64 2e 20 20 54 68 65 20 53 51  instead.  The SQ
7b80: 4c 49 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72  LITE_WSD.** macr
7b90: 6f 20 69 73 20 75 73 65 64 20 66 6f 72 20 74 68  o is used for th
7ba0: 69 73 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64  is purpose.  And
7bb0: 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65   instead of refe
7bc0: 72 65 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69  rencing the vari
7bd0: 61 62 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79  able.** directly
7be0: 2c 20 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e  , we use its con
7bf0: 73 74 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74  stant as a key t
7c00: 6f 20 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e  o lookup the run
7c10: 2d 74 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a  -time allocated.
7c20: 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20 68  ** buffer that h
7c30: 6f 6c 64 73 20 72 65 61 6c 20 76 61 72 69 61 62  olds real variab
7c40: 6c 65 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e  le.  The constan
7c50: 74 20 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e  t is also the in
7c60: 69 74 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72  itializer.** for
7c70: 20 74 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c   the run-time al
7c80: 6c 6f 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a  located buffer..
7c90: 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75  **.** In the usu
7ca0: 61 6c 20 63 61 73 65 20 77 68 65 72 65 20 57 53  al case where WS
7cb0: 44 20 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20  D is supported, 
7cc0: 74 68 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61  the SQLITE_WSD a
7cd0: 6e 64 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63  nd GLOBAL.** mac
7ce0: 72 6f 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70  ros become no-op
7cf0: 73 20 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20  s and have zero 
7d00: 70 65 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61  performance impa
7d10: 63 74 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  ct..*/.#ifdef SQ
7d20: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
7d30: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57  #define SQLITE_W
7d40: 53 44 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69  SD const.  #defi
7d50: 6e 65 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28  ne GLOBAL(t,v) (
7d60: 2a 28 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64  *(t*)sqlite3_wsd
7d70: 5f 66 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76  _find((void*)&(v
7d80: 29 2c 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20  ), sizeof(v))). 
7d90: 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
7da0: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f  GlobalConfig GLO
7db0: 42 41 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74  BAL(struct Sqlit
7dc0: 65 33 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65  e3Config, sqlite
7dd0: 33 43 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73  3Config).  int s
7de0: 71 6c 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28  qlite3_wsd_init(
7df0: 69 6e 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20  int N, int J);. 
7e00: 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77   void *sqlite3_w
7e10: 73 64 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c  sd_find(void *K,
7e20: 20 69 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20   int L);.#else. 
7e30: 20 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f   #define SQLITE_
7e40: 57 53 44 0a 20 20 23 64 65 66 69 6e 65 20 47 4c  WSD.  #define GL
7e50: 4f 42 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64  OBAL(t,v) v.  #d
7e60: 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f  efine sqlite3Glo
7e70: 62 61 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  balConfig sqlite
7e80: 33 43 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a  3Config.#endif..
7e90: 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  /*.** The follow
7ea0: 69 6e 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75  ing macros are u
7eb0: 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20  sed to suppress 
7ec0: 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67  compiler warning
7ed0: 73 20 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65  s and to.** make
7ee0: 20 69 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d   it clear to hum
7ef0: 61 6e 20 72 65 61 64 65 72 73 20 77 68 65 6e 20  an readers when 
7f00: 61 20 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d  a function param
7f10: 65 74 65 72 20 69 73 20 64 65 6c 69 62 65 72 61  eter is delibera
7f20: 74 65 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75  tely.** left unu
7f30: 73 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 62  sed within the b
7f40: 6f 64 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f  ody of a functio
7f50: 6e 2e 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20  n. This usually 
7f60: 68 61 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20  happens when.** 
7f70: 61 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61  a function is ca
7f80: 6c 6c 65 64 20 76 69 61 20 61 20 66 75 6e 63 74  lled via a funct
7f90: 69 6f 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72  ion pointer. For
7fa0: 20 65 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20   example the.** 
7fb0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
7fc0: 66 20 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61  f an SQL aggrega
7fd0: 74 65 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b  te step callback
7fe0: 20 6d 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65   may not use the
7ff0: 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e  .** parameter in
8000: 64 69 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d  dicating the num
8010: 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
8020: 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 61   passed to the a
8030: 67 67 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20  ggregate,.** if 
8040: 69 74 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68  it knows that th
8050: 69 73 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65  is is enforced e
8060: 6c 73 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20  lsewhere..**.** 
8070: 57 68 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20  When a function 
8080: 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74  parameter is not
8090: 20 75 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74   used at all wit
80a0: 68 69 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20  hin the body of 
80b0: 61 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69  a function,.** i
80c0: 74 20 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e  t is generally n
80d0: 61 6d 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f  amed "NotUsed" o
80e0: 72 20 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20  r "NotUsed2" to 
80f0: 6d 61 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e  make things even
8100: 20 63 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77   clearer..** How
8110: 65 76 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72  ever, these macr
8120: 6f 73 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75  os may also be u
8130: 73 65 64 20 74 6f 20 73 75 70 70 72 65 73 73 20  sed to suppress 
8140: 77 61 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64  warnings related
8150: 20 74 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72   to.** parameter
8160: 73 20 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61  s that may or ma
8170: 79 20 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65  y not be used de
8180: 70 65 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69  pending on compi
8190: 6c 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a  lation options..
81a0: 2a 2a 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74  ** For example t
81b0: 68 6f 73 65 20 70 61 72 61 6d 65 74 65 72 73 20  hose parameters 
81c0: 6f 6e 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73  only used in ass
81d0: 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73  ert() statements
81e0: 2e 20 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61  . In these.** ca
81f0: 73 65 73 20 74 68 65 20 70 61 72 61 6d 65 74 65  ses the paramete
8200: 72 73 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20  rs are named as 
8210: 70 65 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f  per the usual co
8220: 6e 76 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64  nventions..*/.#d
8230: 65 66 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52  efine UNUSED_PAR
8240: 41 4d 45 54 45 52 28 78 29 20 28 76 6f 69 64 29  AMETER(x) (void)
8250: 28 78 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53  (x).#define UNUS
8260: 45 44 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c  ED_PARAMETER2(x,
8270: 79 29 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45  y) UNUSED_PARAME
8280: 54 45 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41  TER(x),UNUSED_PA
8290: 52 41 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a  RAMETER(y)../*.*
82a0: 2a 20 46 6f 72 77 61 72 64 20 72 65 66 65 72 65  * Forward refere
82b0: 6e 63 65 73 20 74 6f 20 73 74 72 75 63 74 75 72  nces to structur
82c0: 65 73 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  es.*/.typedef st
82d0: 72 75 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67  ruct AggInfo Agg
82e0: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
82f0: 72 75 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74  ruct AuthContext
8300: 20 41 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79   AuthContext;.ty
8310: 70 65 64 65 66 20 73 74 72 75 63 74 20 41 75 74  pedef struct Aut
8320: 6f 69 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63  oincInfo Autoinc
8330: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
8340: 72 75 63 74 20 42 69 74 76 65 63 20 42 69 74 76  ruct Bitvec Bitv
8350: 65 63 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ec;.typedef stru
8360: 63 74 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53  ct CollSeq CollS
8370: 65 71 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  eq;.typedef stru
8380: 63 74 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e  ct Column Column
8390: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
83a0: 20 44 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20   Db Db;.typedef 
83b0: 73 74 72 75 63 74 20 53 63 68 65 6d 61 20 53 63  struct Schema Sc
83c0: 68 65 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74  hema;.typedef st
83d0: 72 75 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a  ruct Expr Expr;.
83e0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
83f0: 78 70 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74  xprList ExprList
8400: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8410: 20 45 78 70 72 53 70 61 6e 20 45 78 70 72 53 70   ExprSpan ExprSp
8420: 61 6e 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  an;.typedef stru
8430: 63 74 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79  ct FKey FKey;.ty
8440: 70 65 64 65 66 20 73 74 72 75 63 74 20 46 75 6e  pedef struct Fun
8450: 63 44 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63  cDestructor Func
8460: 44 65 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65  Destructor;.type
8470: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
8480: 65 66 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65  ef FuncDef;.type
8490: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
84a0: 65 66 48 61 73 68 20 46 75 6e 63 44 65 66 48 61  efHash FuncDefHa
84b0: 73 68 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  sh;.typedef stru
84c0: 63 74 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74  ct IdList IdList
84d0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
84e0: 20 49 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79   Index Index;.ty
84f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 49 6e 64  pedef struct Ind
8500: 65 78 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61  exSample IndexSa
8510: 6d 70 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  mple;.typedef st
8520: 72 75 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65  ruct KeyClass Ke
8530: 79 43 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20  yClass;.typedef 
8540: 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b  struct KeyInfo K
8550: 65 79 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20  eyInfo;.typedef 
8560: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
8570: 20 4c 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65   Lookaside;.type
8580: 64 65 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61  def struct Looka
8590: 73 69 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69  sideSlot Lookasi
85a0: 64 65 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20  deSlot;.typedef 
85b0: 73 74 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f  struct Module Mo
85c0: 64 75 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  dule;.typedef st
85d0: 72 75 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74  ruct NameContext
85e0: 20 4e 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79   NameContext;.ty
85f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 61 72  pedef struct Par
8600: 73 65 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65  se Parse;.typede
8610: 66 20 73 74 72 75 63 74 20 50 72 65 55 70 64 61  f struct PreUpda
8620: 74 65 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79  te PreUpdate;.ty
8630: 70 65 64 65 66 20 73 74 72 75 63 74 20 50 72 69  pedef struct Pri
8640: 6e 74 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69  ntfArguments Pri
8650: 6e 74 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79  ntfArguments;.ty
8660: 70 65 64 65 66 20 73 74 72 75 63 74 20 52 6f 77  pedef struct Row
8670: 53 65 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65  Set RowSet;.type
8680: 64 65 66 20 73 74 72 75 63 74 20 53 61 76 65 70  def struct Savep
8690: 6f 69 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a  oint Savepoint;.
86a0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 53  typedef struct S
86b0: 65 6c 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79  elect Select;.ty
86c0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 51 4c  pedef struct SQL
86d0: 69 74 65 54 68 72 65 61 64 20 53 51 4c 69 74 65  iteThread SQLite
86e0: 54 68 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20  Thread;.typedef 
86f0: 73 74 72 75 63 74 20 53 65 6c 65 63 74 44 65 73  struct SelectDes
8700: 74 20 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79  t SelectDest;.ty
8710: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 72 63  pedef struct Src
8720: 4c 69 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79  List SrcList;.ty
8730: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 74 72  pedef struct Str
8740: 41 63 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a  Accum StrAccum;.
8750: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
8760: 61 62 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65  able Table;.type
8770: 64 65 66 20 73 74 72 75 63 74 20 54 61 62 6c 65  def struct Table
8780: 4c 6f 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a  Lock TableLock;.
8790: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 54  typedef struct T
87a0: 6f 6b 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65  oken Token;.type
87b0: 64 65 66 20 73 74 72 75 63 74 20 54 72 65 65 56  def struct TreeV
87c0: 69 65 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79  iew TreeView;.ty
87d0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
87e0: 67 67 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79  gger Trigger;.ty
87f0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 72 69  pedef struct Tri
8800: 67 67 65 72 50 72 67 20 54 72 69 67 67 65 72 50  ggerPrg TriggerP
8810: 72 67 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  rg;.typedef stru
8820: 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 54  ct TriggerStep T
8830: 72 69 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65  riggerStep;.type
8840: 64 65 66 20 73 74 72 75 63 74 20 55 6e 70 61 63  def struct Unpac
8850: 6b 65 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b  kedRecord Unpack
8860: 65 64 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65  edRecord;.typede
8870: 66 20 73 74 72 75 63 74 20 56 54 61 62 6c 65 20  f struct VTable 
8880: 56 54 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20  VTable;.typedef 
8890: 73 74 72 75 63 74 20 56 74 61 62 43 74 78 20 56  struct VtabCtx V
88a0: 74 61 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20  tabCtx;.typedef 
88b0: 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61  struct Walker Wa
88c0: 6c 6b 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74  lker;.typedef st
88d0: 72 75 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57  ruct WhereInfo W
88e0: 68 65 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65  hereInfo;.typede
88f0: 66 20 73 74 72 75 63 74 20 57 69 74 68 20 57 69  f struct With Wi
8900: 74 68 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  th;../*.** Defer
8910: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
8920: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
8930: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
8940: 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61  " and.** "BusyHa
8950: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
8960: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
8970: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
8980: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
8990: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
89a0: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
89b0: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
89c0: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
89d0: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
89e0: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
89f0: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
8a00: 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ache.h".#include
8a10: 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "os.h".#include
8a20: 20 22 6d 75 74 65 78 2e 68 22 0a 0a 2f 2a 20 54   "mutex.h"../* T
8a30: 68 65 20 53 51 4c 49 54 45 5f 45 58 54 52 41 5f  he SQLITE_EXTRA_
8a40: 44 55 52 41 42 4c 45 20 63 6f 6d 70 69 6c 65 2d  DURABLE compile-
8a50: 74 69 6d 65 20 6f 70 74 69 6f 6e 20 75 73 65 64  time option used
8a60: 20 74 6f 20 73 65 74 20 74 68 65 20 64 65 66 61   to set the defa
8a70: 75 6c 74 0a 2a 2a 20 73 79 6e 63 68 72 6f 6e 6f  ult.** synchrono
8a80: 75 73 20 73 65 74 74 69 6e 67 20 74 6f 20 45 58  us setting to EX
8a90: 54 52 41 2e 20 20 49 74 20 69 73 20 6e 6f 20 6c  TRA.  It is no l
8aa0: 6f 6e 67 65 72 20 73 75 70 70 6f 72 74 65 64 2e  onger supported.
8ab0: 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
8ac0: 45 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a  E_EXTRA_DURABLE.
8ad0: 23 20 77 61 72 6e 69 6e 67 20 55 73 65 20 53 51  # warning Use SQ
8ae0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
8af0: 43 48 52 4f 4e 4f 55 53 3d 33 20 69 6e 73 74 65  CHRONOUS=3 inste
8b00: 61 64 20 6f 66 20 53 51 4c 49 54 45 5f 45 58 54  ad of SQLITE_EXT
8b10: 52 41 5f 44 55 52 41 42 4c 45 0a 23 20 64 65 66  RA_DURABLE.# def
8b20: 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55  ine SQLITE_DEFAU
8b30: 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 33  LT_SYNCHRONOUS 3
8b40: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44  .#endif../*.** D
8b50: 65 66 61 75 6c 74 20 73 79 6e 63 68 72 6f 6e 6f  efault synchrono
8b60: 75 73 20 6c 65 76 65 6c 73 2e 0a 2a 2a 0a 2a 2a  us levels..**.**
8b70: 20 4e 6f 74 65 20 74 68 61 74 20 28 66 6f 72 20   Note that (for 
8b80: 68 69 73 74 6f 72 63 61 6c 20 72 65 61 73 6f 6e  historcal reason
8b90: 73 29 20 74 68 65 20 50 41 47 45 52 5f 53 59 4e  s) the PAGER_SYN
8ba0: 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d 61 63 72 6f  CHRONOUS_* macro
8bb0: 73 20 64 69 66 66 65 72 0a 2a 2a 20 66 72 6f 6d  s differ.** from
8bc0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 45 46 41   the SQLITE_DEFA
8bd0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20  ULT_SYNCHRONOUS 
8be0: 76 61 6c 75 65 20 62 79 20 31 2e 0a 2a 2a 0a 2a  value by 1..**.*
8bf0: 2a 20 20 20 20 20 20 20 20 20 20 20 50 41 47 45  *           PAGE
8c00: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20 20  R_SYNCHRONOUS   
8c10: 20 20 20 20 44 45 46 41 55 4c 54 5f 53 59 4e 43      DEFAULT_SYNC
8c20: 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20 20 4f 46 46  HRONOUS.**   OFF
8c30: 20 20 20 20 20 20 20 20 20 20 20 31 20 20 20 20             1    
8c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c50: 20 20 20 20 20 30 0a 2a 2a 20 20 20 4e 4f 52 4d       0.**   NORM
8c60: 41 4c 20 20 20 20 20 20 20 20 32 20 20 20 20 20  AL        2     
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8c80: 20 20 20 20 31 0a 2a 2a 20 20 20 46 55 4c 4c 20      1.**   FULL 
8c90: 20 20 20 20 20 20 20 20 20 33 20 20 20 20 20 20           3      
8ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8cb0: 20 20 20 32 0a 2a 2a 20 20 20 45 58 54 52 41 20     2.**   EXTRA 
8cc0: 20 20 20 20 20 20 20 20 34 20 20 20 20 20 20 20          4       
8cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8ce0: 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68 65 20 22 50    3.**.** The "P
8cf0: 52 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75  RAGMA synchronou
8d00: 73 22 20 73 74 61 74 65 6d 65 6e 74 20 61 6c 73  s" statement als
8d10: 6f 20 75 73 65 73 20 74 68 65 20 7a 65 72 6f 2d  o uses the zero-
8d20: 62 61 73 65 64 20 6e 75 6d 62 65 72 73 2e 0a 2a  based numbers..*
8d30: 2a 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73  * In other words
8d40: 2c 20 74 68 65 20 7a 65 72 6f 2d 62 61 73 65 64  , the zero-based
8d50: 20 6e 75 6d 62 65 72 73 20 61 72 65 20 75 73 65   numbers are use
8d60: 64 20 66 6f 72 20 61 6c 6c 20 65 78 74 65 72 6e  d for all extern
8d70: 61 6c 20 69 6e 74 65 72 66 61 63 65 73 0a 2a 2a  al interfaces.**
8d80: 20 61 6e 64 20 74 68 65 20 6f 6e 65 2d 62 61 73   and the one-bas
8d90: 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ed values are us
8da0: 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 0a 2a  ed internally..*
8db0: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
8dc0: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8dd0: 4e 4f 55 53 0a 23 20 64 65 66 69 6e 65 20 53 51  NOUS.# define SQ
8de0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
8df0: 43 48 52 4f 4e 4f 55 53 20 28 50 41 47 45 52 5f  CHRONOUS (PAGER_
8e00: 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 46 55 4c 4c  SYNCHRONOUS_FULL
8e10: 2d 31 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  -1).#endif.#ifnd
8e20: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
8e30: 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f 4e 4f 55  T_WAL_SYNCHRONOU
8e40: 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54  S.# define SQLIT
8e50: 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 59  E_DEFAULT_WAL_SY
8e60: 4e 43 48 52 4f 4e 4f 55 53 20 53 51 4c 49 54 45  NCHRONOUS SQLITE
8e70: 5f 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f  _DEFAULT_SYNCHRO
8e80: 4e 4f 55 53 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  NOUS.#endif../*.
8e90: 2a 2a 20 45 61 63 68 20 64 61 74 61 62 61 73 65  ** Each database
8ea0: 20 66 69 6c 65 20 74 6f 20 62 65 20 61 63 63 65   file to be acce
8eb0: 73 73 65 64 20 62 79 20 74 68 65 20 73 79 73 74  ssed by the syst
8ec0: 65 6d 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63  em is an instanc
8ed0: 65 0a 2a 2a 20 6f 66 20 74 68 65 20 66 6f 6c 6c  e.** of the foll
8ee0: 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
8ef0: 20 20 54 68 65 72 65 20 61 72 65 20 6e 6f 72 6d    There are norm
8f00: 61 6c 6c 79 20 74 77 6f 20 6f 66 20 74 68 65 73  ally two of thes
8f10: 65 20 73 74 72 75 63 74 75 72 65 73 0a 2a 2a 20  e structures.** 
8f20: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 2e 61 44  in the sqlite.aD
8f30: 62 5b 5d 20 61 72 72 61 79 2e 20 20 61 44 62 5b  b[] array.  aDb[
8f40: 30 5d 20 69 73 20 74 68 65 20 6d 61 69 6e 20 64  0] is the main d
8f50: 61 74 61 62 61 73 65 20 66 69 6c 65 20 61 6e 64  atabase file and
8f60: 0a 2a 2a 20 61 44 62 5b 31 5d 20 69 73 20 74 68  .** aDb[1] is th
8f70: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
8f80: 75 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 65 6d  used to hold tem
8f90: 70 6f 72 61 72 79 20 74 61 62 6c 65 73 2e 20 20  porary tables.  
8fa0: 41 64 64 69 74 69 6f 6e 61 6c 0a 2a 2a 20 64 61  Additional.** da
8fb0: 74 61 62 61 73 65 73 20 6d 61 79 20 62 65 20 61  tabases may be a
8fc0: 74 74 61 63 68 65 64 2e 0a 2a 2f 0a 73 74 72 75  ttached..*/.stru
8fd0: 63 74 20 44 62 20 7b 0a 20 20 63 68 61 72 20 2a  ct Db {.  char *
8fe0: 7a 44 62 53 4e 61 6d 65 3b 20 20 20 20 20 20 2f  zDbSName;      /
8ff0: 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 64  * Name of this d
9000: 61 74 61 62 61 73 65 2e 20 28 73 63 68 65 6d 61  atabase. (schema
9010: 20 6e 61 6d 65 2c 20 6e 6f 74 20 66 69 6c 65 6e   name, not filen
9020: 61 6d 65 29 20 2a 2f 0a 20 20 42 74 72 65 65 20  ame) */.  Btree 
9030: 2a 70 42 74 3b 20 20 20 20 20 20 20 20 20 20 2f  *pBt;          /
9040: 2a 20 54 68 65 20 42 2a 54 72 65 65 20 73 74 72  * The B*Tree str
9050: 75 63 74 75 72 65 20 66 6f 72 20 74 68 69 73 20  ucture for this 
9060: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
9070: 0a 20 20 75 38 20 73 61 66 65 74 79 5f 6c 65 76  .  u8 safety_lev
9080: 65 6c 3b 20 20 20 20 20 2f 2a 20 48 6f 77 20 61  el;     /* How a
9090: 67 67 72 65 73 73 69 76 65 20 61 74 20 73 79 6e  ggressive at syn
90a0: 63 69 6e 67 20 64 61 74 61 20 74 6f 20 64 69 73  cing data to dis
90b0: 6b 20 2a 2f 0a 20 20 75 38 20 62 53 79 6e 63 53  k */.  u8 bSyncS
90c0: 65 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  et;         /* T
90d0: 72 75 65 20 69 66 20 22 50 52 41 47 4d 41 20 73  rue if "PRAGMA s
90e0: 79 6e 63 68 72 6f 6e 6f 75 73 3d 4e 22 20 68 61  ynchronous=N" ha
90f0: 73 20 62 65 65 6e 20 72 75 6e 20 2a 2f 0a 20 20  s been run */.  
9100: 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
9110: 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20       /* Pointer 
9120: 74 6f 20 64 61 74 61 62 61 73 65 20 73 63 68 65  to database sche
9130: 6d 61 20 28 70 6f 73 73 69 62 6c 79 20 73 68 61  ma (possibly sha
9140: 72 65 64 29 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  red) */.};../*.*
9150: 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
9160: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
9170: 74 72 75 63 74 75 72 65 20 73 74 6f 72 65 73 20  tructure stores 
9180: 61 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  a database schem
9190: 61 2e 0a 2a 2a 0a 2a 2a 20 4d 6f 73 74 20 53 63  a..**.** Most Sc
91a0: 68 65 6d 61 20 6f 62 6a 65 63 74 73 20 61 72 65  hema objects are
91b0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
91c0: 20 61 20 42 74 72 65 65 2e 20 20 54 68 65 20 65   a Btree.  The e
91d0: 78 63 65 70 74 69 6f 6e 20 69 73 0a 2a 2a 20 74  xception is.** t
91e0: 68 65 20 53 63 68 65 6d 61 20 66 6f 72 20 74 68  he Schema for th
91f0: 65 20 54 45 4d 50 20 64 61 74 61 62 61 65 73 20  e TEMP databaes 
9200: 28 73 71 6c 69 74 65 33 2e 61 44 62 5b 31 5d 29  (sqlite3.aDb[1])
9210: 20 77 68 69 63 68 20 69 73 20 66 72 65 65 2d 73   which is free-s
9220: 74 61 6e 64 69 6e 67 2e 0a 2a 2a 20 49 6e 20 73  tanding..** In s
9230: 68 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65  hared cache mode
9240: 2c 20 61 20 73 69 6e 67 6c 65 20 53 63 68 65 6d  , a single Schem
9250: 61 20 6f 62 6a 65 63 74 20 63 61 6e 20 62 65 20  a object can be 
9260: 73 68 61 72 65 64 20 62 79 20 6d 75 6c 74 69 70  shared by multip
9270: 6c 65 0a 2a 2a 20 42 74 72 65 65 73 20 74 68 61  le.** Btrees tha
9280: 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20 73  t refer to the s
9290: 61 6d 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 42  ame underlying B
92a0: 74 53 68 61 72 65 64 20 6f 62 6a 65 63 74 2e 0a  tShared object..
92b0: 2a 2a 0a 2a 2a 20 53 63 68 65 6d 61 20 6f 62 6a  **.** Schema obj
92c0: 65 63 74 73 20 61 72 65 20 61 75 74 6f 6d 61 74  ects are automat
92d0: 69 63 61 6c 6c 79 20 64 65 61 6c 6c 6f 63 61 74  ically deallocat
92e0: 65 64 20 77 68 65 6e 20 74 68 65 20 6c 61 73 74  ed when the last
92f0: 20 42 74 72 65 65 20 74 68 61 74 0a 2a 2a 20 72   Btree that.** r
9300: 65 66 65 72 65 6e 63 65 73 20 74 68 65 6d 20 69  eferences them i
9310: 73 20 64 65 73 74 72 6f 79 65 64 2e 20 20 20 54  s destroyed.   T
9320: 68 65 20 54 45 4d 50 20 53 63 68 65 6d 61 20 69  he TEMP Schema i
9330: 73 20 6d 61 6e 75 61 6c 6c 79 20 66 72 65 65 64  s manually freed
9340: 20 62 79 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 63   by.** sqlite3_c
9350: 6c 6f 73 65 28 29 2e 0a 2a 0a 2a 2a 20 41 20 74  lose()..*.** A t
9360: 68 72 65 61 64 20 6d 75 73 74 20 62 65 20 68 6f  hread must be ho
9370: 6c 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e  lding a mutex on
9380: 20 74 68 65 20 63 6f 72 72 65 73 70 6f 6e 64 69   the correspondi
9390: 6e 67 20 42 74 72 65 65 20 69 6e 20 6f 72 64 65  ng Btree in orde
93a0: 72 0a 2a 2a 20 74 6f 20 61 63 63 65 73 73 20 53  r.** to access S
93b0: 63 68 65 6d 61 20 63 6f 6e 74 65 6e 74 2e 20 20  chema content.  
93c0: 54 68 69 73 20 69 6d 70 6c 69 65 73 20 74 68 61  This implies tha
93d0: 74 20 74 68 65 20 74 68 72 65 61 64 20 6d 75 73  t the thread mus
93e0: 74 20 61 6c 73 6f 20 62 65 0a 2a 2a 20 68 6f 6c  t also be.** hol
93f0: 64 69 6e 67 20 61 20 6d 75 74 65 78 20 6f 6e 20  ding a mutex on 
9400: 74 68 65 20 73 71 6c 69 74 65 33 20 63 6f 6e 6e  the sqlite3 conn
9410: 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72 20 74  ection pointer t
9420: 68 61 74 20 6f 77 6e 73 20 74 68 65 20 42 74 72  hat owns the Btr
9430: 65 65 2e 0a 2a 2a 20 46 6f 72 20 61 20 54 45 4d  ee..** For a TEM
9440: 50 20 53 63 68 65 6d 61 2c 20 6f 6e 6c 79 20 74  P Schema, only t
9450: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75  he connection mu
9460: 74 65 78 20 69 73 20 72 65 71 75 69 72 65 64 2e  tex is required.
9470: 0a 2a 2f 0a 73 74 72 75 63 74 20 53 63 68 65 6d  .*/.struct Schem
9480: 61 20 7b 0a 20 20 69 6e 74 20 73 63 68 65 6d 61  a {.  int schema
9490: 5f 63 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 44 61  _cookie;   /* Da
94a0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 76 65  tabase schema ve
94b0: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 66 6f 72  rsion number for
94c0: 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a 20 20   this file */.  
94d0: 69 6e 74 20 69 47 65 6e 65 72 61 74 69 6f 6e 3b  int iGeneration;
94e0: 20 20 20 20 20 2f 2a 20 47 65 6e 65 72 61 74 69       /* Generati
94f0: 6f 6e 20 63 6f 75 6e 74 65 72 2e 20 20 49 6e 63  on counter.  Inc
9500: 72 65 6d 65 6e 74 65 64 20 77 69 74 68 20 65 61  remented with ea
9510: 63 68 20 63 68 61 6e 67 65 20 2a 2f 0a 20 20 48  ch change */.  H
9520: 61 73 68 20 74 62 6c 48 61 73 68 3b 20 20 20 20  ash tblHash;    
9530: 20 20 20 20 2f 2a 20 41 6c 6c 20 74 61 62 6c 65      /* All table
9540: 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61 6d  s indexed by nam
9550: 65 20 2a 2f 0a 20 20 48 61 73 68 20 69 64 78 48  e */.  Hash idxH
9560: 61 73 68 3b 20 20 20 20 20 20 20 20 2f 2a 20 41  ash;        /* A
9570: 6c 6c 20 28 6e 61 6d 65 64 29 20 69 6e 64 69 63  ll (named) indic
9580: 65 73 20 69 6e 64 65 78 65 64 20 62 79 20 6e 61  es indexed by na
9590: 6d 65 20 2a 2f 0a 20 20 48 61 73 68 20 74 72 69  me */.  Hash tri
95a0: 67 48 61 73 68 3b 20 20 20 20 20 20 20 2f 2a 20  gHash;       /* 
95b0: 41 6c 6c 20 74 72 69 67 67 65 72 73 20 69 6e 64  All triggers ind
95c0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
95d0: 20 20 48 61 73 68 20 66 6b 65 79 48 61 73 68 3b    Hash fkeyHash;
95e0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 66 6f         /* All fo
95f0: 72 65 69 67 6e 20 6b 65 79 73 20 62 79 20 72 65  reign keys by re
9600: 66 65 72 65 6e 63 65 64 20 74 61 62 6c 65 20 6e  ferenced table n
9610: 61 6d 65 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  ame */.  Table *
9620: 70 53 65 71 54 61 62 3b 20 20 20 20 20 20 2f 2a  pSeqTab;      /*
9630: 20 54 68 65 20 73 71 6c 69 74 65 5f 73 65 71 75   The sqlite_sequ
9640: 65 6e 63 65 20 74 61 62 6c 65 20 75 73 65 64 20  ence table used 
9650: 62 79 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  by AUTOINCREMENT
9660: 20 2a 2f 0a 20 20 75 38 20 66 69 6c 65 5f 66 6f   */.  u8 file_fo
9670: 72 6d 61 74 3b 20 20 20 20 20 20 2f 2a 20 53 63  rmat;      /* Sc
9680: 68 65 6d 61 20 66 6f 72 6d 61 74 20 76 65 72 73  hema format vers
9690: 69 6f 6e 20 66 6f 72 20 74 68 69 73 20 66 69 6c  ion for this fil
96a0: 65 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20 20  e */.  u8 enc;  
96b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
96c0: 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 75 73 65  ext encoding use
96d0: 64 20 62 79 20 74 68 69 73 20 64 61 74 61 62 61  d by this databa
96e0: 73 65 20 2a 2f 0a 20 20 75 31 36 20 73 63 68 65  se */.  u16 sche
96f0: 6d 61 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  maFlags;     /* 
9700: 46 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  Flags associated
9710: 20 77 69 74 68 20 74 68 69 73 20 73 63 68 65 6d   with this schem
9720: 61 20 2a 2f 0a 20 20 69 6e 74 20 63 61 63 68 65  a */.  int cache
9730: 5f 73 69 7a 65 3b 20 20 20 20 20 20 2f 2a 20 4e  _size;      /* N
9740: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 74  umber of pages t
9750: 6f 20 75 73 65 20 69 6e 20 74 68 65 20 63 61 63  o use in the cac
9760: 68 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  he */.};../*.** 
9770: 54 68 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e  These macros can
9780: 20 62 65 20 75 73 65 64 20 74 6f 20 74 65 73 74   be used to test
9790: 2c 20 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20  , set, or clear 
97a0: 62 69 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 44  bits in the.** D
97b0: 62 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  b.pSchema->flags
97c0: 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69   field..*/.#defi
97d0: 6e 65 20 44 62 48 61 73 50 72 6f 70 65 72 74 79  ne DbHasProperty
97e0: 28 44 2c 49 2c 50 29 20 20 20 20 20 28 28 28 44  (D,I,P)     (((D
97f0: 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d  )->aDb[I].pSchem
9800: 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28  a->schemaFlags&(
9810: 50 29 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e  P))==(P)).#defin
9820: 65 20 44 62 48 61 73 41 6e 79 50 72 6f 70 65 72  e DbHasAnyProper
9830: 74 79 28 44 2c 49 2c 50 29 20 20 28 28 28 44 29  ty(D,I,P)  (((D)
9840: 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61  ->aDb[I].pSchema
9850: 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26 28 50  ->schemaFlags&(P
9860: 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 44  ))!=0).#define D
9870: 62 53 65 74 50 72 6f 70 65 72 74 79 28 44 2c 49  bSetProperty(D,I
9880: 2c 50 29 20 20 20 20 20 28 44 29 2d 3e 61 44 62  ,P)     (D)->aDb
9890: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
98a0: 65 6d 61 46 6c 61 67 73 7c 3d 28 50 29 0a 23 64  emaFlags|=(P).#d
98b0: 65 66 69 6e 65 20 44 62 43 6c 65 61 72 50 72 6f  efine DbClearPro
98c0: 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20 20 28  perty(D,I,P)   (
98d0: 44 29 2d 3e 61 44 62 5b 49 5d 2e 70 53 63 68 65  D)->aDb[I].pSche
98e0: 6d 61 2d 3e 73 63 68 65 6d 61 46 6c 61 67 73 26  ma->schemaFlags&
98f0: 3d 7e 28 50 29 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  =~(P)../*.** All
9900: 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
9910: 74 68 65 20 44 42 2e 70 53 63 68 65 6d 61 2d 3e  the DB.pSchema->
9920: 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2a 0a  flags field..**.
9930: 2a 2a 20 54 68 65 20 44 42 5f 53 63 68 65 6d 61  ** The DB_Schema
9940: 4c 6f 61 64 65 64 20 66 6c 61 67 20 69 73 20 73  Loaded flag is s
9950: 65 74 20 61 66 74 65 72 20 74 68 65 20 64 61 74  et after the dat
9960: 61 62 61 73 65 20 73 63 68 65 6d 61 20 68 61 73  abase schema has
9970: 20 62 65 65 6e 0a 2a 2a 20 72 65 61 64 20 69 6e   been.** read in
9980: 74 6f 20 69 6e 74 65 72 6e 61 6c 20 68 61 73 68  to internal hash
9990: 20 74 61 62 6c 65 73 2e 0a 2a 2a 0a 2a 2a 20 44   tables..**.** D
99a0: 42 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 6d  B_UnresetViews m
99b0: 65 61 6e 73 20 74 68 61 74 20 6f 6e 65 20 6f 72  eans that one or
99c0: 20 6d 6f 72 65 20 76 69 65 77 73 20 68 61 76 65   more views have
99d0: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 74 68   column names th
99e0: 61 74 0a 2a 2a 20 68 61 76 65 20 62 65 65 6e 20  at.** have been 
99f0: 66 69 6c 6c 65 64 20 6f 75 74 2e 20 20 49 66 20  filled out.  If 
9a00: 74 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67  the schema chang
9a10: 65 73 2c 20 74 68 65 73 65 20 63 6f 6c 75 6d 6e  es, these column
9a20: 20 6e 61 6d 65 73 20 6d 69 67 68 74 0a 2a 2a 20   names might.** 
9a30: 63 68 61 6e 67 65 73 20 61 6e 64 20 73 6f 20 74  changes and so t
9a40: 68 65 20 76 69 65 77 20 77 69 6c 6c 20 6e 65 65  he view will nee
9a50: 64 20 74 6f 20 62 65 20 72 65 73 65 74 2e 0a 2a  d to be reset..*
9a60: 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 53 63 68  /.#define DB_Sch
9a70: 65 6d 61 4c 6f 61 64 65 64 20 20 20 20 30 78 30  emaLoaded    0x0
9a80: 30 30 31 20 20 2f 2a 20 54 68 65 20 73 63 68 65  001  /* The sche
9a90: 6d 61 20 68 61 73 20 62 65 65 6e 20 6c 6f 61 64  ma has been load
9aa0: 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42  ed */.#define DB
9ab0: 5f 55 6e 72 65 73 65 74 56 69 65 77 73 20 20 20  _UnresetViews   
9ac0: 20 30 78 30 30 30 32 20 20 2f 2a 20 53 6f 6d 65   0x0002  /* Some
9ad0: 20 76 69 65 77 73 20 68 61 76 65 20 64 65 66 69   views have defi
9ae0: 6e 65 64 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73  ned column names
9af0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 44 42 5f 45   */.#define DB_E
9b00: 6d 70 74 79 20 20 20 20 20 20 20 20 20 20 20 30  mpty           0
9b10: 78 30 30 30 34 20 20 2f 2a 20 54 68 65 20 66 69  x0004  /* The fi
9b20: 6c 65 20 69 73 20 65 6d 70 74 79 20 28 6c 65 6e  le is empty (len
9b30: 67 74 68 20 30 20 62 79 74 65 73 29 20 2a 2f 0a  gth 0 bytes) */.
9b40: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ./*.** The numbe
9b50: 72 20 6f 66 20 64 69 66 66 65 72 65 6e 74 20 6b  r of different k
9b60: 69 6e 64 73 20 6f 66 20 74 68 69 6e 67 73 20 74  inds of things t
9b70: 68 61 74 20 63 61 6e 20 62 65 20 6c 69 6d 69 74  hat can be limit
9b80: 65 64 0a 2a 2a 20 75 73 69 6e 67 20 74 68 65 20  ed.** using the 
9b90: 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 29 20  sqlite3_limit() 
9ba0: 69 6e 74 65 72 66 61 63 65 2e 0a 2a 2f 0a 23 64  interface..*/.#d
9bb0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 4c  efine SQLITE_N_L
9bc0: 49 4d 49 54 20 28 53 51 4c 49 54 45 5f 4c 49 4d  IMIT (SQLITE_LIM
9bd0: 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  IT_WORKER_THREAD
9be0: 53 2b 31 29 0a 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b  S+1)../*.** Look
9bf0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 69 73 20  aside malloc is 
9c00: 61 20 73 65 74 20 6f 66 20 66 69 78 65 64 2d 73  a set of fixed-s
9c10: 69 7a 65 20 62 75 66 66 65 72 73 20 74 68 61 74  ize buffers that
9c20: 20 63 61 6e 20 62 65 20 75 73 65 64 0a 2a 2a 20   can be used.** 
9c30: 74 6f 20 73 61 74 69 73 66 79 20 73 6d 61 6c 6c  to satisfy small
9c40: 20 74 72 61 6e 73 69 65 6e 74 20 6d 65 6d 6f 72   transient memor
9c50: 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 72 65 71  y allocation req
9c60: 75 65 73 74 73 20 66 6f 72 20 6f 62 6a 65 63 74  uests for object
9c70: 73 0a 2a 2a 20 61 73 73 6f 63 69 61 74 65 64 20  s.** associated 
9c80: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
9c90: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
9ca0: 63 74 69 6f 6e 2e 20 20 54 68 65 20 75 73 65 20  ction.  The use 
9cb0: 6f 66 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20  of.** lookaside 
9cc0: 6d 61 6c 6c 6f 63 20 70 72 6f 76 69 64 65 73 20  malloc provides 
9cd0: 61 20 73 69 67 6e 69 66 69 63 61 6e 74 20 70 65  a significant pe
9ce0: 72 66 6f 72 6d 61 6e 63 65 20 65 6e 68 61 6e 63  rformance enhanc
9cf0: 65 6d 65 6e 74 0a 2a 2a 20 28 61 70 70 72 6f 78  ement.** (approx
9d00: 20 31 30 25 29 20 62 79 20 61 76 6f 69 64 69 6e   10%) by avoidin
9d10: 67 20 6e 75 6d 65 72 6f 75 73 20 6d 61 6c 6c 6f  g numerous mallo
9d20: 63 2f 66 72 65 65 20 72 65 71 75 65 73 74 73 20  c/free requests 
9d30: 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a  while parsing.**
9d40: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 2e   SQL statements.
9d50: 0a 2a 2a 0a 2a 2a 20 54 68 65 20 4c 6f 6f 6b 61  .**.** The Looka
9d60: 73 69 64 65 20 73 74 72 75 63 74 75 72 65 20 68  side structure h
9d70: 6f 6c 64 73 20 63 6f 6e 66 69 67 75 72 61 74 69  olds configurati
9d80: 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  on information a
9d90: 62 6f 75 74 20 74 68 65 0a 2a 2a 20 6c 6f 6f 6b  bout the.** look
9da0: 61 73 69 64 65 20 6d 61 6c 6c 6f 63 20 73 75 62  aside malloc sub
9db0: 73 79 73 74 65 6d 2e 20 20 45 61 63 68 20 61 76  system.  Each av
9dc0: 61 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 61  ailable memory a
9dd0: 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 0a 2a 2a 20  llocation in.** 
9de0: 74 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 73 75  the lookaside su
9df0: 62 73 79 73 74 65 6d 20 69 73 20 73 74 6f 72 65  bsystem is store
9e00: 64 20 6f 6e 20 61 20 6c 69 6e 6b 65 64 20 6c 69  d on a linked li
9e10: 73 74 20 6f 66 20 4c 6f 6f 6b 61 73 69 64 65 53  st of LookasideS
9e20: 6c 6f 74 0a 2a 2a 20 6f 62 6a 65 63 74 73 2e 0a  lot.** objects..
9e30: 2a 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65 20  **.** Lookaside 
9e40: 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20  allocations are 
9e50: 6f 6e 6c 79 20 61 6c 6c 6f 77 65 64 20 66 6f 72  only allowed for
9e60: 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 61 72   objects that ar
9e70: 65 20 61 73 73 6f 63 69 61 74 65 64 0a 2a 2a 20  e associated.** 
9e80: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
9e90: 72 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  r database conne
9ea0: 63 74 69 6f 6e 2e 20 20 48 65 6e 63 65 2c 20 73  ction.  Hence, s
9eb0: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
9ec0: 6e 20 63 61 6e 6e 6f 74 0a 2a 2a 20 62 65 20 73  n cannot.** be s
9ed0: 74 6f 72 65 64 20 69 6e 20 6c 6f 6f 6b 61 73 69  tored in lookasi
9ee0: 64 65 20 62 65 63 61 75 73 65 20 69 6e 20 73 68  de because in sh
9ef0: 61 72 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20  ared cache mode 
9f00: 74 68 65 20 73 63 68 65 6d 61 20 69 6e 66 6f 72  the schema infor
9f10: 6d 61 74 69 6f 6e 0a 2a 2a 20 69 73 20 73 68 61  mation.** is sha
9f20: 72 65 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 20  red by multiple 
9f30: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
9f40: 69 6f 6e 73 2e 20 20 54 68 65 72 65 66 6f 72 65  ions.  Therefore
9f50: 2c 20 77 68 69 6c 65 20 70 61 72 73 69 6e 67 0a  , while parsing.
9f60: 2a 2a 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d  ** schema inform
9f70: 61 74 69 6f 6e 2c 20 74 68 65 20 4c 6f 6f 6b 61  ation, the Looka
9f80: 73 69 64 65 2e 62 45 6e 61 62 6c 65 64 20 66 6c  side.bEnabled fl
9f90: 61 67 20 69 73 20 63 6c 65 61 72 65 64 20 73 6f  ag is cleared so
9fa0: 20 74 68 61 74 0a 2a 2a 20 6c 6f 6f 6b 61 73 69   that.** lookasi
9fb0: 64 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61  de allocations a
9fc0: 72 65 20 6e 6f 74 20 75 73 65 64 20 74 6f 20 63  re not used to c
9fd0: 6f 6e 73 74 72 75 63 74 20 74 68 65 20 73 63 68  onstruct the sch
9fe0: 65 6d 61 20 6f 62 6a 65 63 74 73 2e 0a 2a 2f 0a  ema objects..*/.
9ff0: 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65  struct Lookaside
a000: 20 7b 0a 20 20 75 33 32 20 62 44 69 73 61 62 6c   {.  u32 bDisabl
a010: 65 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  e;           /* 
a020: 4f 6e 6c 79 20 6f 70 65 72 61 74 65 20 74 68 65  Only operate the
a030: 20 6c 6f 6f 6b 61 73 69 64 65 20 77 68 65 6e 20   lookaside when 
a040: 7a 65 72 6f 20 2a 2f 0a 20 20 75 31 36 20 73 7a  zero */.  u16 sz
a050: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
a060: 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63    /* Size of eac
a070: 68 20 62 75 66 66 65 72 20 69 6e 20 62 79 74 65  h buffer in byte
a080: 73 20 2a 2f 0a 20 20 75 38 20 62 4d 61 6c 6c 6f  s */.  u8 bMallo
a090: 63 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ced;           /
a0a0: 2a 20 54 72 75 65 20 69 66 20 70 53 74 61 72 74  * True if pStart
a0b0: 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73   obtained from s
a0c0: 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f 63 28 29 20  qlite3_malloc() 
a0d0: 2a 2f 0a 20 20 69 6e 74 20 6e 4f 75 74 3b 20 20  */.  int nOut;  
a0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a0f0: 4e 75 6d 62 65 72 20 6f 66 20 62 75 66 66 65 72  Number of buffer
a100: 73 20 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63  s currently chec
a110: 6b 65 64 20 6f 75 74 20 2a 2f 0a 20 20 69 6e 74  ked out */.  int
a120: 20 6d 78 4f 75 74 3b 20 20 20 20 20 20 20 20 20   mxOut;         
a130: 20 20 20 20 20 2f 2a 20 48 69 67 68 77 61 74 65       /* Highwate
a140: 72 20 6d 61 72 6b 20 66 6f 72 20 6e 4f 75 74 20  r mark for nOut 
a150: 2a 2f 0a 20 20 69 6e 74 20 61 6e 53 74 61 74 5b  */.  int anStat[
a160: 33 5d 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  3];          /* 
a170: 30 3a 20 68 69 74 73 2e 20 20 31 3a 20 73 69 7a  0: hits.  1: siz
a180: 65 20 6d 69 73 73 65 73 2e 20 20 32 3a 20 66 75  e misses.  2: fu
a190: 6c 6c 20 6d 69 73 73 65 73 20 2a 2f 0a 20 20 4c  ll misses */.  L
a1a0: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 46  ookasideSlot *pF
a1b0: 72 65 65 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ree;   /* List o
a1c0: 66 20 61 76 61 69 6c 61 62 6c 65 20 62 75 66 66  f available buff
a1d0: 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
a1e0: 53 74 61 72 74 3b 20 20 20 20 20 20 20 20 20 20  Start;          
a1f0: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 6f   /* First byte o
a200: 66 20 61 76 61 69 6c 61 62 6c 65 20 6d 65 6d 6f  f available memo
a210: 72 79 20 73 70 61 63 65 20 2a 2f 0a 20 20 76 6f  ry space */.  vo
a220: 69 64 20 2a 70 45 6e 64 3b 20 20 20 20 20 20 20  id *pEnd;       
a230: 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20 62        /* First b
a240: 79 74 65 20 70 61 73 74 20 65 6e 64 20 6f 66 20  yte past end of 
a250: 61 76 61 69 6c 61 62 6c 65 20 73 70 61 63 65 20  available space 
a260: 2a 2f 0a 7d 3b 0a 73 74 72 75 63 74 20 4c 6f 6f  */.};.struct Loo
a270: 6b 61 73 69 64 65 53 6c 6f 74 20 7b 0a 20 20 4c  kasideSlot {.  L
a280: 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 20 2a 70 4e  ookasideSlot *pN
a290: 65 78 74 3b 20 20 20 20 2f 2a 20 4e 65 78 74 20  ext;    /* Next 
a2a0: 62 75 66 66 65 72 20 69 6e 20 74 68 65 20 6c 69  buffer in the li
a2b0: 73 74 20 6f 66 20 66 72 65 65 20 62 75 66 66 65  st of free buffe
a2c0: 72 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  rs */.};../*.** 
a2d0: 41 20 68 61 73 68 20 74 61 62 6c 65 20 66 6f 72  A hash table for
a2e0: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69   built-in functi
a2f0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 73 2e 20  on definitions. 
a300: 20 28 41 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65   (Application-de
a310: 66 69 6e 65 64 0a 2a 2a 20 66 75 6e 63 74 69 6f  fined.** functio
a320: 6e 73 20 75 73 65 20 61 20 72 65 67 75 6c 61 72  ns use a regular
a330: 20 74 61 62 6c 65 20 74 61 62 6c 65 20 66 72 6f   table table fro
a340: 6d 20 68 61 73 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a  m hash.h.).**.**
a350: 20 48 61 73 68 20 65 61 63 68 20 46 75 6e 63 44   Hash each FuncD
a360: 65 66 20 73 74 72 75 63 74 75 72 65 20 69 6e 74  ef structure int
a370: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e  o one of the Fun
a380: 63 44 65 66 48 61 73 68 2e 61 5b 5d 20 73 6c 6f  cDefHash.a[] slo
a390: 74 73 2e 0a 2a 2a 20 43 6f 6c 6c 69 73 69 6f 6e  ts..** Collision
a3a0: 73 20 61 72 65 20 6f 6e 20 74 68 65 20 46 75 6e  s are on the Fun
a3b0: 63 44 65 66 2e 75 2e 70 48 61 73 68 20 63 68 61  cDef.u.pHash cha
a3c0: 69 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  in..*/.#define S
a3d0: 51 4c 49 54 45 5f 46 55 4e 43 5f 48 41 53 48 5f  QLITE_FUNC_HASH_
a3e0: 53 5a 20 32 33 0a 73 74 72 75 63 74 20 46 75 6e  SZ 23.struct Fun
a3f0: 63 44 65 66 48 61 73 68 20 7b 0a 20 20 46 75 6e  cDefHash {.  Fun
a400: 63 44 65 66 20 2a 61 5b 53 51 4c 49 54 45 5f 46  cDef *a[SQLITE_F
a410: 55 4e 43 5f 48 41 53 48 5f 53 5a 5d 3b 20 20 20  UNC_HASH_SZ];   
a420: 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61 62 6c      /* Hash tabl
a430: 65 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  e for functions 
a440: 2a 2f 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51  */.};..#ifdef SQ
a450: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
a460: 54 49 43 41 54 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49  TICATION./*.** I
a470: 6e 66 6f 72 6d 61 74 69 6f 6e 20 68 65 6c 64 20  nformation held 
a480: 69 6e 20 74 68 65 20 22 73 71 6c 69 74 65 33 22  in the "sqlite3"
a490: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
a4a0: 74 69 6f 6e 20 6f 62 6a 65 63 74 20 61 6e 64 20  tion object and 
a4b0: 75 73 65 64 0a 2a 2a 20 74 6f 20 6d 61 6e 61 67  used.** to manag
a4c0: 65 20 75 73 65 72 20 61 75 74 68 65 6e 74 69 63  e user authentic
a4d0: 61 74 69 6f 6e 2e 0a 2a 2f 0a 74 79 70 65 64 65  ation..*/.typede
a4e0: 66 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33  f struct sqlite3
a4f0: 5f 75 73 65 72 61 75 74 68 20 73 71 6c 69 74 65  _userauth sqlite
a500: 33 5f 75 73 65 72 61 75 74 68 3b 0a 73 74 72 75  3_userauth;.stru
a510: 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72 61  ct sqlite3_usera
a520: 75 74 68 20 7b 0a 20 20 75 38 20 61 75 74 68 4c  uth {.  u8 authL
a530: 65 76 65 6c 3b 20 20 20 20 20 20 20 20 20 20 20  evel;           
a540: 20 20 20 20 20 20 2f 2a 20 43 75 72 72 65 6e 74        /* Current
a550: 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20   authentication 
a560: 6c 65 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 6e  level */.  int n
a570: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
a580: 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
a590: 20 6f 66 20 74 68 65 20 7a 41 75 74 68 50 57 20   of the zAuthPW 
a5a0: 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 63 68  in bytes */.  ch
a5b0: 61 72 20 2a 7a 41 75 74 68 50 57 3b 20 20 20 20  ar *zAuthPW;    
a5c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
a5d0: 61 73 73 77 6f 72 64 20 75 73 65 64 20 74 6f 20  assword used to 
a5e0: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
a5f0: 20 20 63 68 61 72 20 2a 7a 41 75 74 68 55 73 65    char *zAuthUse
a600: 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
a610: 2f 2a 20 55 73 65 72 20 6e 61 6d 65 20 75 73 65  /* User name use
a620: 64 20 74 6f 20 61 75 74 68 65 6e 74 69 63 61 74  d to authenticat
a630: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f  e */.};../* Allo
a640: 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 73  wed values for s
a650: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 2e  qlite3_userauth.
a660: 61 75 74 68 4c 65 76 65 6c 20 2a 2f 0a 23 64 65  authLevel */.#de
a670: 66 69 6e 65 20 55 41 55 54 48 5f 55 6e 6b 6e 6f  fine UAUTH_Unkno
a680: 77 6e 20 20 20 20 20 30 20 20 20 20 20 2f 2a 20  wn     0     /* 
a690: 41 75 74 68 65 6e 74 69 63 61 74 69 6f 6e 20 6e  Authentication n
a6a0: 6f 74 20 79 65 74 20 63 68 65 63 6b 65 64 20 2a  ot yet checked *
a6b0: 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48 5f  /.#define UAUTH_
a6c0: 46 61 69 6c 20 20 20 20 20 20 20 20 31 20 20 20  Fail        1   
a6d0: 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65 6e    /* User authen
a6e0: 74 69 63 61 74 69 6f 6e 20 66 61 69 6c 65 64 20  tication failed 
a6f0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
a700: 5f 55 73 65 72 20 20 20 20 20 20 20 20 32 20 20  _User        2  
a710: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
a720: 74 65 64 20 61 73 20 61 20 6e 6f 72 6d 61 6c 20  ted as a normal 
a730: 75 73 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  user */.#define 
a740: 55 41 55 54 48 5f 41 64 6d 69 6e 20 20 20 20 20  UAUTH_Admin     
a750: 20 20 33 20 20 20 20 20 2f 2a 20 41 75 74 68 65    3     /* Authe
a760: 6e 74 69 63 61 74 65 64 20 61 73 20 61 6e 20 61  nticated as an a
a770: 64 6d 69 6e 69 73 74 72 61 74 6f 72 20 2a 2f 0a  dministrator */.
a780: 0a 2f 2a 20 46 75 6e 63 74 69 6f 6e 73 20 75 73  ./* Functions us
a790: 65 64 20 6f 6e 6c 79 20 62 79 20 75 73 65 72 20  ed only by user 
a7a0: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 6c 6f  authorization lo
a7b0: 67 69 63 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  gic */.int sqlit
a7c0: 65 33 55 73 65 72 41 75 74 68 54 61 62 6c 65 28  e3UserAuthTable(
a7d0: 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e  const char*);.in
a7e0: 74 20 73 71 6c 69 74 65 33 55 73 65 72 41 75 74  t sqlite3UserAut
a7f0: 68 43 68 65 63 6b 4c 6f 67 69 6e 28 73 71 6c 69  hCheckLogin(sqli
a800: 74 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  te3*,const char*
a810: 2c 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,u8*);.void sqli
a820: 74 65 33 55 73 65 72 41 75 74 68 49 6e 69 74 28  te3UserAuthInit(
a830: 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
a840: 73 71 6c 69 74 65 33 43 72 79 70 74 46 75 6e 63  sqlite3CryptFunc
a850: 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
a860: 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
a870: 6c 75 65 2a 2a 29 3b 0a 0a 23 65 6e 64 69 66 20  lue**);..#endif 
a880: 2f 2a 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  /* SQLITE_USER_A
a890: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 20 2a 2f  UTHENTICATION */
a8a0: 0a 0a 2f 2a 0a 2a 2a 20 74 79 70 65 64 65 66 20  ../*.** typedef 
a8b0: 66 6f 72 20 74 68 65 20 61 75 74 68 6f 72 69 7a  for the authoriz
a8c0: 61 74 69 6f 6e 20 63 61 6c 6c 62 61 63 6b 20 66  ation callback f
a8d0: 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 64  unction..*/.#ifd
a8e0: 65 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41  ef SQLITE_USER_A
a8f0: 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20  UTHENTICATION.  
a900: 74 79 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71  typedef int (*sq
a910: 6c 69 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69  lite3_xauth)(voi
a920: 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
a930: 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63  r*,const char*,c
a940: 6f 6e 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20  onst char*,.    
a950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a960: 20 20 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74             const
a970: 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
a980: 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 74 79  ar*);.#else.  ty
a990: 70 65 64 65 66 20 69 6e 74 20 28 2a 73 71 6c 69  pedef int (*sqli
a9a0: 74 65 33 5f 78 61 75 74 68 29 28 76 6f 69 64 2a  te3_xauth)(void*
a9b0: 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a  ,int,const char*
a9c0: 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e  ,const char*,con
a9d0: 73 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 20  st char*,.      
a9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a9f0: 20 20 20 20 20 20 20 20 20 63 6f 6e 73 74 20 63           const c
aa00: 68 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23  har*);.#endif..#
aa10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
aa20: 49 54 5f 44 45 50 52 45 43 41 54 45 44 0a 2f 2a  IT_DEPRECATED./*
aa30: 20 54 68 69 73 20 69 73 20 61 6e 20 65 78 74 72   This is an extr
aa40: 61 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 6d  a SQLITE_TRACE m
aa50: 61 63 72 6f 20 74 68 61 74 20 69 6e 64 69 63 61  acro that indica
aa60: 74 65 73 20 22 6c 65 67 61 63 79 22 20 74 72 61  tes "legacy" tra
aa70: 63 69 6e 67 0a 2a 2a 20 69 6e 20 74 68 65 20 73  cing.** in the s
aa80: 74 79 6c 65 20 6f 66 20 73 71 6c 69 74 65 33 5f  tyle of sqlite3_
aa90: 74 72 61 63 65 28 29 0a 2a 2f 0a 23 64 65 66 69  trace().*/.#defi
aaa0: 6e 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f  ne SQLITE_TRACE_
aab0: 4c 45 47 41 43 59 20 20 30 78 38 30 0a 23 65 6c  LEGACY  0x80.#el
aac0: 73 65 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  se.#define SQLIT
aad0: 45 5f 54 52 41 43 45 5f 4c 45 47 41 43 59 20 20  E_TRACE_LEGACY  
aae0: 30 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  0.#endif /* SQLI
aaf0: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
ab00: 45 44 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  ED */.../*.** Ea
ab10: 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
ab20: 65 63 74 69 6f 6e 20 69 73 20 61 6e 20 69 6e 73  ection is an ins
ab30: 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
ab40: 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
ab50: 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 73 71 6c 69  ..*/.struct sqli
ab60: 74 65 33 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  te3 {.  sqlite3_
ab70: 76 66 73 20 2a 70 56 66 73 3b 20 20 20 20 20 20  vfs *pVfs;      
ab80: 20 20 20 20 20 20 2f 2a 20 4f 53 20 49 6e 74 65        /* OS Inte
ab90: 72 66 61 63 65 20 2a 2f 0a 20 20 73 74 72 75 63  rface */.  struc
aba0: 74 20 56 64 62 65 20 2a 70 56 64 62 65 3b 20 20  t Vdbe *pVdbe;  
abb0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74           /* List
abc0: 20 6f 66 20 61 63 74 69 76 65 20 76 69 72 74 75   of active virtu
abd0: 61 6c 20 6d 61 63 68 69 6e 65 73 20 2a 2f 0a 20  al machines */. 
abe0: 20 43 6f 6c 6c 53 65 71 20 2a 70 44 66 6c 74 43   CollSeq *pDfltC
abf0: 6f 6c 6c 3b 20 20 20 20 20 20 20 20 20 20 20 2f  oll;           /
ac00: 2a 20 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  * The default co
ac10: 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65  llating sequence
ac20: 20 28 42 49 4e 41 52 59 29 20 2a 2f 0a 20 20 73   (BINARY) */.  s
ac30: 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 6d 75  qlite3_mutex *mu
ac40: 74 65 78 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  tex;         /* 
ac50: 43 6f 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78  Connection mutex
ac60: 20 2a 2f 0a 20 20 44 62 20 2a 61 44 62 3b 20 20   */.  Db *aDb;  
ac70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ac80: 20 20 20 20 2f 2a 20 41 6c 6c 20 62 61 63 6b 65      /* All backe
ac90: 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 44 62  nds */.  int nDb
aca0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
acb0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
acc0: 20 6f 66 20 62 61 63 6b 65 6e 64 73 20 63 75 72   of backends cur
acd0: 72 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f  rently in use */
ace0: 0a 20 20 69 6e 74 20 66 6c 61 67 73 3b 20 20 20  .  int flags;   
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ad00: 20 2f 2a 20 4d 69 73 63 65 6c 6c 61 6e 65 6f 75   /* Miscellaneou
ad10: 73 20 66 6c 61 67 73 2e 20 53 65 65 20 62 65 6c  s flags. See bel
ad20: 6f 77 20 2a 2f 0a 20 20 69 36 34 20 6c 61 73 74  ow */.  i64 last
ad30: 52 6f 77 69 64 3b 20 20 20 20 20 20 20 20 20 20  Rowid;          
ad40: 20 20 20 20 20 20 2f 2a 20 52 4f 57 49 44 20 6f        /* ROWID o
ad50: 66 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 69 6e  f most recent in
ad60: 73 65 72 74 20 28 73 65 65 20 61 62 6f 76 65 29  sert (see above)
ad70: 20 2a 2f 0a 20 20 69 36 34 20 73 7a 4d 6d 61 70   */.  i64 szMmap
ad80: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
ad90: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6d      /* Default m
ada0: 6d 61 70 5f 73 69 7a 65 20 73 65 74 74 69 6e 67  map_size setting
adb0: 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69   */.  unsigned i
adc0: 6e 74 20 6f 70 65 6e 46 6c 61 67 73 3b 20 20 20  nt openFlags;   
add0: 20 20 20 20 2f 2a 20 46 6c 61 67 73 20 70 61 73      /* Flags pas
ade0: 73 65 64 20 74 6f 20 73 71 6c 69 74 65 33 5f 76  sed to sqlite3_v
adf0: 66 73 2e 78 4f 70 65 6e 28 29 20 2a 2f 0a 20 20  fs.xOpen() */.  
ae00: 69 6e 74 20 65 72 72 43 6f 64 65 3b 20 20 20 20  int errCode;    
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
ae20: 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65 72 72   Most recent err
ae30: 6f 72 20 63 6f 64 65 20 28 53 51 4c 49 54 45 5f  or code (SQLITE_
ae40: 2a 29 20 2a 2f 0a 20 20 69 6e 74 20 65 72 72 4d  *) */.  int errM
ae50: 61 73 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  ask;            
ae60: 20 20 20 20 20 20 2f 2a 20 26 20 72 65 73 75 6c        /* & resul
ae70: 74 20 63 6f 64 65 73 20 77 69 74 68 20 74 68 69  t codes with thi
ae80: 73 20 62 65 66 6f 72 65 20 72 65 74 75 72 6e 69  s before returni
ae90: 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 69 53 79 73  ng */.  int iSys
aea0: 45 72 72 6e 6f 3b 20 20 20 20 20 20 20 20 20 20  Errno;          
aeb0: 20 20 20 20 20 20 2f 2a 20 45 72 72 6e 6f 20 76        /* Errno v
aec0: 61 6c 75 65 20 66 72 6f 6d 20 6c 61 73 74 20 73  alue from last s
aed0: 79 73 74 65 6d 20 65 72 72 6f 72 20 2a 2f 0a 20  ystem error */. 
aee0: 20 75 31 36 20 64 62 4f 70 74 46 6c 61 67 73 3b   u16 dbOptFlags;
aef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
af00: 2a 20 46 6c 61 67 73 20 74 6f 20 65 6e 61 62 6c  * Flags to enabl
af10: 65 2f 64 69 73 61 62 6c 65 20 6f 70 74 69 6d 69  e/disable optimi
af20: 7a 61 74 69 6f 6e 73 20 2a 2f 0a 20 20 75 38 20  zations */.  u8 
af30: 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
af40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 65             /* Te
af50: 78 74 20 65 6e 63 6f 64 69 6e 67 20 2a 2f 0a 20  xt encoding */. 
af60: 20 75 38 20 61 75 74 6f 43 6f 6d 6d 69 74 3b 20   u8 autoCommit; 
af70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
af80: 2a 20 54 68 65 20 61 75 74 6f 2d 63 6f 6d 6d 69  * The auto-commi
af90: 74 20 66 6c 61 67 2e 20 2a 2f 0a 20 20 75 38 20  t flag. */.  u8 
afa0: 74 65 6d 70 5f 73 74 6f 72 65 3b 20 20 20 20 20  temp_store;     
afb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 3a             /* 1:
afc0: 20 66 69 6c 65 20 32 3a 20 6d 65 6d 6f 72 79 20   file 2: memory 
afd0: 30 3a 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20  0: default */.  
afe0: 75 38 20 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3b  u8 mallocFailed;
aff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
b000: 20 54 72 75 65 20 69 66 20 77 65 20 68 61 76 65   True if we have
b010: 20 73 65 65 6e 20 61 20 6d 61 6c 6c 6f 63 20 66   seen a malloc f
b020: 61 69 6c 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ailure */.  u8 b
b030: 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 3b 20 20 20  BenignMalloc;   
b040: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
b050: 6e 6f 74 20 72 65 71 75 69 72 65 20 4f 4f 4d 73  not require OOMs
b060: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
b070: 20 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 20 20   dfltLockMode;  
b080: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
b090: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 2d 6d  efault locking-m
b0a0: 6f 64 65 20 66 6f 72 20 61 74 74 61 63 68 65 64  ode for attached
b0b0: 20 64 62 73 20 2a 2f 0a 20 20 73 69 67 6e 65 64   dbs */.  signed
b0c0: 20 63 68 61 72 20 6e 65 78 74 41 75 74 6f 76 61   char nextAutova
b0d0: 63 3b 20 20 20 20 20 20 2f 2a 20 41 75 74 6f 76  c;      /* Autov
b0e0: 61 63 20 73 65 74 74 69 6e 67 20 61 66 74 65 72  ac setting after
b0f0: 20 56 41 43 55 55 4d 20 69 66 20 3e 3d 30 20 2a   VACUUM if >=0 *
b100: 2f 0a 20 20 75 38 20 73 75 70 70 72 65 73 73 45  /.  u8 suppressE
b110: 72 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rr;             
b120: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 69 73 73 75    /* Do not issu
b130: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  e error messages
b140: 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75 38   if true */.  u8
b150: 20 76 74 61 62 4f 6e 43 6f 6e 66 6c 69 63 74 3b   vtabOnConflict;
b160: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
b170: 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e 20 66  alue to return f
b180: 6f 72 20 73 33 5f 76 74 61 62 5f 6f 6e 5f 63 6f  or s3_vtab_on_co
b190: 6e 66 6c 69 63 74 28 29 20 2a 2f 0a 20 20 75 38  nflict() */.  u8
b1a0: 20 69 73 54 72 61 6e 73 61 63 74 69 6f 6e 53 61   isTransactionSa
b1b0: 76 65 70 6f 69 6e 74 3b 20 20 20 20 2f 2a 20 54  vepoint;    /* T
b1c0: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
b1d0: 6d 6f 73 74 20 73 61 76 65 70 6f 69 6e 74 20 69  most savepoint i
b1e0: 73 20 61 20 54 53 20 2a 2f 0a 20 20 75 38 20 6d  s a TS */.  u8 m
b1f0: 54 72 61 63 65 3b 20 20 20 20 20 20 20 20 20 20  Trace;          
b200: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 7a 65 72            /* zer
b210: 6f 20 6f 72 20 6d 6f 72 65 20 53 51 4c 49 54 45  o or more SQLITE
b220: 5f 54 52 41 43 45 20 66 6c 61 67 73 20 2a 2f 0a  _TRACE flags */.
b230: 20 20 69 6e 74 20 6e 65 78 74 50 61 67 65 73 69    int nextPagesi
b240: 7a 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ze;             
b250: 2f 2a 20 50 61 67 65 73 69 7a 65 20 61 66 74 65  /* Pagesize afte
b260: 72 20 56 41 43 55 55 4d 20 69 66 20 3e 30 20 2a  r VACUUM if >0 *
b270: 2f 0a 20 20 75 33 32 20 6d 61 67 69 63 3b 20 20  /.  u32 magic;  
b280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b290: 20 20 2f 2a 20 4d 61 67 69 63 20 6e 75 6d 62 65    /* Magic numbe
b2a0: 72 20 66 6f 72 20 64 65 74 65 63 74 20 6c 69 62  r for detect lib
b2b0: 72 61 72 79 20 6d 69 73 75 73 65 20 2a 2f 0a 20  rary misuse */. 
b2c0: 20 69 6e 74 20 6e 43 68 61 6e 67 65 3b 20 20 20   int nChange;   
b2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b2e0: 2a 20 56 61 6c 75 65 20 72 65 74 75 72 6e 65 64  * Value returned
b2f0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 68 61 6e   by sqlite3_chan
b300: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  ges() */.  int n
b310: 54 6f 74 61 6c 43 68 61 6e 67 65 3b 20 20 20 20  TotalChange;    
b320: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
b330: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
b340: 6c 69 74 65 33 5f 74 6f 74 61 6c 5f 63 68 61 6e  lite3_total_chan
b350: 67 65 73 28 29 20 2a 2f 0a 20 20 69 6e 74 20 61  ges() */.  int a
b360: 4c 69 6d 69 74 5b 53 51 4c 49 54 45 5f 4e 5f 4c  Limit[SQLITE_N_L
b370: 49 4d 49 54 5d 3b 20 20 20 2f 2a 20 4c 69 6d 69  IMIT];   /* Limi
b380: 74 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d 61 78  ts */.  int nMax
b390: 53 6f 72 74 65 72 4d 6d 61 70 3b 20 20 20 20 20  SorterMmap;     
b3a0: 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
b3b0: 20 73 69 7a 65 20 6f 66 20 72 65 67 69 6f 6e 73   size of regions
b3c0: 20 6d 61 70 70 65 64 20 62 79 20 73 6f 72 74 65   mapped by sorte
b3d0: 72 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 73 71  r */.  struct sq
b3e0: 6c 69 74 65 33 49 6e 69 74 49 6e 66 6f 20 7b 20  lite3InitInfo { 
b3f0: 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74       /* Informat
b400: 69 6f 6e 20 75 73 65 64 20 64 75 72 69 6e 67 20  ion used during 
b410: 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 2a  initialization *
b420: 2f 0a 20 20 20 20 69 6e 74 20 6e 65 77 54 6e 75  /.    int newTnu
b430: 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
b440: 20 20 2f 2a 20 52 6f 6f 74 70 61 67 65 20 6f 66    /* Rootpage of
b450: 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e 69   table being ini
b460: 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 20 20  tialized */.    
b470: 75 38 20 69 44 62 3b 20 20 20 20 20 20 20 20 20  u8 iDb;         
b480: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57              /* W
b490: 68 69 63 68 20 64 62 20 66 69 6c 65 20 69 73 20  hich db file is 
b4a0: 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
b4b0: 64 20 2a 2f 0a 20 20 20 20 75 38 20 62 75 73 79  d */.    u8 busy
b4c0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b4d0: 20 20 20 20 20 2f 2a 20 54 52 55 45 20 69 66 20       /* TRUE if 
b4e0: 63 75 72 72 65 6e 74 6c 79 20 69 6e 69 74 69 61  currently initia
b4f0: 6c 69 7a 69 6e 67 20 2a 2f 0a 20 20 20 20 75 38  lizing */.    u8
b500: 20 6f 72 70 68 61 6e 54 72 69 67 67 65 72 3b 20   orphanTrigger; 
b510: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 61 73            /* Las
b520: 74 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 6f  t statement is o
b530: 72 70 68 61 6e 65 64 20 54 45 4d 50 20 74 72 69  rphaned TEMP tri
b540: 67 67 65 72 20 2a 2f 0a 20 20 20 20 75 38 20 69  gger */.    u8 i
b550: 6d 70 6f 73 74 65 72 54 61 62 6c 65 3b 20 20 20  mposterTable;   
b560: 20 20 20 20 20 20 20 20 2f 2a 20 42 75 69 6c 64          /* Build
b570: 69 6e 67 20 61 6e 20 69 6d 70 6f 73 74 65 72 20  ing an imposter 
b580: 74 61 62 6c 65 20 2a 2f 0a 20 20 7d 20 69 6e 69  table */.  } ini
b590: 74 3b 0a 20 20 69 6e 74 20 6e 56 64 62 65 41 63  t;.  int nVdbeAc
b5a0: 74 69 76 65 3b 20 20 20 20 20 20 20 20 20 20 20  tive;           
b5b0: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
b5c0: 56 44 42 45 73 20 63 75 72 72 65 6e 74 6c 79 20  VDBEs currently 
b5d0: 72 75 6e 6e 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  running */.  int
b5e0: 20 6e 56 64 62 65 52 65 61 64 3b 20 20 20 20 20   nVdbeRead;     
b5f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b600: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b610: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 6f  DBEs that read o
b620: 72 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e 74  r write */.  int
b630: 20 6e 56 64 62 65 57 72 69 74 65 3b 20 20 20 20   nVdbeWrite;    
b640: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
b650: 6d 62 65 72 20 6f 66 20 61 63 74 69 76 65 20 56  mber of active V
b660: 44 42 45 73 20 74 68 61 74 20 72 65 61 64 20 61  DBEs that read a
b670: 6e 64 20 77 72 69 74 65 20 2a 2f 0a 20 20 69 6e  nd write */.  in
b680: 74 20 6e 56 64 62 65 45 78 65 63 3b 20 20 20 20  t nVdbeExec;    
b690: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
b6a0: 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65 64 20  umber of nested 
b6b0: 63 61 6c 6c 73 20 74 6f 20 56 64 62 65 45 78 65  calls to VdbeExe
b6c0: 63 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 44  c() */.  int nVD
b6d0: 65 73 74 72 6f 79 3b 20 20 20 20 20 20 20 20 20  estroy;         
b6e0: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
b6f0: 20 6f 66 20 61 63 74 69 76 65 20 4f 50 5f 56 44   of active OP_VD
b700: 65 73 74 72 6f 79 20 6f 70 65 72 61 74 69 6f 6e  estroy operation
b710: 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 45 78 74 65  s */.  int nExte
b720: 6e 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20  nsion;          
b730: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
b740: 66 20 6c 6f 61 64 65 64 20 65 78 74 65 6e 73 69  f loaded extensi
b750: 6f 6e 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 2a  ons */.  void **
b760: 61 45 78 74 65 6e 73 69 6f 6e 3b 20 20 20 20 20  aExtension;     
b770: 20 20 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20         /* Array 
b780: 6f 66 20 73 68 61 72 65 64 20 6c 69 62 72 61 72  of shared librar
b790: 79 20 68 61 6e 64 6c 65 73 20 2a 2f 0a 20 20 69  y handles */.  i
b7a0: 6e 74 20 28 2a 78 54 72 61 63 65 29 28 75 33 32  nt (*xTrace)(u32
b7b0: 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 2c 76 6f 69  ,void*,void*,voi
b7c0: 64 2a 29 3b 20 20 20 20 20 2f 2a 20 54 72 61 63  d*);     /* Trac
b7d0: 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  e function */.  
b7e0: 76 6f 69 64 20 2a 70 54 72 61 63 65 41 72 67 3b  void *pTraceArg;
b7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b800: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
b810: 75 6d 65 6e 74 20 74 6f 20 74 68 65 20 74 72 61  ument to the tra
b820: 63 65 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  ce function */. 
b830: 20 76 6f 69 64 20 28 2a 78 50 72 6f 66 69 6c 65   void (*xProfile
b840: 29 28 76 6f 69 64 2a 2c 63 6f 6e 73 74 20 63 68  )(void*,const ch
b850: 61 72 2a 2c 75 36 34 29 3b 20 20 2f 2a 20 50 72  ar*,u64);  /* Pr
b860: 6f 66 69 6c 69 6e 67 20 66 75 6e 63 74 69 6f 6e  ofiling function
b870: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f   */.  void *pPro
b880: 66 69 6c 65 41 72 67 3b 20 20 20 20 20 20 20 20  fileArg;        
b890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8a0: 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20 70  /* Argument to p
b8b0: 72 6f 66 69 6c 65 20 66 75 6e 63 74 69 6f 6e 20  rofile function 
b8c0: 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 43 6f 6d 6d  */.  void *pComm
b8d0: 69 74 41 72 67 3b 20 20 20 20 20 20 20 20 20 20  itArg;          
b8e0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
b8f0: 6e 74 20 74 6f 20 78 43 6f 6d 6d 69 74 43 61 6c  nt to xCommitCal
b900: 6c 62 61 63 6b 28 29 20 2a 2f 0a 20 20 69 6e 74  lback() */.  int
b910: 20 28 2a 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61   (*xCommitCallba
b920: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 20 20 20 2f  ck)(void*);    /
b930: 2a 20 49 6e 76 6f 6b 65 64 20 61 74 20 65 76 65  * Invoked at eve
b940: 72 79 20 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20  ry commit. */.  
b950: 76 6f 69 64 20 2a 70 52 6f 6c 6c 62 61 63 6b 41  void *pRollbackA
b960: 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rg;             
b970: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
b980: 20 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61   xRollbackCallba
b990: 63 6b 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28  ck() */.  void (
b9a0: 2a 78 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61  *xRollbackCallba
b9b0: 63 6b 29 28 76 6f 69 64 2a 29 3b 20 2f 2a 20 49  ck)(void*); /* I
b9c0: 6e 76 6f 6b 65 64 20 61 74 20 65 76 65 72 79 20  nvoked at every 
b9d0: 63 6f 6d 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69  commit. */.  voi
b9e0: 64 20 2a 70 55 70 64 61 74 65 41 72 67 3b 0a 20  d *pUpdateArg;. 
b9f0: 20 76 6f 69 64 20 28 2a 78 55 70 64 61 74 65 43   void (*xUpdateC
ba00: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 2a 2c 69  allback)(void*,i
ba10: 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c  nt, const char*,
ba20: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 73 71 6c 69  const char*,sqli
ba30: 74 65 5f 69 6e 74 36 34 29 3b 0a 23 69 66 64 65  te_int64);.#ifde
ba40: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
ba50: 50 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 0a 20  PREUPDATE_HOOK. 
ba60: 20 76 6f 69 64 20 2a 70 50 72 65 55 70 64 61 74   void *pPreUpdat
ba70: 65 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 2f  eArg;          /
ba80: 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74  * First argument
ba90: 20 74 6f 20 78 50 72 65 55 70 64 61 74 65 43 61   to xPreUpdateCa
baa0: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
bab0: 20 28 2a 78 50 72 65 55 70 64 61 74 65 43 61 6c   (*xPreUpdateCal
bac0: 6c 62 61 63 6b 29 28 20 20 20 2f 2a 20 52 65 67  lback)(   /* Reg
bad0: 69 73 74 65 72 65 64 20 75 73 69 6e 67 20 73 71  istered using sq
bae0: 6c 69 74 65 33 5f 70 72 65 75 70 64 61 74 65 5f  lite3_preupdate_
baf0: 68 6f 6f 6b 28 29 20 2a 2f 0a 20 20 20 20 76 6f  hook() */.    vo
bb00: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
bb10: 2c 63 68 61 72 20 63 6f 6e 73 74 2a 2c 63 68 61  ,char const*,cha
bb20: 72 20 63 6f 6e 73 74 2a 2c 73 71 6c 69 74 65 33  r const*,sqlite3
bb30: 5f 69 6e 74 36 34 2c 73 71 6c 69 74 65 33 5f 69  _int64,sqlite3_i
bb40: 6e 74 36 34 0a 20 20 29 3b 0a 20 20 50 72 65 55  nt64.  );.  PreU
bb50: 70 64 61 74 65 20 2a 70 50 72 65 55 70 64 61 74  pdate *pPreUpdat
bb60: 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e  e;        /* Con
bb70: 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65 20  text for active 
bb80: 70 72 65 2d 75 70 64 61 74 65 20 63 61 6c 6c 62  pre-update callb
bb90: 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a  ack */.#endif /*
bba0: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 50   SQLITE_ENABLE_P
bbb0: 52 45 55 50 44 41 54 45 5f 48 4f 4f 4b 20 2a 2f  REUPDATE_HOOK */
bbc0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
bbd0: 4f 4d 49 54 5f 57 41 4c 0a 20 20 69 6e 74 20 28  OMIT_WAL.  int (
bbe0: 2a 78 57 61 6c 43 61 6c 6c 62 61 63 6b 29 28 76  *xWalCallback)(v
bbf0: 6f 69 64 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a  oid *, sqlite3 *
bc00: 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
bc10: 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 57  int);.  void *pW
bc20: 61 6c 41 72 67 3b 0a 23 65 6e 64 69 66 0a 20 20  alArg;.#endif.  
bc30: 76 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65  void(*xCollNeede
bc40: 64 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  d)(void*,sqlite3
bc50: 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c 63  *,int eTextRep,c
bc60: 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76  onst char*);.  v
bc70: 6f 69 64 28 2a 78 43 6f 6c 6c 4e 65 65 64 65 64  oid(*xCollNeeded
bc80: 31 36 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65  16)(void*,sqlite
bc90: 33 2a 2c 69 6e 74 20 65 54 65 78 74 52 65 70 2c  3*,int eTextRep,
bca0: 63 6f 6e 73 74 20 76 6f 69 64 2a 29 3b 0a 20 20  const void*);.  
bcb0: 76 6f 69 64 20 2a 70 43 6f 6c 6c 4e 65 65 64 65  void *pCollNeede
bcc0: 64 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  dArg;.  sqlite3_
bcd0: 76 61 6c 75 65 20 2a 70 45 72 72 3b 20 20 20 20  value *pErr;    
bce0: 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74 20 72 65        /* Most re
bcf0: 63 65 6e 74 20 65 72 72 6f 72 20 6d 65 73 73 61  cent error messa
bd00: 67 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a  ge */.  union {.
bd10: 20 20 20 20 76 6f 6c 61 74 69 6c 65 20 69 6e 74      volatile int
bd20: 20 69 73 49 6e 74 65 72 72 75 70 74 65 64 3b 20   isInterrupted; 
bd30: 2f 2a 20 54 72 75 65 20 69 66 20 73 71 6c 69 74  /* True if sqlit
bd40: 65 33 5f 69 6e 74 65 72 72 75 70 74 20 68 61 73  e3_interrupt has
bd50: 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a 2f 0a   been called */.
bd60: 20 20 20 20 64 6f 75 62 6c 65 20 6e 6f 74 55 73      double notUs
bd70: 65 64 31 3b 20 20 20 20 20 20 20 20 20 20 20 20  ed1;            
bd80: 2f 2a 20 53 70 61 63 65 72 20 2a 2f 0a 20 20 7d  /* Spacer */.  }
bd90: 20 75 31 3b 0a 20 20 4c 6f 6f 6b 61 73 69 64 65   u1;.  Lookaside
bda0: 20 6c 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20   lookaside;     
bdb0: 20 20 20 20 20 2f 2a 20 4c 6f 6f 6b 61 73 69 64       /* Lookasid
bdc0: 65 20 6d 61 6c 6c 6f 63 20 63 6f 6e 66 69 67 75  e malloc configu
bdd0: 72 61 74 69 6f 6e 20 2a 2f 0a 23 69 66 6e 64 65  ration */.#ifnde
bde0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
bdf0: 54 48 4f 52 49 5a 41 54 49 4f 4e 0a 20 20 73 71  THORIZATION.  sq
be00: 6c 69 74 65 33 5f 78 61 75 74 68 20 78 41 75 74  lite3_xauth xAut
be10: 68 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41  h;          /* A
be20: 63 63 65 73 73 20 61 75 74 68 6f 72 69 7a 61 74  ccess authorizat
be30: 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a  ion function */.
be40: 20 20 76 6f 69 64 20 2a 70 41 75 74 68 41 72 67    void *pAuthArg
be50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
be60: 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
be70: 74 6f 20 74 68 65 20 61 63 63 65 73 73 20 61 75  to the access au
be80: 74 68 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23  th function */.#
be90: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
bea0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 4f 47 52 45  LITE_OMIT_PROGRE
beb0: 53 53 5f 43 41 4c 4c 42 41 43 4b 0a 20 20 69 6e  SS_CALLBACK.  in
bec0: 74 20 28 2a 78 50 72 6f 67 72 65 73 73 29 28 76  t (*xProgress)(v
bed0: 6f 69 64 20 2a 29 3b 20 20 20 20 20 2f 2a 20 54  oid *);     /* T
bee0: 68 65 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  he progress call
bef0: 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  back */.  void *
bf00: 70 50 72 6f 67 72 65 73 73 41 72 67 3b 20 20 20  pProgressArg;   
bf10: 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d          /* Argum
bf20: 65 6e 74 20 74 6f 20 74 68 65 20 70 72 6f 67 72  ent to the progr
bf30: 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  ess callback */.
bf40: 20 20 75 6e 73 69 67 6e 65 64 20 6e 50 72 6f 67    unsigned nProg
bf50: 72 65 73 73 4f 70 73 3b 20 20 20 20 20 20 20 20  ressOps;        
bf60: 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6f 70 63  /* Number of opc
bf70: 6f 64 65 73 20 66 6f 72 20 70 72 6f 67 72 65 73  odes for progres
bf80: 73 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 23 65  s callback */.#e
bf90: 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c  ndif.#ifndef SQL
bfa0: 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
bfb0: 54 41 42 4c 45 0a 20 20 69 6e 74 20 6e 56 54 72  TABLE.  int nVTr
bfc0: 61 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20 20  ans;            
bfd0: 20 20 20 20 20 20 2f 2a 20 41 6c 6c 6f 63 61 74        /* Allocat
bfe0: 65 64 20 73 69 7a 65 20 6f 66 20 61 56 54 72 61  ed size of aVTra
bff0: 6e 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 4d 6f  ns */.  Hash aMo
c000: 64 75 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20  dule;           
c010: 20 20 20 20 20 20 2f 2a 20 70 6f 70 75 6c 61 74        /* populat
c020: 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 72  ed by sqlite3_cr
c030: 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f  eate_module() */
c040: 0a 20 20 56 74 61 62 43 74 78 20 2a 70 56 74 61  .  VtabCtx *pVta
c050: 62 43 74 78 3b 20 20 20 20 20 20 20 20 20 20 20  bCtx;           
c060: 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66 6f 72 20   /* Context for 
c070: 61 63 74 69 76 65 20 76 74 61 62 20 63 6f 6e 6e  active vtab conn
c080: 65 63 74 2f 63 72 65 61 74 65 20 2a 2f 0a 20 20  ect/create */.  
c090: 56 54 61 62 6c 65 20 2a 2a 61 56 54 72 61 6e 73  VTable **aVTrans
c0a0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
c0b0: 20 56 69 72 74 75 61 6c 20 74 61 62 6c 65 73 20   Virtual tables 
c0c0: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
c0d0: 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 56 54 61 62  ctions */.  VTab
c0e0: 6c 65 20 2a 70 44 69 73 63 6f 6e 6e 65 63 74 3b  le *pDisconnect;
c0f0: 20 20 20 20 2f 2a 20 44 69 73 63 6f 6e 6e 65 63      /* Disconnec
c100: 74 20 74 68 65 73 65 20 69 6e 20 6e 65 78 74 20  t these in next 
c110: 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72 65 28  sqlite3_prepare(
c120: 29 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 48 61  ) */.#endif.  Ha
c130: 73 68 20 61 46 75 6e 63 3b 20 20 20 20 20 20 20  sh aFunc;       
c140: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 48              /* H
c150: 61 73 68 20 74 61 62 6c 65 20 6f 66 20 63 6f 6e  ash table of con
c160: 6e 65 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e  nection function
c170: 73 20 2a 2f 0a 20 20 48 61 73 68 20 61 43 6f 6c  s */.  Hash aCol
c180: 6c 53 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  lSeq;           
c190: 20 20 20 20 20 2f 2a 20 41 6c 6c 20 63 6f 6c 6c       /* All coll
c1a0: 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20  ating sequences 
c1b0: 2a 2f 0a 20 20 42 75 73 79 48 61 6e 64 6c 65 72  */.  BusyHandler
c1c0: 20 62 75 73 79 48 61 6e 64 6c 65 72 3b 20 20 20   busyHandler;   
c1d0: 20 20 20 2f 2a 20 42 75 73 79 20 63 61 6c 6c 62     /* Busy callb
c1e0: 61 63 6b 20 2a 2f 0a 20 20 44 62 20 61 44 62 53  ack */.  Db aDbS
c1f0: 74 61 74 69 63 5b 32 5d 3b 20 20 20 20 20 20 20  tatic[2];       
c200: 20 20 20 20 20 20 20 2f 2a 20 53 74 61 74 69 63         /* Static
c210: 20 73 70 61 63 65 20 66 6f 72 20 74 68 65 20 32   space for the 2
c220: 20 64 65 66 61 75 6c 74 20 62 61 63 6b 65 6e 64   default backend
c230: 73 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  s */.  Savepoint
c240: 20 2a 70 53 61 76 65 70 6f 69 6e 74 3b 20 20 20   *pSavepoint;   
c250: 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20       /* List of 
c260: 61 63 74 69 76 65 20 73 61 76 65 70 6f 69 6e 74  active savepoint
c270: 73 20 2a 2f 0a 20 20 69 6e 74 20 62 75 73 79 54  s */.  int busyT
c280: 69 6d 65 6f 75 74 3b 20 20 20 20 20 20 20 20 20  imeout;         
c290: 20 20 20 20 20 2f 2a 20 42 75 73 79 20 68 61 6e       /* Busy han
c2a0: 64 6c 65 72 20 74 69 6d 65 6f 75 74 2c 20 69 6e  dler timeout, in
c2b0: 20 6d 73 65 63 20 2a 2f 0a 20 20 69 6e 74 20 6e   msec */.  int n
c2c0: 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20 20  Savepoint;      
c2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
c2e0: 65 72 20 6f 66 20 6e 6f 6e 2d 74 72 61 6e 73 61  er of non-transa
c2f0: 63 74 69 6f 6e 20 73 61 76 65 70 6f 69 6e 74 73  ction savepoints
c300: 20 2a 2f 0a 20 20 69 6e 74 20 6e 53 74 61 74 65   */.  int nState
c310: 6d 65 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20  ment;           
c320: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
c330: 20 6e 65 73 74 65 64 20 73 74 61 74 65 6d 65 6e   nested statemen
c340: 74 2d 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 20  t-transactions  
c350: 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72  */.  i64 nDeferr
c360: 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20  edCons;         
c370: 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72 72     /* Net deferr
c380: 65 64 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 74  ed constraints t
c390: 68 69 73 20 74 72 61 6e 73 61 63 74 69 6f 6e 2e  his transaction.
c3a0: 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72   */.  i64 nDefer
c3b0: 72 65 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20  redImmCons;     
c3c0: 20 20 20 20 2f 2a 20 4e 65 74 20 64 65 66 65 72      /* Net defer
c3d0: 72 65 64 20 69 6d 6d 65 64 69 61 74 65 20 63 6f  red immediate co
c3e0: 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69  nstraints */.  i
c3f0: 6e 74 20 2a 70 6e 42 79 74 65 73 46 72 65 65 64  nt *pnBytesFreed
c400: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
c410: 49 66 20 6e 6f 74 20 4e 55 4c 4c 2c 20 69 6e 63  If not NULL, inc
c420: 72 65 6d 65 6e 74 20 74 68 69 73 20 69 6e 20 44  rement this in D
c430: 62 46 72 65 65 28 29 20 2a 2f 0a 23 69 66 64 65  bFree() */.#ifde
c440: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
c450: 55 4e 4c 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20  UNLOCK_NOTIFY.  
c460: 2f 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  /* The following
c470: 20 76 61 72 69 61 62 6c 65 73 20 61 72 65 20 61   variables are a
c480: 6c 6c 20 70 72 6f 74 65 63 74 65 64 20 62 79 20  ll protected by 
c490: 74 68 65 20 53 54 41 54 49 43 5f 4d 41 53 54 45  the STATIC_MASTE
c4a0: 52 0a 20 20 2a 2a 20 6d 75 74 65 78 2c 20 6e 6f  R.  ** mutex, no
c4b0: 74 20 62 79 20 73 71 6c 69 74 65 33 2e 6d 75 74  t by sqlite3.mut
c4c0: 65 78 2e 20 54 68 65 79 20 61 72 65 20 75 73 65  ex. They are use
c4d0: 64 20 62 79 20 63 6f 64 65 20 69 6e 20 6e 6f 74  d by code in not
c4e0: 69 66 79 2e 63 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ify.c..  **.  **
c4f0: 20 57 68 65 6e 20 58 2e 70 55 6e 6c 6f 63 6b 43   When X.pUnlockC
c500: 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68  onnection==Y, th
c510: 61 74 20 6d 65 61 6e 73 20 74 68 61 74 20 58 20  at means that X 
c520: 69 73 20 77 61 69 74 69 6e 67 20 66 6f 72 20 59  is waiting for Y
c530: 20 74 6f 0a 20 20 2a 2a 20 75 6e 6c 6f 63 6b 20   to.  ** unlock 
c540: 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 70  so that it can p
c550: 72 6f 63 65 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a  roceed..  **.  *
c560: 2a 20 57 68 65 6e 20 58 2e 70 42 6c 6f 63 6b 69  * When X.pBlocki
c570: 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3d 3d 59 2c  ngConnection==Y,
c580: 20 74 68 61 74 20 6d 65 61 6e 73 20 74 68 61 74   that means that
c590: 20 73 6f 6d 65 74 68 69 6e 67 20 74 68 61 74 20   something that 
c5a0: 58 20 74 72 69 65 64 0a 20 20 2a 2a 20 74 72 69  X tried.  ** tri
c5b0: 65 64 20 74 6f 20 64 6f 20 72 65 63 65 6e 74 6c  ed to do recentl
c5c0: 79 20 66 61 69 6c 65 64 20 77 69 74 68 20 61 6e  y failed with an
c5d0: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 65   SQLITE_LOCKED e
c5e0: 72 72 6f 72 20 64 75 65 20 74 6f 20 6c 6f 63 6b  rror due to lock
c5f0: 73 0a 20 20 2a 2a 20 68 65 6c 64 20 62 79 20 59  s.  ** held by Y
c600: 2e 0a 20 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ..  */.  sqlite3
c610: 20 2a 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e 65   *pBlockingConne
c620: 63 74 69 6f 6e 3b 20 2f 2a 20 43 6f 6e 6e 65 63  ction; /* Connec
c630: 74 69 6f 6e 20 74 68 61 74 20 63 61 75 73 65 64  tion that caused
c640: 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 2a   SQLITE_LOCKED *
c650: 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 55 6e  /.  sqlite3 *pUn
c660: 6c 6f 63 6b 43 6f 6e 6e 65 63 74 69 6f 6e 3b 20  lockConnection; 
c670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e            /* Con
c680: 6e 65 63 74 69 6f 6e 20 74 6f 20 77 61 74 63 68  nection to watch
c690: 20 66 6f 72 20 75 6e 6c 6f 63 6b 20 2a 2f 0a 20   for unlock */. 
c6a0: 20 76 6f 69 64 20 2a 70 55 6e 6c 6f 63 6b 41 72   void *pUnlockAr
c6b0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c6c0: 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d 65         /* Argume
c6d0: 6e 74 20 74 6f 20 78 55 6e 6c 6f 63 6b 4e 6f 74  nt to xUnlockNot
c6e0: 69 66 79 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  ify */.  void (*
c6f0: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 29 28 76  xUnlockNotify)(v
c700: 6f 69 64 20 2a 2a 2c 20 69 6e 74 29 3b 20 20 2f  oid **, int);  /
c710: 2a 20 55 6e 6c 6f 63 6b 20 6e 6f 74 69 66 79 20  * Unlock notify 
c720: 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 73 71  callback */.  sq
c730: 6c 69 74 65 33 20 2a 70 4e 65 78 74 42 6c 6f 63  lite3 *pNextBloc
c740: 6b 65 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  ked;        /* N
c750: 65 78 74 20 69 6e 20 6c 69 73 74 20 6f 66 20 61  ext in list of a
c760: 6c 6c 20 62 6c 6f 63 6b 65 64 20 63 6f 6e 6e 65  ll blocked conne
c770: 63 74 69 6f 6e 73 20 2a 2f 0a 23 65 6e 64 69 66  ctions */.#endif
c780: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 55  .#ifdef SQLITE_U
c790: 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54 49  SER_AUTHENTICATI
c7a0: 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f 75 73 65  ON.  sqlite3_use
c7b0: 72 61 75 74 68 20 61 75 74 68 3b 20 20 20 20 20  rauth auth;     
c7c0: 20 20 20 2f 2a 20 55 73 65 72 20 61 75 74 68 65     /* User authe
c7d0: 6e 74 69 63 61 74 69 6f 6e 20 69 6e 66 6f 72 6d  ntication inform
c7e0: 61 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ation */.#endif.
c7f0: 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61 63 72  };../*.** A macr
c800: 6f 20 74 6f 20 64 69 73 63 6f 76 65 72 20 74 68  o to discover th
c810: 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 61 20  e encoding of a 
c820: 64 61 74 61 62 61 73 65 2e 0a 2a 2f 0a 23 64 65  database..*/.#de
c830: 66 69 6e 65 20 53 43 48 45 4d 41 5f 45 4e 43 28  fine SCHEMA_ENC(
c840: 64 62 29 20 28 28 64 62 29 2d 3e 61 44 62 5b 30  db) ((db)->aDb[0
c850: 5d 2e 70 53 63 68 65 6d 61 2d 3e 65 6e 63 29 0a  ].pSchema->enc).
c860: 23 64 65 66 69 6e 65 20 45 4e 43 28 64 62 29 20  #define ENC(db) 
c870: 20 20 20 20 20 20 20 28 28 64 62 29 2d 3e 65 6e         ((db)->en
c880: 63 29 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62  c)../*.** Possib
c890: 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  le values for th
c8a0: 65 20 73 71 6c 69 74 65 33 2e 66 6c 61 67 73 2e  e sqlite3.flags.
c8b0: 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e  .**.** Value con
c8c0: 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f 72 63  straints (enforc
c8d0: 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29 29  ed via assert())
c8e0: 3a 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  :.**      SQLITE
c8f0: 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20 3d  _FullFSync     =
c900: 3d 20 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e  = PAGER_FULLFSYN
c910: 43 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45  C.**      SQLITE
c920: 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 3d  _CkptFullFSync =
c930: 3d 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  = PAGER_CKPT_FUL
c940: 4c 46 53 59 4e 43 0a 2a 2a 20 20 20 20 20 20 53  LFSYNC.**      S
c950: 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c  QLITE_CacheSpill
c960: 20 20 20 20 3d 3d 20 50 41 47 45 52 5f 43 41 43      == PAGER_CAC
c970: 48 45 5f 53 50 49 4c 4c 0a 2a 2f 0a 23 64 65 66  HE_SPILL.*/.#def
c980: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 54  ine SQLITE_VdbeT
c990: 72 61 63 65 20 20 20 20 20 20 30 78 30 30 30 30  race      0x0000
c9a0: 30 30 30 31 20 20 2f 2a 20 54 72 75 65 20 74 6f  0001  /* True to
c9b0: 20 74 72 61 63 65 20 56 44 42 45 20 65 78 65 63   trace VDBE exec
c9c0: 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ution */.#define
c9d0: 20 53 51 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68   SQLITE_InternCh
c9e0: 61 6e 67 65 73 20 20 30 78 30 30 30 30 30 30 30  anges  0x0000000
c9f0: 32 20 20 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65  2  /* Uncommitte
ca00: 64 20 48 61 73 68 20 74 61 62 6c 65 20 63 68 61  d Hash table cha
ca10: 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
ca20: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
ca30: 6d 65 73 20 20 20 30 78 30 30 30 30 30 30 30 34  mes   0x00000004
ca40: 20 20 2f 2a 20 53 68 6f 77 20 66 75 6c 6c 20 63    /* Show full c
ca50: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 6f 6e 20 53  olumn names on S
ca60: 45 4c 45 43 54 20 2a 2f 0a 23 64 65 66 69 6e 65  ELECT */.#define
ca70: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
ca80: 63 20 20 20 20 20 20 30 78 30 30 30 30 30 30 30  c      0x0000000
ca90: 38 20 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66  8  /* Use full f
caa0: 73 79 6e 63 20 6f 6e 20 74 68 65 20 62 61 63 6b  sync on the back
cab0: 65 6e 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  end */.#define S
cac0: 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53  QLITE_CkptFullFS
cad0: 79 6e 63 20 20 30 78 30 30 30 30 30 30 31 30 20  ync  0x00000010 
cae0: 20 2f 2a 20 55 73 65 20 66 75 6c 6c 20 66 73 79   /* Use full fsy
caf0: 6e 63 20 66 6f 72 20 63 68 65 63 6b 70 6f 69 6e  nc for checkpoin
cb00: 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  t */.#define SQL
cb10: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 20 20  ITE_CacheSpill  
cb20: 20 20 20 30 78 30 30 30 30 30 30 32 30 20 20 2f     0x00000020  /
cb30: 2a 20 4f 4b 20 74 6f 20 73 70 69 6c 6c 20 70 61  * OK to spill pa
cb40: 67 65 72 20 63 61 63 68 65 20 2a 2f 0a 23 64 65  ger cache */.#de
cb50: 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 68 6f 72  fine SQLITE_Shor
cb60: 74 43 6f 6c 4e 61 6d 65 73 20 20 30 78 30 30 30  tColNames  0x000
cb70: 30 30 30 34 30 20 20 2f 2a 20 53 68 6f 77 20 73  00040  /* Show s
cb80: 68 6f 72 74 20 63 6f 6c 75 6d 6e 73 20 6e 61 6d  hort columns nam
cb90: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cba0: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20 20  LITE_CountRows  
cbb0: 20 20 20 20 30 78 30 30 30 30 30 30 38 30 20 20      0x00000080  
cbc0: 2f 2a 20 43 6f 75 6e 74 20 72 6f 77 73 20 63 68  /* Count rows ch
cbd0: 61 6e 67 65 64 20 62 79 20 49 4e 53 45 52 54 2c  anged by INSERT,
cbe0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
cbf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cc10: 20 20 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50     DELETE, or UP
cc20: 44 41 54 45 20 61 6e 64 20 72 65 74 75 72 6e 20  DATE and return 
cc30: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  */.             
cc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
cc60: 20 20 74 68 65 20 63 6f 75 6e 74 20 75 73 69 6e    the count usin
cc70: 67 20 61 20 63 61 6c 6c 62 61 63 6b 2e 20 2a 2f  g a callback. */
cc80: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
cc90: 4e 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 20 20 30  NullCallback   0
cca0: 78 30 30 30 30 30 31 30 30 20 20 2f 2a 20 49 6e  x00000100  /* In
ccb0: 76 6f 6b 65 20 74 68 65 20 63 61 6c 6c 62 61 63  voke the callbac
ccc0: 6b 20 6f 6e 63 65 20 69 66 20 74 68 65 20 2a 2f  k once if the */
ccd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
cce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ccf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20 20             /*   
cd00: 72 65 73 75 6c 74 20 73 65 74 20 69 73 20 65 6d  result set is em
cd10: 70 74 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  pty */.#define S
cd20: 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 20 20  QLITE_SqlTrace  
cd30: 20 20 20 20 20 30 78 30 30 30 30 30 32 30 30 20       0x00000200 
cd40: 20 2f 2a 20 44 65 62 75 67 20 70 72 69 6e 74 20   /* Debug print 
cd50: 53 51 4c 20 61 73 20 69 74 20 65 78 65 63 75 74  SQL as it execut
cd60: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
cd70: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
cd80: 20 20 20 20 30 78 30 30 30 30 30 34 30 30 20 20      0x00000400  
cd90: 2f 2a 20 44 65 62 75 67 20 6c 69 73 74 69 6e 67  /* Debug listing
cda0: 73 20 6f 66 20 56 44 42 45 20 70 72 6f 67 72 61  s of VDBE progra
cdb0: 6d 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ms */.#define SQ
cdc0: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
cdd0: 20 20 20 20 30 78 30 30 30 30 30 38 30 30 20 20      0x00000800  
cde0: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
cdf0: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
ce00: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ce10: 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 30  VdbeAddopTrace 0
ce20: 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20 54 72  x00001000  /* Tr
ce30: 61 63 65 20 73 71 6c 69 74 65 33 56 64 62 65 41  ace sqlite3VdbeA
ce40: 64 64 4f 70 28 29 20 63 61 6c 6c 73 20 2a 2f 0a  ddOp() calls */.
ce50: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49  #define SQLITE_I
ce60: 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30 78  gnoreChecks   0x
ce70: 30 30 30 30 32 30 30 30 20 20 2f 2a 20 44 6f 20  00002000  /* Do 
ce80: 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65 63  not enforce chec
ce90: 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  k constraints */
cea0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
ceb0: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
cec0: 30 78 30 30 30 34 30 30 30 20 20 2f 2a 20 46 6f  0x0004000  /* Fo
ced0: 72 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 6d  r shared-cache m
cee0: 6f 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ode */.#define S
cef0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
cf00: 46 6d 74 20 20 30 78 30 30 30 30 38 30 30 30 20  Fmt  0x00008000 
cf10: 20 2f 2a 20 43 72 65 61 74 65 20 6e 65 77 20 64   /* Create new d
cf20: 61 74 61 62 61 73 65 73 20 69 6e 20 66 6f 72 6d  atabases in form
cf30: 61 74 20 31 20 2a 2f 0a 23 64 65 66 69 6e 65 20  at 1 */.#define 
cf40: 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79 4d  SQLITE_RecoveryM
cf50: 6f 64 65 20 20 20 30 78 30 30 30 31 30 30 30 30  ode   0x00010000
cf60: 20 20 2f 2a 20 49 67 6e 6f 72 65 20 73 63 68 65    /* Ignore sche
cf70: 6d 61 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64 65  ma errors */.#de
cf80: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 76 65  fine SQLITE_Reve
cf90: 72 73 65 4f 72 64 65 72 20 20 20 30 78 30 30 30  rseOrder   0x000
cfa0: 32 30 30 30 30 20 20 2f 2a 20 52 65 76 65 72 73  20000  /* Revers
cfb0: 65 20 75 6e 6f 72 64 65 72 65 64 20 53 45 4c 45  e unordered SELE
cfc0: 43 54 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  CTs */.#define S
cfd0: 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72  QLITE_RecTrigger
cfe0: 73 20 20 20 20 30 78 30 30 30 34 30 30 30 30 20  s    0x00040000 
cff0: 20 2f 2a 20 45 6e 61 62 6c 65 20 72 65 63 75 72   /* Enable recur
d000: 73 69 76 65 20 74 72 69 67 67 65 72 73 20 2a 2f  sive triggers */
d010: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d020: 46 6f 72 65 69 67 6e 4b 65 79 73 20 20 20 20 30  ForeignKeys    0
d030: 78 30 30 30 38 30 30 30 30 20 20 2f 2a 20 45 6e  x00080000  /* En
d040: 66 6f 72 63 65 20 66 6f 72 65 69 67 6e 20 6b 65  force foreign ke
d050: 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 20 2a  y constraints  *
d060: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d070: 5f 41 75 74 6f 49 6e 64 65 78 20 20 20 20 20 20  _AutoIndex      
d080: 30 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 45  0x00100000  /* E
d090: 6e 61 62 6c 65 20 61 75 74 6f 6d 61 74 69 63 20  nable automatic 
d0a0: 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64 65 66 69  indexes */.#defi
d0b0: 6e 65 20 53 51 4c 49 54 45 5f 50 72 65 66 65 72  ne SQLITE_Prefer
d0c0: 42 75 69 6c 74 69 6e 20 20 30 78 30 30 32 30 30  Builtin  0x00200
d0d0: 30 30 30 20 20 2f 2a 20 50 72 65 66 65 72 65 6e  000  /* Preferen
d0e0: 63 65 20 74 6f 20 62 75 69 6c 74 2d 69 6e 20 66  ce to built-in f
d0f0: 75 6e 63 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  uncs */.#define 
d100: 53 51 4c 49 54 45 5f 4c 6f 61 64 45 78 74 65 6e  SQLITE_LoadExten
d110: 73 69 6f 6e 20 20 30 78 30 30 34 30 30 30 30 30  sion  0x00400000
d120: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64    /* Enable load
d130: 5f 65 78 74 65 6e 73 69 6f 6e 20 2a 2f 0a 23 64  _extension */.#d
d140: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 6f 61  efine SQLITE_Loa
d150: 64 45 78 74 46 75 6e 63 20 20 20 20 30 78 30 30  dExtFunc    0x00
d160: 38 30 30 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c  800000  /* Enabl
d170: 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73 69 6f 6e  e load_extension
d180: 28 29 20 53 51 4c 20 66 75 6e 63 20 2a 2f 0a 23  () SQL func */.#
d190: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 6e  define SQLITE_En
d1a0: 61 62 6c 65 54 72 69 67 67 65 72 20 20 30 78 30  ableTrigger  0x0
d1b0: 31 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  1000000  /* True
d1c0: 20 74 6f 20 65 6e 61 62 6c 65 20 74 72 69 67 67   to enable trigg
d1d0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
d1e0: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 20  QLITE_DeferFKs  
d1f0: 20 20 20 20 20 30 78 30 32 30 30 30 30 30 30 20       0x02000000 
d200: 20 2f 2a 20 44 65 66 65 72 20 61 6c 6c 20 46 4b   /* Defer all FK
d210: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a   constraints */.
d220: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 51  #define SQLITE_Q
d230: 75 65 72 79 4f 6e 6c 79 20 20 20 20 20 20 30 78  ueryOnly      0x
d240: 30 34 30 30 30 30 30 30 20 20 2f 2a 20 44 69 73  04000000  /* Dis
d250: 61 62 6c 65 20 64 61 74 61 62 61 73 65 20 63 68  able database ch
d260: 61 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65  anges */.#define
d270: 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50 20   SQLITE_VdbeEQP 
d280: 20 20 20 20 20 20 20 30 78 30 38 30 30 30 30 30         0x0800000
d290: 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58 50 4c  0  /* Debug EXPL
d2a0: 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e 20 2a  AIN QUERY PLAN *
d2b0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d2c0: 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20 20  _Vacuum         
d2d0: 30 78 31 30 30 30 30 30 30 30 20 20 2f 2a 20 43  0x10000000  /* C
d2e0: 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56 41  urrently in a VA
d2f0: 43 55 55 4d 20 2a 2f 0a 23 64 65 66 69 6e 65 20  CUUM */.#define 
d300: 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65 43  SQLITE_CellSizeC
d310: 6b 20 20 20 20 20 30 78 32 30 30 30 30 30 30 30  k     0x20000000
d320: 20 20 2f 2a 20 43 68 65 63 6b 20 62 74 72 65 65    /* Check btree
d330: 20 63 65 6c 6c 20 73 69 7a 65 73 20 6f 6e 20 6c   cell sizes on l
d340: 6f 61 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  oad */.#define S
d350: 51 4c 49 54 45 5f 46 74 73 33 54 6f 6b 65 6e 69  QLITE_Fts3Tokeni
d360: 7a 65 72 20 20 30 78 34 30 30 30 30 30 30 30 20  zer  0x40000000 
d370: 20 2f 2a 20 45 6e 61 62 6c 65 20 66 74 73 33 5f   /* Enable fts3_
d380: 74 6f 6b 65 6e 69 7a 65 72 28 32 29 20 2a 2f 0a  tokenizer(2) */.
d390: 0a 0a 2f 2a 0a 2a 2a 20 42 69 74 73 20 6f 66 20  ../*.** Bits of 
d3a0: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 62 4f 70  the sqlite3.dbOp
d3b0: 74 46 6c 61 67 73 20 66 69 65 6c 64 20 74 68 61  tFlags field tha
d3c0: 74 20 61 72 65 20 75 73 65 64 20 62 79 20 74 68  t are used by th
d3d0: 65 0a 2a 2a 20 73 71 6c 69 74 65 33 5f 74 65 73  e.** sqlite3_tes
d3e0: 74 5f 63 6f 6e 74 72 6f 6c 28 53 51 4c 49 54 45  t_control(SQLITE
d3f0: 5f 54 45 53 54 43 54 52 4c 5f 4f 50 54 49 4d 49  _TESTCTRL_OPTIMI
d400: 5a 41 54 49 4f 4e 53 2c 2e 2e 2e 29 20 69 6e 74  ZATIONS,...) int
d410: 65 72 66 61 63 65 20 74 6f 0a 2a 2a 20 73 65 6c  erface to.** sel
d420: 65 63 74 69 76 65 6c 79 20 64 69 73 61 62 6c 65  ectively disable
d430: 20 76 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a   various optimiz
d440: 61 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66 69  ations..*/.#defi
d450: 6e 65 20 53 51 4c 49 54 45 5f 51 75 65 72 79 46  ne SQLITE_QueryF
d460: 6c 61 74 74 65 6e 65 72 20 30 78 30 30 30 31 20  lattener 0x0001 
d470: 20 20 2f 2a 20 51 75 65 72 79 20 66 6c 61 74 74    /* Query flatt
d480: 65 6e 69 6e 67 20 2a 2f 0a 23 64 65 66 69 6e 65  ening */.#define
d490: 20 53 51 4c 49 54 45 5f 43 6f 6c 75 6d 6e 43 61   SQLITE_ColumnCa
d4a0: 63 68 65 20 20 20 20 30 78 30 30 30 32 20 20 20  che    0x0002   
d4b0: 2f 2a 20 43 6f 6c 75 6d 6e 20 63 61 63 68 65 20  /* Column cache 
d4c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d4d0: 45 5f 47 72 6f 75 70 42 79 4f 72 64 65 72 20 20  E_GroupByOrder  
d4e0: 20 30 78 30 30 30 34 20 20 20 2f 2a 20 47 52 4f   0x0004   /* GRO
d4f0: 55 50 42 59 20 63 6f 76 65 72 20 6f 66 20 4f 52  UPBY cover of OR
d500: 44 45 52 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  DERBY */.#define
d510: 20 53 51 4c 49 54 45 5f 46 61 63 74 6f 72 4f 75   SQLITE_FactorOu
d520: 74 43 6f 6e 73 74 20 30 78 30 30 30 38 20 20 20  tConst 0x0008   
d530: 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 66 61 63 74  /* Constant fact
d540: 6f 72 69 6e 67 20 2a 2f 0a 2f 2a 20 20 20 20 20  oring */./*     
d550: 20 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20 75             not u
d560: 73 65 64 20 20 20 20 30 78 30 30 31 30 20 20 20  sed    0x0010   
d570: 2f 2f 20 57 61 73 3a 20 53 51 4c 49 54 45 5f 49  // Was: SQLITE_I
d580: 64 78 52 65 61 6c 41 73 49 6e 74 20 2a 2f 0a 23  dxRealAsInt */.#
d590: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 69  define SQLITE_Di
d5a0: 73 74 69 6e 63 74 4f 70 74 20 20 20 20 30 78 30  stinctOpt    0x0
d5b0: 30 32 30 20 20 20 2f 2a 20 44 49 53 54 49 4e 43  020   /* DISTINC
d5c0: 54 20 75 73 69 6e 67 20 69 6e 64 65 78 65 73 20  T using indexes 
d5d0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d5e0: 45 5f 43 6f 76 65 72 49 64 78 53 63 61 6e 20 20  E_CoverIdxScan  
d5f0: 20 30 78 30 30 34 30 20 20 20 2f 2a 20 43 6f 76   0x0040   /* Cov
d600: 65 72 69 6e 67 20 69 6e 64 65 78 20 73 63 61 6e  ering index scan
d610: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
d620: 49 54 45 5f 4f 72 64 65 72 42 79 49 64 78 4a 6f  ITE_OrderByIdxJo
d630: 69 6e 20 30 78 30 30 38 30 20 20 20 2f 2a 20 4f  in 0x0080   /* O
d640: 52 44 45 52 20 42 59 20 6f 66 20 6a 6f 69 6e 73  RDER BY of joins
d650: 20 76 69 61 20 69 6e 64 65 78 20 2a 2f 0a 23 64   via index */.#d
d660: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 75 62  efine SQLITE_Sub
d670: 71 43 6f 72 6f 75 74 69 6e 65 20 20 30 78 30 31  qCoroutine  0x01
d680: 30 30 20 20 20 2f 2a 20 45 76 61 6c 75 61 74 65  00   /* Evaluate
d690: 20 73 75 62 71 75 65 72 69 65 73 20 61 73 20 63   subqueries as c
d6a0: 6f 72 6f 75 74 69 6e 65 73 20 2a 2f 0a 23 64 65  oroutines */.#de
d6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 72 61 6e  fine SQLITE_Tran
d6c0: 73 69 74 69 76 65 20 20 20 20 20 30 78 30 32 30  sitive     0x020
d6d0: 30 20 20 20 2f 2a 20 54 72 61 6e 73 69 74 69 76  0   /* Transitiv
d6e0: 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  e constraints */
d6f0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d700: 4f 6d 69 74 4e 6f 6f 70 4a 6f 69 6e 20 20 20 30  OmitNoopJoin   0
d710: 78 30 34 30 30 20 20 20 2f 2a 20 4f 6d 69 74 20  x0400   /* Omit 
d720: 75 6e 75 73 65 64 20 74 61 62 6c 65 73 20 69 6e  unused tables in
d730: 20 6a 6f 69 6e 73 20 2a 2f 0a 23 64 65 66 69 6e   joins */.#defin
d740: 65 20 53 51 4c 49 54 45 5f 53 74 61 74 33 34 20  e SQLITE_Stat34 
d750: 20 20 20 20 20 20 20 20 30 78 30 38 30 30 20 20          0x0800  
d760: 20 2f 2a 20 55 73 65 20 53 54 41 54 33 20 6f 72   /* Use STAT3 or
d770: 20 53 54 41 54 34 20 64 61 74 61 20 2a 2f 0a 23   STAT4 data */.#
d780: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 75  define SQLITE_Cu
d790: 72 73 6f 72 48 69 6e 74 73 20 20 20 20 30 78 32  rsorHints    0x2
d7a0: 30 30 30 20 20 20 2f 2a 20 41 64 64 20 4f 50 5f  000   /* Add OP_
d7b0: 43 75 72 73 6f 72 48 69 6e 74 20 6f 70 63 6f 64  CursorHint opcod
d7c0: 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  es */.#define SQ
d7d0: 4c 49 54 45 5f 41 6c 6c 4f 70 74 73 20 20 20 20  LITE_AllOpts    
d7e0: 20 20 20 20 30 78 66 66 66 66 20 20 20 2f 2a 20      0xffff   /* 
d7f0: 41 6c 6c 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  All optimization
d800: 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  s */../*.** Macr
d810: 6f 73 20 66 6f 72 20 74 65 73 74 69 6e 67 20 77  os for testing w
d820: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 6f 70  hether or not op
d830: 74 69 6d 69 7a 61 74 69 6f 6e 73 20 61 72 65 20  timizations are 
d840: 65 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62  enabled or disab
d850: 6c 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  led..*/.#ifndef 
d860: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
d870: 54 49 4e 5f 54 45 53 54 0a 23 64 65 66 69 6e 65  TIN_TEST.#define
d880: 20 4f 70 74 69 6d 69 7a 61 74 69 6f 6e 44 69 73   OptimizationDis
d890: 61 62 6c 65 64 28 64 62 2c 20 6d 61 73 6b 29 20  abled(db, mask) 
d8a0: 20 28 28 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c   (((db)->dbOptFl
d8b0: 61 67 73 26 28 6d 61 73 6b 29 29 21 3d 30 29 0a  ags&(mask))!=0).
d8c0: 23 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61  #define Optimiza
d8d0: 74 69 6f 6e 45 6e 61 62 6c 65 64 28 64 62 2c 20  tionEnabled(db, 
d8e0: 6d 61 73 6b 29 20 20 20 28 28 28 64 62 29 2d 3e  mask)   (((db)->
d8f0: 64 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b  dbOptFlags&(mask
d900: 29 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 64 65  ))==0).#else.#de
d910: 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74 69 6f  fine Optimizatio
d920: 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20 6d 61  nDisabled(db, ma
d930: 73 6b 29 20 20 30 0a 23 64 65 66 69 6e 65 20 4f  sk)  0.#define O
d940: 70 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c  ptimizationEnabl
d950: 65 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 31  ed(db, mask)   1
d960: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
d970: 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 74  eturn true if it
d980: 20 4f 4b 20 74 6f 20 66 61 63 74 6f 72 20 63 6f   OK to factor co
d990: 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73 69 6f  nstant expressio
d9a0: 6e 73 20 69 6e 74 6f 20 74 68 65 20 69 6e 69 74  ns into the init
d9b0: 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20 63 6f  ialization.** co
d9c0: 64 65 2e 20 54 68 65 20 61 72 67 75 6d 65 6e 74  de. The argument
d9d0: 20 69 73 20 61 20 50 61 72 73 65 20 6f 62 6a 65   is a Parse obje
d9e0: 63 74 20 66 6f 72 20 74 68 65 20 63 6f 64 65 20  ct for the code 
d9f0: 67 65 6e 65 72 61 74 6f 72 2e 0a 2a 2f 0a 23 64  generator..*/.#d
da00: 65 66 69 6e 65 20 43 6f 6e 73 74 46 61 63 74 6f  efine ConstFacto
da10: 72 4f 6b 28 50 29 20 28 28 50 29 2d 3e 6f 6b 43  rOk(P) ((P)->okC
da20: 6f 6e 73 74 46 61 63 74 6f 72 29 0a 0a 2f 2a 0a  onstFactor)../*.
da30: 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c 75  ** Possible valu
da40: 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69 74  es for the sqlit
da50: 65 2e 6d 61 67 69 63 20 66 69 65 6c 64 2e 0a 2a  e.magic field..*
da60: 2a 20 54 68 65 20 6e 75 6d 62 65 72 73 20 61 72  * The numbers ar
da70: 65 20 6f 62 74 61 69 6e 65 64 20 61 74 20 72 61  e obtained at ra
da80: 6e 64 6f 6d 20 61 6e 64 20 68 61 76 65 20 6e 6f  ndom and have no
da90: 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67   special meaning
daa0: 2c 20 6f 74 68 65 72 0a 2a 2a 20 74 68 61 6e 20  , other.** than 
dab0: 62 65 69 6e 67 20 64 69 73 74 69 6e 63 74 20 66  being distinct f
dac0: 72 6f 6d 20 6f 6e 65 20 61 6e 6f 74 68 65 72 2e  rom one another.
dad0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
dae0: 54 45 5f 4d 41 47 49 43 5f 4f 50 45 4e 20 20 20  TE_MAGIC_OPEN   
daf0: 20 20 30 78 61 30 32 39 61 36 39 37 20 20 2f 2a    0xa029a697  /*
db00: 20 44 61 74 61 62 61 73 65 20 69 73 20 6f 70 65   Database is ope
db10: 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  n */.#define SQL
db20: 49 54 45 5f 4d 41 47 49 43 5f 43 4c 4f 53 45 44  ITE_MAGIC_CLOSED
db30: 20 20 20 30 78 39 66 33 63 32 64 33 33 20 20 2f     0x9f3c2d33  /
db40: 2a 20 44 61 74 61 62 61 73 65 20 69 73 20 63 6c  * Database is cl
db50: 6f 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  osed */.#define 
db60: 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 53 49 43  SQLITE_MAGIC_SIC
db70: 4b 20 20 20 20 20 30 78 34 62 37 37 31 32 39 30  K     0x4b771290
db80: 20 20 2f 2a 20 45 72 72 6f 72 20 61 6e 64 20 61    /* Error and a
db90: 77 61 69 74 69 6e 67 20 63 6c 6f 73 65 20 2a 2f  waiting close */
dba0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
dbb0: 4d 41 47 49 43 5f 42 55 53 59 20 20 20 20 20 30  MAGIC_BUSY     0
dbc0: 78 66 30 33 62 37 39 30 36 20 20 2f 2a 20 44 61  xf03b7906  /* Da
dbd0: 74 61 62 61 73 65 20 63 75 72 72 65 6e 74 6c 79  tabase currently
dbe0: 20 69 6e 20 75 73 65 20 2a 2f 0a 23 64 65 66 69   in use */.#defi
dbf0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
dc00: 45 52 52 4f 52 20 20 20 20 30 78 62 35 33 35 37  ERROR    0xb5357
dc10: 39 33 30 20 20 2f 2a 20 41 6e 20 53 51 4c 49 54  930  /* An SQLIT
dc20: 45 5f 4d 49 53 55 53 45 20 65 72 72 6f 72 20 6f  E_MISUSE error o
dc30: 63 63 75 72 72 65 64 20 2a 2f 0a 23 64 65 66 69  ccurred */.#defi
dc40: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f  ne SQLITE_MAGIC_
dc50: 5a 4f 4d 42 49 45 20 20 20 30 78 36 34 63 66 66  ZOMBIE   0x64cff
dc60: 63 37 66 20 20 2f 2a 20 43 6c 6f 73 65 20 77 69  c7f  /* Close wi
dc70: 74 68 20 6c 61 73 74 20 73 74 61 74 65 6d 65 6e  th last statemen
dc80: 74 20 63 6c 6f 73 65 20 2a 2f 0a 0a 2f 2a 0a 2a  t close */../*.*
dc90: 2a 20 45 61 63 68 20 53 51 4c 20 66 75 6e 63 74  * Each SQL funct
dca0: 69 6f 6e 20 69 73 20 64 65 66 69 6e 65 64 20 62  ion is defined b
dcb0: 79 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  y an instance of
dcc0: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a   the following.*
dcd0: 2a 20 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f  * structure.  Fo
dce0: 72 20 67 6c 6f 62 61 6c 20 62 75 69 6c 74 2d 69  r global built-i
dcf0: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 28 65 78 3a  n functions (ex:
dd00: 20 73 75 62 73 74 72 28 29 2c 20 6d 61 78 28 29   substr(), max()
dd10: 2c 20 63 6f 75 6e 74 28 29 29 0a 2a 2a 20 61 20  , count()).** a 
dd20: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 20  pointer to this 
dd30: 73 74 72 75 63 74 75 72 65 20 69 73 20 68 65 6c  structure is hel
dd40: 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33  d in the sqlite3
dd50: 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73  BuiltinFunctions
dd60: 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 46 6f 72 20   object..** For 
dd70: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 61  per-connection a
dd80: 70 70 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e  pplication-defin
dd90: 65 64 20 66 75 6e 63 74 69 6f 6e 73 2c 20 61 20  ed functions, a 
dda0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 69 73 0a  pointer to this.
ddb0: 2a 2a 20 73 74 72 75 63 74 75 72 65 20 69 73 20  ** structure is 
ddc0: 68 65 6c 64 20 69 6e 20 74 68 65 20 64 62 2d 3e  held in the db->
ddd0: 61 48 61 73 68 20 68 61 73 68 20 74 61 62 6c 65  aHash hash table
dde0: 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 75 2e 70 48  ..**.** The u.pH
ddf0: 61 73 68 20 66 69 65 6c 64 20 69 73 20 75 73 65  ash field is use
de00: 64 20 62 79 20 74 68 65 20 67 6c 6f 62 61 6c 20  d by the global 
de10: 62 75 69 6c 74 2d 69 6e 73 2e 20 20 54 68 65 20  built-ins.  The 
de20: 75 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  u.pDestructor.**
de30: 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 62   field is used b
de40: 79 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  y per-connection
de50: 20 61 70 70 2d 64 65 66 20 66 75 6e 63 74 69 6f   app-def functio
de60: 6e 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 46 75  ns..*/.struct Fu
de70: 6e 63 44 65 66 20 7b 0a 20 20 69 38 20 6e 41 72  ncDef {.  i8 nAr
de80: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
de90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 72 67 75  * Number of argu
dea0: 6d 65 6e 74 73 2e 20 20 2d 31 20 6d 65 61 6e 73  ments.  -1 means
deb0: 20 75 6e 6c 69 6d 69 74 65 64 20 2a 2f 0a 20 20   unlimited */.  
dec0: 75 31 36 20 66 75 6e 63 46 6c 61 67 73 3b 20 20  u16 funcFlags;  
ded0: 20 20 20 20 20 2f 2a 20 53 6f 6d 65 20 63 6f 6d       /* Some com
dee0: 62 69 6e 61 74 69 6f 6e 20 6f 66 20 53 51 4c 49  bination of SQLI
def0: 54 45 5f 46 55 4e 43 5f 2a 20 2a 2f 0a 20 20 76  TE_FUNC_* */.  v
df00: 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b 20  oid *pUserData; 
df10: 20 20 20 20 2f 2a 20 55 73 65 72 20 64 61 74 61      /* User data
df20: 20 70 61 72 61 6d 65 74 65 72 20 2a 2f 0a 20 20   parameter */.  
df30: 46 75 6e 63 44 65 66 20 2a 70 4e 65 78 74 3b 20  FuncDef *pNext; 
df40: 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 66 75 6e       /* Next fun
df50: 63 74 69 6f 6e 20 77 69 74 68 20 73 61 6d 65 20  ction with same 
df60: 6e 61 6d 65 20 2a 2f 0a 20 20 76 6f 69 64 20 28  name */.  void (
df70: 2a 78 53 46 75 6e 63 29 28 73 71 6c 69 74 65 33  *xSFunc)(sqlite3
df80: 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
df90: 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 20  lite3_value**); 
dfa0: 2f 2a 20 66 75 6e 63 20 6f 72 20 61 67 67 2d 73  /* func or agg-s
dfb0: 74 65 70 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  tep */.  void (*
dfc0: 78 46 69 6e 61 6c 69 7a 65 29 28 73 71 6c 69 74  xFinalize)(sqlit
dfd0: 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 20 20 20  e3_context*);   
dfe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
dff0: 2a 20 41 67 67 20 66 69 6e 61 6c 69 7a 65 72 20  * Agg finalizer 
e000: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
e010: 2a 7a 4e 61 6d 65 3b 20 20 20 2f 2a 20 53 51 4c  *zName;   /* SQL
e020: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e   name of the fun
e030: 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20 75 6e 69 6f  ction. */.  unio
e040: 6e 20 7b 0a 20 20 20 20 46 75 6e 63 44 65 66 20  n {.    FuncDef 
e050: 2a 70 48 61 73 68 3b 20 20 20 20 20 20 2f 2a 20  *pHash;      /* 
e060: 4e 65 78 74 20 77 69 74 68 20 61 20 64 69 66 66  Next with a diff
e070: 65 72 65 6e 74 20 6e 61 6d 65 20 62 75 74 20 74  erent name but t
e080: 68 65 20 73 61 6d 65 20 68 61 73 68 20 2a 2f 0a  he same hash */.
e090: 20 20 20 20 46 75 6e 63 44 65 73 74 72 75 63 74      FuncDestruct
e0a0: 6f 72 20 2a 70 44 65 73 74 72 75 63 74 6f 72 3b  or *pDestructor;
e0b0: 20 20 20 2f 2a 20 52 65 66 65 72 65 6e 63 65 20     /* Reference 
e0c0: 63 6f 75 6e 74 65 64 20 64 65 73 74 72 75 63 74  counted destruct
e0d0: 6f 72 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20  or function */. 
e0e0: 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20   } u;.};../*.** 
e0f0: 54 68 69 73 20 73 74 72 75 63 74 75 72 65 20 65  This structure e
e100: 6e 63 61 70 73 75 6c 61 74 65 73 20 61 20 75 73  ncapsulates a us
e110: 65 72 2d 66 75 6e 63 74 69 6f 6e 20 64 65 73 74  er-function dest
e120: 72 75 63 74 6f 72 20 63 61 6c 6c 62 61 63 6b 20  ructor callback 
e130: 28 61 73 0a 2a 2a 20 63 6f 6e 66 69 67 75 72 65  (as.** configure
e140: 64 20 75 73 69 6e 67 20 63 72 65 61 74 65 5f 66  d using create_f
e150: 75 6e 63 74 69 6f 6e 5f 76 32 28 29 29 20 61 6e  unction_v2()) an
e160: 64 20 61 20 72 65 66 65 72 65 6e 63 65 20 63 6f  d a reference co
e170: 75 6e 74 65 72 2e 20 57 68 65 6e 0a 2a 2a 20 63  unter. When.** c
e180: 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76  reate_function_v
e190: 32 28 29 20 69 73 20 63 61 6c 6c 65 64 20 74 6f  2() is called to
e1a0: 20 63 72 65 61 74 65 20 61 20 66 75 6e 63 74 69   create a functi
e1b0: 6f 6e 20 77 69 74 68 20 61 20 64 65 73 74 72 75  on with a destru
e1c0: 63 74 6f 72 2c 0a 2a 2a 20 61 20 73 69 6e 67 6c  ctor,.** a singl
e1d0: 65 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73  e object of this
e1e0: 20 74 79 70 65 20 69 73 20 61 6c 6c 6f 63 61 74   type is allocat
e1f0: 65 64 2e 20 46 75 6e 63 44 65 73 74 72 75 63 74  ed. FuncDestruct
e200: 6f 72 2e 6e 52 65 66 20 69 73 20 73 65 74 20 74  or.nRef is set t
e210: 6f 0a 2a 2a 20 74 68 65 20 6e 75 6d 62 65 72 20  o.** the number 
e220: 6f 66 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63  of FuncDef objec
e230: 74 73 20 63 72 65 61 74 65 64 20 28 65 69 74 68  ts created (eith
e240: 65 72 20 31 20 6f 72 20 33 2c 20 64 65 70 65 6e  er 1 or 3, depen
e250: 64 69 6e 67 20 6f 6e 20 77 68 65 74 68 65 72 0a  ding on whether.
e260: 2a 2a 20 6f 72 20 6e 6f 74 20 74 68 65 20 73 70  ** or not the sp
e270: 65 63 69 66 69 65 64 20 65 6e 63 6f 64 69 6e 67  ecified encoding
e280: 20 69 73 20 53 51 4c 49 54 45 5f 41 4e 59 29 2e   is SQLITE_ANY).
e290: 20 54 68 65 20 46 75 6e 63 44 65 66 2e 70 44 65   The FuncDef.pDe
e2a0: 73 74 72 75 63 74 6f 72 0a 2a 2a 20 6d 65 6d 62  structor.** memb
e2b0: 65 72 20 6f 66 20 65 61 63 68 20 6f 66 20 74 68  er of each of th
e2c0: 65 20 6e 65 77 20 46 75 6e 63 44 65 66 20 6f 62  e new FuncDef ob
e2d0: 6a 65 63 74 73 20 69 73 20 73 65 74 20 74 6f 20  jects is set to 
e2e0: 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 61 6c 6c  point to the all
e2f0: 6f 63 61 74 65 64 0a 2a 2a 20 46 75 6e 63 44 65  ocated.** FuncDe
e300: 73 74 72 75 63 74 6f 72 2e 0a 2a 2a 0a 2a 2a 20  structor..**.** 
e310: 54 68 65 72 65 61 66 74 65 72 2c 20 77 68 65 6e  Thereafter, when
e320: 20 6f 6e 65 20 6f 66 20 74 68 65 20 46 75 6e 63   one of the Func
e330: 44 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 64  Def objects is d
e340: 65 6c 65 74 65 64 2c 20 74 68 65 20 72 65 66 65  eleted, the refe
e350: 72 65 6e 63 65 0a 2a 2a 20 63 6f 75 6e 74 20 6f  rence.** count o
e360: 6e 20 74 68 69 73 20 6f 62 6a 65 63 74 20 69 73  n this object is
e370: 20 64 65 63 72 65 6d 65 6e 74 65 64 2e 20 57 68   decremented. Wh
e380: 65 6e 20 69 74 20 72 65 61 63 68 65 73 20 30 2c  en it reaches 0,
e390: 20 74 68 65 20 64 65 73 74 72 75 63 74 6f 72 0a   the destructor.
e3a0: 2a 2a 20 69 73 20 69 6e 76 6f 6b 65 64 20 61 6e  ** is invoked an
e3b0: 64 20 74 68 65 20 46 75 6e 63 44 65 73 74 72 75  d the FuncDestru
e3c0: 63 74 6f 72 20 73 74 72 75 63 74 75 72 65 20 66  ctor structure f
e3d0: 72 65 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  reed..*/.struct 
e3e0: 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 7b  FuncDestructor {
e3f0: 0a 20 20 69 6e 74 20 6e 52 65 66 3b 0a 20 20 76  .  int nRef;.  v
e400: 6f 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28  oid (*xDestroy)(
e410: 76 6f 69 64 20 2a 29 3b 0a 20 20 76 6f 69 64 20  void *);.  void 
e420: 2a 70 55 73 65 72 44 61 74 61 3b 0a 7d 3b 0a 0a  *pUserData;.};..
e430: 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76  /*.** Possible v
e440: 61 6c 75 65 73 20 66 6f 72 20 46 75 6e 63 44 65  alues for FuncDe
e450: 66 2e 66 6c 61 67 73 2e 20 20 4e 6f 74 65 20 74  f.flags.  Note t
e460: 68 61 74 20 74 68 65 20 5f 4c 45 4e 47 54 48 20  hat the _LENGTH 
e470: 61 6e 64 20 5f 54 59 50 45 4f 46 0a 2a 2a 20 76  and _TYPEOF.** v
e480: 61 6c 75 65 73 20 6d 75 73 74 20 63 6f 72 72 65  alues must corre
e490: 73 70 6f 6e 64 20 74 6f 20 4f 50 46 4c 41 47 5f  spond to OPFLAG_
e4a0: 4c 45 4e 47 54 48 41 52 47 20 61 6e 64 20 4f 50  LENGTHARG and OP
e4b0: 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 2e 20  FLAG_TYPEOFARG. 
e4c0: 20 41 6e 64 0a 2a 2a 20 53 51 4c 49 54 45 5f 46   And.** SQLITE_F
e4d0: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 6d 75 73  UNC_CONSTANT mus
e4e0: 74 20 62 65 20 74 68 65 20 73 61 6d 65 20 61 73  t be the same as
e4f0: 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e   SQLITE_DETERMIN
e500: 49 53 54 49 43 2e 20 20 54 68 65 72 65 0a 2a 2a  ISTIC.  There.**
e510: 20 61 72 65 20 61 73 73 65 72 74 28 29 20 73 74   are assert() st
e520: 61 74 65 6d 65 6e 74 73 20 69 6e 20 74 68 65 20  atements in the 
e530: 63 6f 64 65 20 74 6f 20 76 65 72 69 66 79 20 74  code to verify t
e540: 68 69 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  his..**.** Value
e550: 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
e560: 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
e570: 74 28 29 29 3a 0a 2a 2a 20 20 20 20 20 53 51 4c  t()):.**     SQL
e580: 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20  ITE_FUNC_MINMAX 
e590: 20 20 20 3d 3d 20 20 4e 43 5f 4d 69 6e 4d 61 78     ==  NC_MinMax
e5a0: 41 67 67 20 20 20 20 20 20 3d 3d 20 53 46 5f 4d  Agg      == SF_M
e5b0: 69 6e 4d 61 78 41 67 67 0a 2a 2a 20 20 20 20 20  inMaxAgg.**     
e5c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e 47  SQLITE_FUNC_LENG
e5d0: 54 48 20 20 20 20 3d 3d 20 20 4f 50 46 4c 41 47  TH    ==  OPFLAG
e5e0: 5f 4c 45 4e 47 54 48 41 52 47 0a 2a 2a 20 20 20  _LENGTHARG.**   
e5f0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59    SQLITE_FUNC_TY
e600: 50 45 4f 46 20 20 20 20 3d 3d 20 20 4f 50 46 4c  PEOF    ==  OPFL
e610: 41 47 5f 54 59 50 45 4f 46 41 52 47 0a 2a 2a 20  AG_TYPEOFARG.** 
e620: 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f      SQLITE_FUNC_
e630: 43 4f 4e 53 54 41 4e 54 20 20 3d 3d 20 20 53 51  CONSTANT  ==  SQ
e640: 4c 49 54 45 5f 44 45 54 45 52 4d 49 4e 49 53 54  LITE_DETERMINIST
e650: 49 43 20 66 72 6f 6d 20 74 68 65 20 41 50 49 0a  IC from the API.
e660: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
e670: 4e 43 5f 45 4e 43 4d 41 53 4b 20 20 20 64 65 70  NC_ENCMASK   dep
e680: 65 6e 64 73 20 6f 6e 20 53 51 4c 49 54 45 5f 55  ends on SQLITE_U
e690: 54 46 2a 20 6d 61 63 72 6f 73 20 69 6e 20 74 68  TF* macros in th
e6a0: 65 20 41 50 49 0a 2a 2f 0a 23 64 65 66 69 6e 65  e API.*/.#define
e6b0: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 4e 43   SQLITE_FUNC_ENC
e6c0: 4d 41 53 4b 20 20 30 78 30 30 30 33 20 2f 2a 20  MASK  0x0003 /* 
e6d0: 53 51 4c 49 54 45 5f 55 54 46 38 2c 20 53 51 4c  SQLITE_UTF8, SQL
e6e0: 49 54 45 5f 55 54 46 31 36 42 45 20 6f 72 20 55  ITE_UTF16BE or U
e6f0: 54 46 31 36 4c 45 20 2a 2f 0a 23 64 65 66 69 6e  TF16LE */.#defin
e700: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 49  e SQLITE_FUNC_LI
e710: 4b 45 20 20 20 20 20 30 78 30 30 30 34 20 2f 2a  KE     0x0004 /*
e720: 20 43 61 6e 64 69 64 61 74 65 20 66 6f 72 20 74   Candidate for t
e730: 68 65 20 4c 49 4b 45 20 6f 70 74 69 6d 69 7a 61  he LIKE optimiza
e740: 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  tion */.#define 
e750: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 41 53 45  SQLITE_FUNC_CASE
e760: 20 20 20 20 20 30 78 30 30 30 38 20 2f 2a 20 43       0x0008 /* C
e770: 61 73 65 2d 73 65 6e 73 69 74 69 76 65 20 4c 49  ase-sensitive LI
e780: 4b 45 2d 74 79 70 65 20 66 75 6e 63 74 69 6f 6e  KE-type function
e790: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
e7a0: 54 45 5f 46 55 4e 43 5f 45 50 48 45 4d 20 20 20  TE_FUNC_EPHEM   
e7b0: 20 30 78 30 30 31 30 20 2f 2a 20 45 70 68 65 6d   0x0010 /* Ephem
e7c0: 65 72 61 6c 2e 20 20 44 65 6c 65 74 65 20 77 69  eral.  Delete wi
e7d0: 74 68 20 56 44 42 45 20 2a 2f 0a 23 64 65 66 69  th VDBE */.#defi
e7e0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  ne SQLITE_FUNC_N
e7f0: 45 45 44 43 4f 4c 4c 20 30 78 30 30 32 30 20 2f  EEDCOLL 0x0020 /
e800: 2a 20 73 71 6c 69 74 65 33 47 65 74 46 75 6e 63  * sqlite3GetFunc
e810: 43 6f 6c 6c 53 65 71 28 29 20 6d 69 67 68 74 20  CollSeq() might 
e820: 62 65 20 63 61 6c 6c 65 64 2a 2f 0a 23 64 65 66  be called*/.#def
e830: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e840: 4c 45 4e 47 54 48 20 20 20 30 78 30 30 34 30 20  LENGTH   0x0040 
e850: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 6c 65 6e 67  /* Built-in leng
e860: 74 68 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a 2f  th() function */
e870: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
e880: 46 55 4e 43 5f 54 59 50 45 4f 46 20 20 20 30 78  FUNC_TYPEOF   0x
e890: 30 30 38 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0080 /* Built-in
e8a0: 20 74 79 70 65 6f 66 28 29 20 66 75 6e 63 74 69   typeof() functi
e8b0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e8c0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 55 4e 54 20  LITE_FUNC_COUNT 
e8d0: 20 20 20 30 78 30 31 30 30 20 2f 2a 20 42 75 69     0x0100 /* Bui
e8e0: 6c 74 2d 69 6e 20 63 6f 75 6e 74 28 2a 29 20 61  lt-in count(*) a
e8f0: 67 67 72 65 67 61 74 65 20 2a 2f 0a 23 64 65 66  ggregate */.#def
e900: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
e910: 43 4f 41 4c 45 53 43 45 20 30 78 30 32 30 30 20  COALESCE 0x0200 
e920: 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 61 6c  /* Built-in coal
e930: 65 73 63 65 28 29 20 6f 72 20 69 66 6e 75 6c 6c  esce() or ifnull
e940: 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  () */.#define SQ
e950: 4c 49 54 45 5f 46 55 4e 43 5f 55 4e 4c 49 4b 45  LITE_FUNC_UNLIKE
e960: 4c 59 20 30 78 30 34 30 30 20 2f 2a 20 42 75 69  LY 0x0400 /* Bui
e970: 6c 74 2d 69 6e 20 75 6e 6c 69 6b 65 6c 79 28 29  lt-in unlikely()
e980: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65   function */.#de
e990: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
e9a0: 5f 43 4f 4e 53 54 41 4e 54 20 30 78 30 38 30 30  _CONSTANT 0x0800
e9b0: 20 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 69 6e 70   /* Constant inp
e9c0: 75 74 73 20 67 69 76 65 20 61 20 63 6f 6e 73 74  uts give a const
e9d0: 61 6e 74 20 6f 75 74 70 75 74 20 2a 2f 0a 23 64  ant output */.#d
e9e0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
e9f0: 43 5f 4d 49 4e 4d 41 58 20 20 20 30 78 31 30 30  C_MINMAX   0x100
ea00: 30 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 6d 69  0 /* True for mi
ea10: 6e 28 29 20 61 6e 64 20 6d 61 78 28 29 20 61 67  n() and max() ag
ea20: 67 72 65 67 61 74 65 73 20 2a 2f 0a 23 64 65 66  gregates */.#def
ea30: 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  ine SQLITE_FUNC_
ea40: 53 4c 4f 43 48 4e 47 20 20 30 78 32 30 30 30 20  SLOCHNG  0x2000 
ea50: 2f 2a 20 22 53 6c 6f 77 20 43 68 61 6e 67 65 22  /* "Slow Change"
ea60: 2e 20 56 61 6c 75 65 20 63 6f 6e 73 74 61 6e 74  . Value constant
ea70: 20 64 75 72 69 6e 67 20 61 0a 20 20 20 20 20 20   during a.      
ea80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
eaa0: 20 73 69 6e 67 6c 65 20 71 75 65 72 79 20 2d 20   single query - 
eab0: 6d 69 67 68 74 20 63 68 61 6e 67 65 20 6f 76 65  might change ove
eac0: 72 20 74 69 6d 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  r time */../*.**
ead0: 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74   The following t
eae0: 68 72 65 65 20 6d 61 63 72 6f 73 2c 20 46 55 4e  hree macros, FUN
eaf0: 43 54 49 4f 4e 28 29 2c 20 4c 49 4b 45 46 55 4e  CTION(), LIKEFUN
eb00: 43 28 29 20 61 6e 64 20 41 47 47 52 45 47 41 54  C() and AGGREGAT
eb10: 45 28 29 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  E() are.** used 
eb20: 74 6f 20 63 72 65 61 74 65 20 74 68 65 20 69 6e  to create the in
eb30: 69 74 69 61 6c 69 7a 65 72 73 20 66 6f 72 20 74  itializers for t
eb40: 68 65 20 46 75 6e 63 44 65 66 20 73 74 72 75 63  he FuncDef struc
eb50: 74 75 72 65 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46  tures..**.**   F
eb60: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
eb70: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
eb80: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 55 73  xFunc).**     Us
eb90: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 73  ed to create a s
eba0: 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 20 64  calar function d
ebb0: 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 61 20 66  efinition of a f
ebc0: 75 6e 63 74 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a  unction zName.**
ebd0: 20 20 20 20 20 69 6d 70 6c 65 6d 65 6e 74 65 64       implemented
ebe0: 20 62 79 20 43 20 66 75 6e 63 74 69 6f 6e 20 78   by C function x
ebf0: 46 75 6e 63 20 74 68 61 74 20 61 63 63 65 70 74  Func that accept
ec00: 73 20 6e 41 72 67 20 61 72 67 75 6d 65 6e 74 73  s nArg arguments
ec10: 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 76 61 6c  . The.**     val
ec20: 75 65 20 70 61 73 73 65 64 20 61 73 20 69 41 72  ue passed as iAr
ec30: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
ec40: 76 6f 69 64 2a 29 20 61 6e 64 20 6d 61 64 65 20  void*) and made 
ec50: 61 76 61 69 6c 61 62 6c 65 0a 2a 2a 20 20 20 20  available.**    
ec60: 20 61 73 20 74 68 65 20 75 73 65 72 2d 64 61 74   as the user-dat
ec70: 61 20 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f  a (sqlite3_user_
ec80: 64 61 74 61 28 29 29 20 66 6f 72 20 74 68 65 20  data()) for the 
ec90: 66 75 6e 63 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20  function. If.** 
eca0: 20 20 20 20 61 72 67 75 6d 65 6e 74 20 62 4e 43      argument bNC
ecb0: 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20 74   is true, then t
ecc0: 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  he SQLITE_FUNC_N
ecd0: 45 45 44 43 4f 4c 4c 20 66 6c 61 67 20 69 73 20  EEDCOLL flag is 
ece0: 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55  set..**.**   VFU
ecf0: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
ed00: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
ed10: 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69 6b  Func).**     Lik
ed20: 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65 70  e FUNCTION excep
ed30: 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20 53  t it omits the S
ed40: 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54  QLITE_FUNC_CONST
ed50: 41 4e 54 20 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20  ANT flag..**.** 
ed60: 20 20 44 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d    DFUNCTION(zNam
ed70: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
ed80: 4e 43 2c 20 78 46 75 6e 63 29 0a 2a 2a 20 20 20  NC, xFunc).**   
ed90: 20 20 4c 69 6b 65 20 46 55 4e 43 54 49 4f 4e 20    Like FUNCTION 
eda0: 65 78 63 65 70 74 20 69 74 20 6f 6d 69 74 73 20  except it omits 
edb0: 74 68 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f  the SQLITE_FUNC_
edc0: 43 4f 4e 53 54 41 4e 54 20 66 6c 61 67 20 61 6e  CONSTANT flag an
edd0: 64 0a 2a 2a 20 20 20 20 20 61 64 64 73 20 74 68  d.**     adds th
ede0: 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c  e SQLITE_FUNC_SL
edf0: 4f 43 48 4e 47 20 66 6c 61 67 2e 20 20 55 73 65  OCHNG flag.  Use
ee00: 64 20 66 6f 72 20 64 61 74 65 20 26 20 74 69 6d  d for date & tim
ee10: 65 20 66 75 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20  e functions.**  
ee20: 20 20 20 61 6e 64 20 66 75 6e 63 74 69 6f 6e 73     and functions
ee30: 20 6c 69 6b 65 20 73 71 6c 69 74 65 5f 76 65 72   like sqlite_ver
ee40: 73 69 6f 6e 28 29 20 74 68 61 74 20 63 61 6e 20  sion() that can 
ee50: 63 68 61 6e 67 65 2c 20 62 75 74 20 6e 6f 74 20  change, but not 
ee60: 64 75 72 69 6e 67 0a 2a 2a 20 20 20 20 20 61 20  during.**     a 
ee70: 73 69 6e 67 6c 65 20 71 75 65 72 79 2e 0a 2a 2a  single query..**
ee80: 0a 2a 2a 20 20 20 41 47 47 52 45 47 41 54 45 28  .**   AGGREGATE(
ee90: 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69 41 72  zName, nArg, iAr
eea0: 67 2c 20 62 4e 43 2c 20 78 53 74 65 70 2c 20 78  g, bNC, xStep, x
eeb0: 46 69 6e 61 6c 29 0a 2a 2a 20 20 20 20 20 55 73  Final).**     Us
eec0: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 6e 20  ed to create an 
eed0: 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
eee0: 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 6d  on definition im
eef0: 70 6c 65 6d 65 6e 74 65 64 20 62 79 0a 2a 2a 20  plemented by.** 
ef00: 20 20 20 20 74 68 65 20 43 20 66 75 6e 63 74 69      the C functi
ef10: 6f 6e 73 20 78 53 74 65 70 20 61 6e 64 20 78 46  ons xStep and xF
ef20: 69 6e 61 6c 2e 20 54 68 65 20 66 69 72 73 74 20  inal. The first 
ef30: 66 6f 75 72 20 70 61 72 61 6d 65 74 65 72 73 0a  four parameters.
ef40: 2a 2a 20 20 20 20 20 61 72 65 20 69 6e 74 65 72  **     are inter
ef50: 70 72 65 74 65 64 20 69 6e 20 74 68 65 20 73 61  preted in the sa
ef60: 6d 65 20 77 61 79 20 61 73 20 74 68 65 20 66 69  me way as the fi
ef70: 72 73 74 20 34 20 70 61 72 61 6d 65 74 65 72 73  rst 4 parameters
ef80: 20 74 6f 0a 2a 2a 20 20 20 20 20 46 55 4e 43 54   to.**     FUNCT
ef90: 49 4f 4e 28 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c  ION()..**.**   L
efa0: 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e  IKEFUNC(zName, n
efb0: 41 72 67 2c 20 70 41 72 67 2c 20 66 6c 61 67 73  Arg, pArg, flags
efc0: 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74 6f  ).**     Used to
efd0: 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61 72   create a scalar
efe0: 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e 69   function defini
eff0: 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74 69  tion of a functi
f000: 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20 20  on zName.**     
f010: 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41 72  that accepts nAr
f020: 67 20 61 72 67 75 6d 65 6e 74 73 20 61 6e 64 20  g arguments and 
f030: 69 73 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62  is implemented b
f040: 79 20 61 20 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a  y a call to C.**
f050: 20 20 20 20 20 66 75 6e 63 74 69 6f 6e 20 6c 69       function li
f060: 6b 65 46 75 6e 63 2e 20 41 72 67 75 6d 65 6e 74  keFunc. Argument
f070: 20 70 41 72 67 20 69 73 20 63 61 73 74 20 74 6f   pArg is cast to
f080: 20 61 20 28 76 6f 69 64 20 2a 29 20 61 6e 64 20   a (void *) and 
f090: 6d 61 64 65 0a 2a 2a 20 20 20 20 20 61 76 61 69  made.**     avai
f0a0: 6c 61 62 6c 65 20 61 73 20 74 68 65 20 66 75 6e  lable as the fun
f0b0: 63 74 69 6f 6e 20 75 73 65 72 2d 64 61 74 61 20  ction user-data 
f0c0: 28 73 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61  (sqlite3_user_da
f0d0: 74 61 28 29 29 2e 20 54 68 65 0a 2a 2a 20 20 20  ta()). The.**   
f0e0: 20 20 46 75 6e 63 44 65 66 2e 66 6c 61 67 73 20    FuncDef.flags 
f0f0: 76 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20  variable is set 
f100: 74 6f 20 74 68 65 20 76 61 6c 75 65 20 70 61 73  to the value pas
f110: 73 65 64 20 61 73 20 74 68 65 20 66 6c 61 67 73  sed as the flags
f120: 0a 2a 2a 20 20 20 20 20 70 61 72 61 6d 65 74 65  .**     paramete
f130: 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 46 55  r..*/.#define FU
f140: 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41  NCTION(zName, nA
f150: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
f160: 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c  Func) \.  {nArg,
f170: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e   SQLITE_FUNC_CON
f180: 53 54 41 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46  STANT|SQLITE_UTF
f190: 38 7c 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55  8|(bNC*SQLITE_FU
f1a0: 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a  NC_NEEDCOLL), \.
f1b0: 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f     SQLITE_INT_TO
f1c0: 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78  _PTR(iArg), 0, x
f1d0: 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c  Func, 0, #zName,
f1e0: 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 56   {0} }.#define V
f1f0: 46 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20  FUNCTION(zName, 
f200: 6e 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c  nArg, iArg, bNC,
f210: 20 78 46 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72   xFunc) \.  {nAr
f220: 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c 28  g, SQLITE_UTF8|(
f230: 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  bNC*SQLITE_FUNC_
f240: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
f250: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
f260: 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e  R(iArg), 0, xFun
f270: 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30  c, 0, #zName, {0
f280: 7d 20 7d 0a 23 64 65 66 69 6e 65 20 44 46 55 4e  } }.#define DFUN
f290: 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72  CTION(zName, nAr
f2a0: 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46  g, iArg, bNC, xF
f2b0: 75 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20  unc) \.  {nArg, 
f2c0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43  SQLITE_FUNC_SLOC
f2d0: 48 4e 47 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c  HNG|SQLITE_UTF8|
f2e0: 28 62 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43  (bNC*SQLITE_FUNC
f2f0: 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20  _NEEDCOLL), \.  
f300: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
f310: 54 52 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75  TR(iArg), 0, xFu
f320: 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b  nc, 0, #zName, {
f330: 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 46 55 4e  0} }.#define FUN
f340: 43 54 49 4f 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41  CTION2(zName, nA
f350: 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78  rg, iArg, bNC, x
f360: 46 75 6e 63 2c 20 65 78 74 72 61 46 6c 61 67 73  Func, extraFlags
f370: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 53 51 4c 49  ) \.  {nArg,SQLI
f380: 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54  TE_FUNC_CONSTANT
f390: 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e  |SQLITE_UTF8|(bN
f3a0: 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45  C*SQLITE_FUNC_NE
f3b0: 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46 6c 61  EDCOLL)|extraFla
f3c0: 67 73 2c 5c 0a 20 20 20 53 51 4c 49 54 45 5f 49  gs,\.   SQLITE_I
f3d0: 4e 54 5f 54 4f 5f 50 54 52 28 69 41 72 67 29 2c  NT_TO_PTR(iArg),
f3e0: 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a   0, xFunc, 0, #z
f3f0: 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a 23 64 65 66  Name, {0} }.#def
f400: 69 6e 65 20 53 54 52 5f 46 55 4e 43 54 49 4f 4e  ine STR_FUNCTION
f410: 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 70 41  (zName, nArg, pA
f420: 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29 20  rg, bNC, xFunc) 
f430: 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54  \.  {nArg, SQLIT
f440: 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53  E_FUNC_SLOCHNG|S
f450: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
f460: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
f470: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 70 41 72 67  COLL), \.   pArg
f480: 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30 2c 20 23  , 0, xFunc, 0, #
f490: 7a 4e 61 6d 65 2c 20 7d 0a 23 64 65 66 69 6e 65  zName, }.#define
f4a0: 20 4c 49 4b 45 46 55 4e 43 28 7a 4e 61 6d 65 2c   LIKEFUNC(zName,
f4b0: 20 6e 41 72 67 2c 20 61 72 67 2c 20 66 6c 61 67   nArg, arg, flag
f4c0: 73 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51  s) \.  {nArg, SQ
f4d0: 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41  LITE_FUNC_CONSTA
f4e0: 4e 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 66  NT|SQLITE_UTF8|f
f4f0: 6c 61 67 73 2c 20 5c 0a 20 20 20 28 76 6f 69 64  lags, \.   (void
f500: 20 2a 29 61 72 67 2c 20 30 2c 20 6c 69 6b 65 46   *)arg, 0, likeF
f510: 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20  unc, 0, #zName, 
f520: 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20 41 47  {0} }.#define AG
f530: 47 52 45 47 41 54 45 28 7a 4e 61 6d 65 2c 20 6e  GREGATE(zName, n
f540: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
f550: 74 65 70 2c 20 78 46 69 6e 61 6c 29 20 5c 0a 20  tep, xFinal) \. 
f560: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
f570: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
f580: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c  UNC_NEEDCOLL), \
f590: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
f5a0: 4f 5f 50 54 52 28 61 72 67 29 2c 20 30 2c 20 78  O_PTR(arg), 0, x
f5b0: 53 74 65 70 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61  Step,xFinal,#zNa
f5c0: 6d 65 2c 20 7b 30 7d 7d 0a 23 64 65 66 69 6e 65  me, {0}}.#define
f5d0: 20 41 47 47 52 45 47 41 54 45 32 28 7a 4e 61 6d   AGGREGATE2(zNam
f5e0: 65 2c 20 6e 41 72 67 2c 20 61 72 67 2c 20 6e 63  e, nArg, arg, nc
f5f0: 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61 6c 2c  , xStep, xFinal,
f600: 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a 20   extraFlags) \. 
f610: 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 55   {nArg, SQLITE_U
f620: 54 46 38 7c 28 6e 63 2a 53 51 4c 49 54 45 5f 46  TF8|(nc*SQLITE_F
f630: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 29 7c 65 78  UNC_NEEDCOLL)|ex
f640: 74 72 61 46 6c 61 67 73 2c 20 5c 0a 20 20 20 53  traFlags, \.   S
f650: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
f660: 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70 2c  (arg), 0, xStep,
f670: 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b  xFinal,#zName, {
f680: 30 7d 7d 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63  0}}../*.** All c
f690: 75 72 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74  urrent savepoint
f6a0: 73 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20  s are stored in 
f6b0: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 73 74  a linked list st
f6c0: 61 72 74 69 6e 67 20 61 74 0a 2a 2a 20 73 71 6c  arting at.** sql
f6d0: 69 74 65 33 2e 70 53 61 76 65 70 6f 69 6e 74 2e  ite3.pSavepoint.
f6e0: 20 54 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65   The first eleme
f6f0: 6e 74 20 69 6e 20 74 68 65 20 6c 69 73 74 20 69  nt in the list i
f700: 73 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  s the most recen
f710: 74 6c 79 0a 2a 2a 20 6f 70 65 6e 65 64 20 73 61  tly.** opened sa
f720: 76 65 70 6f 69 6e 74 2e 20 53 61 76 65 70 6f 69  vepoint. Savepoi
f730: 6e 74 73 20 61 72 65 20 61 64 64 65 64 20 74 6f  nts are added to
f740: 20 74 68 65 20 6c 69 73 74 20 62 79 20 74 68 65   the list by the
f750: 20 76 64 62 65 0a 2a 2a 20 4f 50 5f 53 61 76 65   vdbe.** OP_Save
f760: 70 6f 69 6e 74 20 69 6e 73 74 72 75 63 74 69 6f  point instructio
f770: 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 61 76  n..*/.struct Sav
f780: 65 70 6f 69 6e 74 20 7b 0a 20 20 63 68 61 72 20  epoint {.  char 
f790: 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
f7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f7b0: 2a 20 53 61 76 65 70 6f 69 6e 74 20 6e 61 6d 65  * Savepoint name
f7c0: 20 28 6e 75 6c 2d 74 65 72 6d 69 6e 61 74 65 64   (nul-terminated
f7d0: 29 20 2a 2f 0a 20 20 69 36 34 20 6e 44 65 66 65  ) */.  i64 nDefe
f7e0: 72 72 65 64 43 6f 6e 73 3b 20 20 20 20 20 20 20  rredCons;       
f7f0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
f800: 6d 62 65 72 20 6f 66 20 64 65 66 65 72 72 65 64  mber of deferred
f810: 20 66 6b 20 76 69 6f 6c 61 74 69 6f 6e 73 20 2a   fk violations *
f820: 2f 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65  /.  i64 nDeferre
f830: 64 49 6d 6d 43 6f 6e 73 3b 20 20 20 20 20 20 20  dImmCons;       
f840: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
f850: 72 20 6f 66 20 64 65 66 65 72 72 65 64 20 69 6d  r of deferred im
f860: 6d 20 66 6b 2e 20 2a 2f 0a 20 20 53 61 76 65 70  m fk. */.  Savep
f870: 6f 69 6e 74 20 2a 70 4e 65 78 74 3b 20 20 20 20  oint *pNext;    
f880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
f890: 2a 20 50 61 72 65 6e 74 20 73 61 76 65 70 6f 69  * Parent savepoi
f8a0: 6e 74 20 28 69 66 20 61 6e 79 29 20 2a 2f 0a 7d  nt (if any) */.}
f8b0: 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c  ;../*.** The fol
f8c0: 6c 6f 77 69 6e 67 20 61 72 65 20 75 73 65 64 20  lowing are used 
f8d0: 61 73 20 74 68 65 20 73 65 63 6f 6e 64 20 70 61  as the second pa
f8e0: 72 61 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74  rameter to sqlit
f8f0: 65 33 53 61 76 65 70 6f 69 6e 74 28 29 2c 0a 2a  e3Savepoint(),.*
f900: 2a 20 61 6e 64 20 61 73 20 74 68 65 20 50 31 20  * and as the P1 
f910: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
f920: 4f 50 5f 53 61 76 65 70 6f 69 6e 74 20 69 6e 73  OP_Savepoint ins
f930: 74 72 75 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65  truction..*/.#de
f940: 66 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 42  fine SAVEPOINT_B
f950: 45 47 49 4e 20 20 20 20 20 20 30 0a 23 64 65 66  EGIN      0.#def
f960: 69 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 45  ine SAVEPOINT_RE
f970: 4c 45 41 53 45 20 20 20 20 31 0a 23 64 65 66 69  LEASE    1.#defi
f980: 6e 65 20 53 41 56 45 50 4f 49 4e 54 5f 52 4f 4c  ne SAVEPOINT_ROL
f990: 4c 42 41 43 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a  LBACK   2.../*.*
f9a0: 2a 20 45 61 63 68 20 53 51 4c 69 74 65 20 6d 6f  * Each SQLite mo
f9b0: 64 75 6c 65 20 28 76 69 72 74 75 61 6c 20 74 61  dule (virtual ta
f9c0: 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 29 20  ble definition) 
f9d0: 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61 6e  is defined by an
f9e0: 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
f9f0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
fa00: 72 75 63 74 75 72 65 2c 20 73 74 6f 72 65 64 20  ructure, stored 
fa10: 69 6e 20 74 68 65 20 73 71 6c 69 74 65 33 2e 61  in the sqlite3.a
fa20: 4d 6f 64 75 6c 65 0a 2a 2a 20 68 61 73 68 20 74  Module.** hash t
fa30: 61 62 6c 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  able..*/.struct 
fa40: 4d 6f 64 75 6c 65 20 7b 0a 20 20 63 6f 6e 73 74  Module {.  const
fa50: 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75 6c 65 20   sqlite3_module 
fa60: 2a 70 4d 6f 64 75 6c 65 3b 20 20 20 20 20 20 20  *pModule;       
fa70: 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 70 6f 69 6e  /* Callback poin
fa80: 74 65 72 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  ters */.  const 
fa90: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20  char *zName;    
faa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fab0: 2a 20 4e 61 6d 65 20 70 61 73 73 65 64 20 74 6f  * Name passed to
fac0: 20 63 72 65 61 74 65 5f 6d 6f 64 75 6c 65 28 29   create_module()
fad0: 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 41 75 78   */.  void *pAux
fae0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
faf0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 70 41             /* pA
fb00: 75 78 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  ux passed to cre
fb10: 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
fb20: 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74 72 6f    void (*xDestro
fb30: 79 29 28 76 6f 69 64 20 2a 29 3b 20 20 20 20 20  y)(void *);     
fb40: 20 20 20 20 20 20 20 2f 2a 20 4d 6f 64 75 6c 65         /* Module
fb50: 20 64 65 73 74 72 75 63 74 6f 72 20 66 75 6e 63   destructor func
fb60: 74 69 6f 6e 20 2a 2f 0a 20 20 54 61 62 6c 65 20  tion */.  Table 
fb70: 2a 70 45 70 6f 54 61 62 3b 20 20 20 20 20 20 20  *pEpoTab;       
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
fb90: 2a 20 45 70 6f 6e 79 6d 6f 75 73 20 74 61 62 6c  * Eponymous tabl
fba0: 65 20 66 6f 72 20 74 68 69 73 20 6d 6f 64 75 6c  e for this modul
fbb0: 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69  e */.};../*.** i
fbc0: 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74  nformation about
fbd0: 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f 66 20   each column of 
fbe0: 61 6e 20 53 51 4c 20 74 61 62 6c 65 20 69 73 20  an SQL table is 
fbf0: 68 65 6c 64 20 69 6e 20 61 6e 20 69 6e 73 74 61  held in an insta
fc00: 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73  nce.** of this s
fc10: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72  tructure..*/.str
fc20: 75 63 74 20 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63  uct Column {.  c
fc30: 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20  har *zName;     
fc40: 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73 20  /* Name of this 
fc50: 63 6f 6c 75 6d 6e 2c 20 5c 30 30 30 2c 20 74 68  column, \000, th
fc60: 65 6e 20 74 68 65 20 74 79 70 65 20 2a 2f 0a 20  en the type */. 
fc70: 20 45 78 70 72 20 2a 70 44 66 6c 74 3b 20 20 20   Expr *pDflt;   
fc80: 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 76 61 6c    /* Default val
fc90: 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
fca0: 6e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  n */.  char *zCo
fcb0: 6c 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c 6c 61  ll;     /* Colla
fcc0: 74 69 6e 67 20 73 65 71 75 65 6e 63 65 2e 20 20  ting sequence.  
fcd0: 49 66 20 4e 55 4c 4c 2c 20 75 73 65 20 74 68 65  If NULL, use the
fce0: 20 64 65 66 61 75 6c 74 20 2a 2f 0a 20 20 75 38   default */.  u8
fcf0: 20 6e 6f 74 4e 75 6c 6c 3b 20 20 20 20 20 20 2f   notNull;      /
fd00: 2a 20 41 6e 20 4f 45 5f 20 63 6f 64 65 20 66 6f  * An OE_ code fo
fd10: 72 20 68 61 6e 64 6c 69 6e 67 20 61 20 4e 4f 54  r handling a NOT
fd20: 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69 6e 74   NULL constraint
fd30: 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
fd40: 69 74 79 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 66  ity;   /* One of
fd50: 20 74 68 65 20 53 51 4c 49 54 45 5f 41 46 46 5f   the SQLITE_AFF_
fd60: 2e 2e 2e 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20  ... values */.  
fd70: 75 38 20 73 7a 45 73 74 3b 20 20 20 20 20 20 20  u8 szEst;       
fd80: 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
fd90: 7a 65 20 6f 66 20 76 61 6c 75 65 20 69 6e 20 74  ze of value in t
fda0: 68 69 73 20 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65  his column. size
fdb0: 6f 66 28 49 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20  of(INT)==1 */.  
fdc0: 75 38 20 63 6f 6c 46 6c 61 67 73 3b 20 20 20 20  u8 colFlags;    
fdd0: 20 2f 2a 20 42 6f 6f 6c 65 61 6e 20 70 72 6f 70   /* Boolean prop
fde0: 65 72 74 69 65 73 2e 20 20 53 65 65 20 43 4f 4c  erties.  See COL
fdf0: 46 4c 41 47 5f 20 64 65 66 69 6e 65 73 20 62 65  FLAG_ defines be
fe00: 6c 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c  low */.};../* Al
fe10: 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72  lowed values for
fe20: 20 43 6f 6c 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73   Column.colFlags
fe30: 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 43 4f 4c  :.*/.#define COL
fe40: 46 4c 41 47 5f 50 52 49 4d 4b 45 59 20 20 30 78  FLAG_PRIMKEY  0x
fe50: 30 30 30 31 20 20 20 20 2f 2a 20 43 6f 6c 75 6d  0001    /* Colum
fe60: 6e 20 69 73 20 70 61 72 74 20 6f 66 20 74 68 65  n is part of the
fe70: 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f 0a   primary key */.
fe80: 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47 5f  #define COLFLAG_
fe90: 48 49 44 44 45 4e 20 20 20 30 78 30 30 30 32 20  HIDDEN   0x0002 
fea0: 20 20 20 2f 2a 20 41 20 68 69 64 64 65 6e 20 63     /* A hidden c
feb0: 6f 6c 75 6d 6e 20 69 6e 20 61 20 76 69 72 74 75  olumn in a virtu
fec0: 61 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66  al table */.#def
fed0: 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 41 53 54  ine COLFLAG_HAST
fee0: 59 50 45 20 20 30 78 30 30 30 34 20 20 20 20 2f  YPE  0x0004    /
fef0: 2a 20 54 79 70 65 20 6e 61 6d 65 20 66 6f 6c 6c  * Type name foll
ff00: 6f 77 73 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20  ows column name 
ff10: 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c  */../*.** A "Col
ff20: 6c 61 74 69 6e 67 20 53 65 71 75 65 6e 63 65 22  lating Sequence"
ff30: 20 69 73 20 64 65 66 69 6e 65 64 20 62 79 20 61   is defined by a
ff40: 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
ff50: 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73  e following.** s
ff60: 74 72 75 63 74 75 72 65 2e 20 43 6f 6e 63 65 70  tructure. Concep
ff70: 74 75 61 6c 6c 79 2c 20 61 20 63 6f 6c 6c 61 74  tually, a collat
ff80: 69 6e 67 20 73 65 71 75 65 6e 63 65 20 63 6f 6e  ing sequence con
ff90: 73 69 73 74 73 20 6f 66 20 61 20 6e 61 6d 65 20  sists of a name 
ffa0: 61 6e 64 0a 2a 2a 20 61 20 63 6f 6d 70 61 72 69  and.** a compari
ffb0: 73 6f 6e 20 72 6f 75 74 69 6e 65 20 74 68 61 74  son routine that
ffc0: 20 64 65 66 69 6e 65 73 20 74 68 65 20 6f 72 64   defines the ord
ffd0: 65 72 20 6f 66 20 74 68 61 74 20 73 65 71 75 65  er of that seque
ffe0: 6e 63 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f  nce..**.** If Co
fff0: 6c 6c 53 65 71 2e 78 43 6d 70 20 69 73 20 4e 55  llSeq.xCmp is NU
10000 4c 4c 2c 20 69 74 20 6d 65 61 6e 73 20 74 68 61  LL, it means tha
10010 74 20 74 68 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69  t the.** collati
10020 6e 67 20 73 65 71 75 65 6e 63 65 20 69 73 20 75  ng sequence is u
10030 6e 64 65 66 69 6e 65 64 2e 20 20 49 6e 64 69 63  ndefined.  Indic
10040 65 73 20 62 75 69 6c 74 20 6f 6e 20 61 6e 20 75  es built on an u
10050 6e 64 65 66 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c  ndefined.** coll
10060 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 6d  ating sequence m
10070 61 79 20 6e 6f 74 20 62 65 20 72 65 61 64 20 6f  ay not be read o
10080 72 20 77 72 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74  r written..*/.st
10090 72 75 63 74 20 43 6f 6c 6c 53 65 71 20 7b 0a 20  ruct CollSeq {. 
100a0 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
100b0 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f         /* Name o
100c0 66 20 74 68 65 20 63 6f 6c 6c 61 74 69 6e 67 20  f the collating 
100d0 73 65 71 75 65 6e 63 65 2c 20 55 54 46 2d 38 20  sequence, UTF-8 
100e0 65 6e 63 6f 64 65 64 20 2a 2f 0a 20 20 75 38 20  encoded */.  u8 
100f0 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  enc;            
10100 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
10110 69 6e 67 20 68 61 6e 64 6c 65 64 20 62 79 20 78  ing handled by x
10120 43 6d 70 28 29 20 2a 2f 0a 20 20 76 6f 69 64 20  Cmp() */.  void 
10130 2a 70 55 73 65 72 3b 20 20 20 20 20 20 20 20 20  *pUser;         
10140 20 2f 2a 20 46 69 72 73 74 20 61 72 67 75 6d 65   /* First argume
10150 6e 74 20 74 6f 20 78 43 6d 70 28 29 20 2a 2f 0a  nt to xCmp() */.
10160 20 20 69 6e 74 20 28 2a 78 43 6d 70 29 28 76 6f    int (*xCmp)(vo
10170 69 64 2a 2c 69 6e 74 2c 20 63 6f 6e 73 74 20 76  id*,int, const v
10180 6f 69 64 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74  oid*, int, const
10190 20 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20   void*);.  void 
101a0 28 2a 78 44 65 6c 29 28 76 6f 69 64 2a 29 3b 20  (*xDel)(void*); 
101b0 20 2f 2a 20 44 65 73 74 72 75 63 74 6f 72 20 66   /* Destructor f
101c0 6f 72 20 70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a  or pUser */.};..
101d0 2f 2a 0a 2a 2a 20 41 20 73 6f 72 74 20 6f 72 64  /*.** A sort ord
101e0 65 72 20 63 61 6e 20 62 65 20 65 69 74 68 65 72  er can be either
101f0 20 41 53 43 20 6f 72 20 44 45 53 43 2e 0a 2a 2f   ASC or DESC..*/
10200 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10210 53 4f 5f 41 53 43 20 20 20 20 20 20 20 30 20 20  SO_ASC       0  
10220 2f 2a 20 53 6f 72 74 20 69 6e 20 61 73 63 65 6e  /* Sort in ascen
10230 64 69 6e 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64  ding order */.#d
10240 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f  efine SQLITE_SO_
10250 44 45 53 43 20 20 20 20 20 20 31 20 20 2f 2a 20  DESC      1  /* 
10260 53 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e  Sort in ascendin
10270 67 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69  g order */.#defi
10280 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 55 4e 44  ne SQLITE_SO_UND
10290 45 46 49 4e 45 44 20 2d 31 20 2f 2a 20 4e 6f 20  EFINED -1 /* No 
102a0 73 6f 72 74 20 6f 72 64 65 72 20 73 70 65 63 69  sort order speci
102b0 66 69 65 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43  fied */../*.** C
102c0 6f 6c 75 6d 6e 20 61 66 66 69 6e 69 74 79 20 74  olumn affinity t
102d0 79 70 65 73 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73  ypes..**.** Thes
102e0 65 20 75 73 65 64 20 74 6f 20 68 61 76 65 20 6d  e used to have m
102f0 6e 65 6d 6f 6e 69 63 20 6e 61 6d 65 20 6c 69 6b  nemonic name lik
10300 65 20 27 69 27 20 66 6f 72 20 53 51 4c 49 54 45  e 'i' for SQLITE
10310 5f 41 46 46 5f 49 4e 54 45 47 45 52 20 61 6e 64  _AFF_INTEGER and
10320 0a 2a 2a 20 27 74 27 20 66 6f 72 20 53 51 4c 49  .** 't' for SQLI
10330 54 45 5f 41 46 46 5f 54 45 58 54 2e 20 20 42 75  TE_AFF_TEXT.  Bu
10340 74 20 77 65 20 63 61 6e 20 73 61 76 65 20 61 20  t we can save a 
10350 6c 69 74 74 6c 65 20 73 70 61 63 65 20 61 6e 64  little space and
10360 20 69 6d 70 72 6f 76 65 0a 2a 2a 20 74 68 65 20   improve.** the 
10370 73 70 65 65 64 20 61 20 6c 69 74 74 6c 65 20 62  speed a little b
10380 79 20 6e 75 6d 62 65 72 69 6e 67 20 74 68 65 20  y numbering the 
10390 76 61 6c 75 65 73 20 63 6f 6e 73 65 63 75 74 69  values consecuti
103a0 76 65 6c 79 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20  vely..**.** But 
103b0 72 61 74 68 65 72 20 74 68 61 6e 20 73 74 61 72  rather than star
103c0 74 20 77 69 74 68 20 30 20 6f 72 20 31 2c 20 77  t with 0 or 1, w
103d0 65 20 62 65 67 69 6e 20 77 69 74 68 20 27 41 27  e begin with 'A'
103e0 2e 20 20 54 68 61 74 20 77 61 79 2c 0a 2a 2a 20  .  That way,.** 
103f0 77 68 65 6e 20 6d 75 6c 74 69 70 6c 65 20 61 66  when multiple af
10400 66 69 6e 69 74 79 20 74 79 70 65 73 20 61 72 65  finity types are
10410 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 69 6e   concatenated in
10420 74 6f 20 61 20 73 74 72 69 6e 67 20 61 6e 64 0a  to a string and.
10430 2a 2a 20 75 73 65 64 20 61 73 20 74 68 65 20 50  ** used as the P
10440 34 20 6f 70 65 72 61 6e 64 2c 20 74 68 65 79 20  4 operand, they 
10450 77 69 6c 6c 20 62 65 20 6d 6f 72 65 20 72 65 61  will be more rea
10460 64 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74  dable..**.** Not
10470 65 20 61 6c 73 6f 20 74 68 61 74 20 74 68 65 20  e also that the 
10480 6e 75 6d 65 72 69 63 20 74 79 70 65 73 20 61 72  numeric types ar
10490 65 20 67 72 6f 75 70 65 64 20 74 6f 67 65 74 68  e grouped togeth
104a0 65 72 20 73 6f 20 74 68 61 74 20 74 65 73 74 69  er so that testi
104b0 6e 67 0a 2a 2a 20 66 6f 72 20 61 20 6e 75 6d 65  ng.** for a nume
104c0 72 69 63 20 74 79 70 65 20 69 73 20 61 20 73 69  ric type is a si
104d0 6e 67 6c 65 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ngle comparison.
104e0 20 20 41 6e 64 20 74 68 65 20 42 4c 4f 42 20 74    And the BLOB t
104f0 79 70 65 20 69 73 20 66 69 72 73 74 2e 0a 2a 2f  ype is first..*/
10500 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10510 41 46 46 5f 42 4c 4f 42 20 20 20 20 20 27 41 27  AFF_BLOB     'A'
10520 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10530 41 46 46 5f 54 45 58 54 20 20 20 20 20 27 42 27  AFF_TEXT     'B'
10540 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10550 41 46 46 5f 4e 55 4d 45 52 49 43 20 20 27 43 27  AFF_NUMERIC  'C'
10560 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10570 41 46 46 5f 49 4e 54 45 47 45 52 20 20 27 44 27  AFF_INTEGER  'D'
10580 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
10590 41 46 46 5f 52 45 41 4c 20 20 20 20 20 27 45 27  AFF_REAL     'E'
105a0 0a 0a 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65  ..#define sqlite
105b0 33 49 73 4e 75 6d 65 72 69 63 41 66 66 69 6e 69  3IsNumericAffini
105c0 74 79 28 58 29 20 20 28 28 58 29 3e 3d 53 51 4c  ty(X)  ((X)>=SQL
105d0 49 54 45 5f 41 46 46 5f 4e 55 4d 45 52 49 43 29  ITE_AFF_NUMERIC)
105e0 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
105f0 54 45 5f 41 46 46 5f 4d 41 53 4b 20 76 61 6c 75  TE_AFF_MASK valu
10600 65 73 20 6d 61 73 6b 73 20 6f 66 66 20 74 68 65  es masks off the
10610 20 73 69 67 6e 69 66 69 63 61 6e 74 20 62 69 74   significant bit
10620 73 20 6f 66 20 61 6e 0a 2a 2a 20 61 66 66 69 6e  s of an.** affin
10630 69 74 79 20 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64  ity value..*/.#d
10640 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46  efine SQLITE_AFF
10650 5f 4d 41 53 4b 20 20 20 20 20 30 78 34 37 0a 0a  _MASK     0x47..
10660 2f 2a 0a 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c  /*.** Additional
10670 20 62 69 74 20 76 61 6c 75 65 73 20 74 68 61 74   bit values that
10680 20 63 61 6e 20 62 65 20 4f 52 65 64 20 77 69 74   can be ORed wit
10690 68 20 61 6e 20 61 66 66 69 6e 69 74 79 20 77 69  h an affinity wi
106a0 74 68 6f 75 74 0a 2a 2a 20 63 68 61 6e 67 69 6e  thout.** changin
106b0 67 20 74 68 65 20 61 66 66 69 6e 69 74 79 2e 0a  g the affinity..
106c0 2a 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  **.** The SQLITE
106d0 5f 4e 4f 54 4e 55 4c 4c 20 66 6c 61 67 20 69 73  _NOTNULL flag is
106e0 20 61 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f   a combination o
106f0 66 20 4e 55 4c 4c 45 51 20 61 6e 64 20 4a 55 4d  f NULLEQ and JUM
10700 50 49 46 4e 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63  PIFNULL..** It c
10710 61 75 73 65 73 20 61 6e 20 61 73 73 65 72 74 28  auses an assert(
10720 29 20 74 6f 20 66 69 72 65 20 69 66 20 65 69 74  ) to fire if eit
10730 68 65 72 20 6f 70 65 72 61 6e 64 20 74 6f 20 61  her operand to a
10740 20 63 6f 6d 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f   comparison.** o
10750 70 65 72 61 74 6f 72 20 69 73 20 4e 55 4c 4c 2e  perator is NULL.
10760 20 20 49 74 20 69 73 20 61 64 64 65 64 20 74 6f    It is added to
10770 20 63 65 72 74 61 69 6e 20 63 6f 6d 70 61 72 69   certain compari
10780 73 6f 6e 20 6f 70 65 72 61 74 6f 72 73 20 74 6f  son operators to
10790 0a 2a 2a 20 70 72 6f 76 65 20 74 68 61 74 20 74  .** prove that t
107a0 68 65 20 6f 70 65 72 61 6e 64 73 20 61 72 65 20  he operands are 
107b0 61 6c 77 61 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e  always NOT NULL.
107c0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49  .*/.#define SQLI
107d0 54 45 5f 4b 45 45 50 4e 55 4c 4c 20 20 20 20 20  TE_KEEPNULL     
107e0 30 78 30 38 20 20 2f 2a 20 55 73 65 64 20 62 79  0x08  /* Used by
107f0 20 76 65 63 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e   vector == or <>
10800 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
10810 54 45 5f 4a 55 4d 50 49 46 4e 55 4c 4c 20 20 20  TE_JUMPIFNULL   
10820 30 78 31 30 20 20 2f 2a 20 6a 75 6d 70 73 20 69  0x10  /* jumps i
10830 66 20 65 69 74 68 65 72 20 6f 70 65 72 61 6e 64  f either operand
10840 20 69 73 20 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66   is NULL */.#def
10850 69 6e 65 20 53 51 4c 49 54 45 5f 53 54 4f 52 45  ine SQLITE_STORE
10860 50 32 20 20 20 20 20 20 30 78 32 30 20 20 2f 2a  P2      0x20  /*
10870 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69 6e   Store result in
10880 20 72 65 67 5b 50 32 5d 20 72 61 74 68 65 72 20   reg[P2] rather 
10890 74 68 61 6e 20 6a 75 6d 70 20 2a 2f 0a 23 64 65  than jump */.#de
108a0 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 55 4c 4c  fine SQLITE_NULL
108b0 45 51 20 20 20 20 20 20 20 30 78 38 30 20 20 2f  EQ       0x80  /
108c0 2a 20 4e 55 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23  * NULL=NULL */.#
108d0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e 4f  define SQLITE_NO
108e0 54 4e 55 4c 4c 20 20 20 20 20 20 30 78 39 30 20  TNULL      0x90 
108f0 20 2f 2a 20 41 73 73 65 72 74 20 74 68 61 74 20   /* Assert that 
10900 6f 70 65 72 61 6e 64 73 20 61 72 65 20 6e 65 76  operands are nev
10910 65 72 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  er NULL */../*.*
10920 2a 20 41 6e 20 6f 62 6a 65 63 74 20 6f 66 20 74  * An object of t
10930 68 69 73 20 74 79 70 65 20 69 73 20 63 72 65 61  his type is crea
10940 74 65 64 20 66 6f 72 20 65 61 63 68 20 76 69 72  ted for each vir
10950 74 75 61 6c 20 74 61 62 6c 65 20 70 72 65 73 65  tual table prese
10960 6e 74 20 69 6e 0a 2a 2a 20 74 68 65 20 64 61 74  nt in.** the dat
10970 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
10980 0a 2a 2a 20 49 66 20 74 68 65 20 64 61 74 61 62  .** If the datab
10990 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 68  ase schema is sh
109a0 61 72 65 64 2c 20 74 68 65 6e 20 74 68 65 72 65  ared, then there
109b0 20 69 73 20 6f 6e 65 20 69 6e 73 74 61 6e 63 65   is one instance
109c0 20 6f 66 20 74 68 69 73 0a 2a 2a 20 73 74 72 75   of this.** stru
109d0 63 74 75 72 65 20 66 6f 72 20 65 61 63 68 20 64  cture for each d
109e0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
109f0 6f 6e 20 28 73 71 6c 69 74 65 33 2a 29 20 74 68  on (sqlite3*) th
10a00 61 74 20 75 73 65 73 20 74 68 65 20 73 68 61 72  at uses the shar
10a10 65 64 0a 2a 2a 20 73 63 68 65 6d 61 2e 20 54 68  ed.** schema. Th
10a20 69 73 20 69 73 20 62 65 63 61 75 73 65 20 65 61  is is because ea
10a30 63 68 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ch database conn
10a40 65 63 74 69 6f 6e 20 72 65 71 75 69 72 65 73 20  ection requires 
10a50 69 74 73 20 6f 77 6e 20 75 6e 69 71 75 65 0a 2a  its own unique.*
10a60 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  * instance of th
10a70 65 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20  e sqlite3_vtab* 
10a80 68 61 6e 64 6c 65 20 75 73 65 64 20 74 6f 20 61  handle used to a
10a90 63 63 65 73 73 20 74 68 65 20 76 69 72 74 75 61  ccess the virtua
10aa0 6c 20 74 61 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65  l table.** imple
10ab0 6d 65 6e 74 61 74 69 6f 6e 2e 20 73 71 6c 69 74  mentation. sqlit
10ac0 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
10ad0 20 63 61 6e 20 6e 6f 74 20 62 65 20 73 68 61 72   can not be shar
10ae0 65 64 20 62 65 74 77 65 65 6e 0a 2a 2a 20 64 61  ed between.** da
10af0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
10b00 6e 73 2c 20 65 76 65 6e 20 77 68 65 6e 20 74 68  ns, even when th
10b10 65 20 72 65 73 74 20 6f 66 20 74 68 65 20 69 6e  e rest of the in
10b20 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65  -memory database
10b30 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20 73 68  .** schema is sh
10b40 61 72 65 64 2c 20 61 73 20 74 68 65 20 69 6d 70  ared, as the imp
10b50 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 74 65  lementation ofte
10b60 6e 20 73 74 6f 72 65 73 20 74 68 65 20 64 61 74  n stores the dat
10b70 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
10b80 69 6f 6e 20 68 61 6e 64 6c 65 20 70 61 73 73 65  ion handle passe
10b90 64 20 74 6f 20 69 74 20 76 69 61 20 74 68 65 20  d to it via the 
10ba0 78 43 6f 6e 6e 65 63 74 28 29 20 6f 72 20 78 43  xConnect() or xC
10bb0 72 65 61 74 65 28 29 20 6d 65 74 68 6f 64 0a 2a  reate() method.*
10bc0 2a 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61 6c  * during initial
10bd0 69 7a 61 74 69 6f 6e 20 69 6e 74 65 72 6e 61 6c  ization internal
10be0 6c 79 2e 20 54 68 69 73 20 64 61 74 61 62 61 73  ly. This databas
10bf0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
10c00 64 6c 65 20 6d 61 79 0a 2a 2a 20 74 68 65 6e 20  dle may.** then 
10c10 62 65 20 75 73 65 64 20 62 79 20 74 68 65 20 76  be used by the v
10c20 69 72 74 75 61 6c 20 74 61 62 6c 65 20 69 6d 70  irtual table imp
10c30 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 74 6f 20 61  lementation to a
10c40 63 63 65 73 73 20 72 65 61 6c 20 74 61 62 6c 65  ccess real table
10c50 73 0a 2a 2a 20 77 69 74 68 69 6e 20 74 68 65 20  s.** within the 
10c60 64 61 74 61 62 61 73 65 2e 20 53 6f 20 74 68 61  database. So tha
10c70 74 20 74 68 65 79 20 61 70 70 65 61 72 20 61 73  t they appear as
10c80 20 70 61 72 74 20 6f 66 20 74 68 65 20 63 61 6c   part of the cal
10c90 6c 65 72 73 0a 2a 2a 20 74 72 61 6e 73 61 63 74  lers.** transact
10ca0 69 6f 6e 2c 20 74 68 65 73 65 20 61 63 63 65 73  ion, these acces
10cb0 73 65 73 20 6e 65 65 64 20 74 6f 20 62 65 20 6d  ses need to be m
10cc0 61 64 65 20 76 69 61 20 74 68 65 20 73 61 6d 65  ade via the same
10cd0 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 63 6f 6e   database.** con
10ce0 6e 65 63 74 69 6f 6e 20 61 73 20 74 68 61 74 20  nection as that 
10cf0 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute 
10d00 53 51 4c 20 6f 70 65 72 61 74 69 6f 6e 73 20 6f  SQL operations o
10d10 6e 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  n the virtual ta
10d20 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56  ble..**.** All V
10d30 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20 74 68  Table objects th
10d40 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f  at correspond to
10d50 20 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20   a single table 
10d60 69 6e 20 61 20 73 68 61 72 65 64 0a 2a 2a 20 64  in a shared.** d
10d70 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 61  atabase schema a
10d80 72 65 20 69 6e 69 74 69 61 6c 6c 79 20 73 74 6f  re initially sto
10d90 72 65 64 20 69 6e 20 61 20 6c 69 6e 6b 65 64 2d  red in a linked-
10da0 6c 69 73 74 20 70 6f 69 6e 74 65 64 20 74 6f 20  list pointed to 
10db0 62 79 0a 2a 2a 20 74 68 65 20 54 61 62 6c 65 2e  by.** the Table.
10dc0 70 56 54 61 62 6c 65 20 6d 65 6d 62 65 72 20 76  pVTable member v
10dd0 61 72 69 61 62 6c 65 20 6f 66 20 74 68 65 20 63  ariable of the c
10de0 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 54 61 62  orresponding Tab
10df0 6c 65 20 6f 62 6a 65 63 74 2e 0a 2a 2a 20 57 68  le object..** Wh
10e00 65 6e 20 61 6e 20 73 71 6c 69 74 65 33 5f 70 72  en an sqlite3_pr
10e10 65 70 61 72 65 28 29 20 6f 70 65 72 61 74 69 6f  epare() operatio
10e20 6e 20 69 73 20 72 65 71 75 69 72 65 64 20 74 6f  n is required to
10e30 20 61 63 63 65 73 73 20 74 68 65 20 76 69 72 74   access the virt
10e40 75 61 6c 0a 2a 2a 20 74 61 62 6c 65 2c 20 69 74  ual.** table, it
10e50 20 73 65 61 72 63 68 65 73 20 74 68 65 20 6c 69   searches the li
10e60 73 74 20 66 6f 72 20 74 68 65 20 56 54 61 62 6c  st for the VTabl
10e70 65 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f 6e  e that correspon
10e80 64 73 20 74 6f 20 74 68 65 0a 2a 2a 20 64 61 74  ds to the.** dat
10e90 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
10ea0 20 64 6f 69 6e 67 20 74 68 65 20 70 72 65 70 61   doing the prepa
10eb0 72 69 6e 67 20 73 6f 20 61 73 20 74 6f 20 75 73  ring so as to us
10ec0 65 20 74 68 65 20 63 6f 72 72 65 63 74 0a 2a 2a  e the correct.**
10ed0 20 73 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68   sqlite3_vtab* h
10ee0 61 6e 64 6c 65 20 69 6e 20 74 68 65 20 63 6f 6d  andle in the com
10ef0 70 69 6c 65 64 20 71 75 65 72 79 2e 0a 2a 2a 0a  piled query..**.
10f00 2a 2a 20 57 68 65 6e 20 61 6e 20 69 6e 2d 6d 65  ** When an in-me
10f10 6d 6f 72 79 20 54 61 62 6c 65 20 6f 62 6a 65 63  mory Table objec
10f20 74 20 69 73 20 64 65 6c 65 74 65 64 20 28 66 6f  t is deleted (fo
10f30 72 20 65 78 61 6d 70 6c 65 20 77 68 65 6e 20 74  r example when t
10f40 68 65 0a 2a 2a 20 73 63 68 65 6d 61 20 69 73 20  he.** schema is 
10f50 62 65 69 6e 67 20 72 65 6c 6f 61 64 65 64 20 66  being reloaded f
10f60 6f 72 20 73 6f 6d 65 20 72 65 61 73 6f 6e 29 2c  or some reason),
10f70 20 74 68 65 20 56 54 61 62 6c 65 20 6f 62 6a 65   the VTable obje
10f80 63 74 73 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 64  cts are not.** d
10f90 65 6c 65 74 65 64 20 61 6e 64 20 74 68 65 20 73  eleted and the s
10fa0 71 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e  qlite3_vtab* han
10fb0 64 6c 65 73 20 61 72 65 20 6e 6f 74 20 78 44 69  dles are not xDi
10fc0 73 63 6f 6e 6e 65 63 74 28 29 65 64 0a 2a 2a 20  sconnect()ed.** 
10fd0 69 6d 6d 65 64 69 61 74 65 6c 79 2e 20 49 6e 73  immediately. Ins
10fe0 74 65 61 64 2c 20 74 68 65 79 20 61 72 65 20 6d  tead, they are m
10ff0 6f 76 65 64 20 66 72 6f 6d 20 74 68 65 20 54 61  oved from the Ta
11000 62 6c 65 2e 70 56 54 61 62 6c 65 20 6c 69 73 74  ble.pVTable list
11010 20 74 6f 0a 2a 2a 20 61 6e 6f 74 68 65 72 20 6c   to.** another l
11020 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
11030 64 20 62 79 20 74 68 65 20 73 71 6c 69 74 65 33  d by the sqlite3
11040 2e 70 44 69 73 63 6f 6e 6e 65 63 74 20 6d 65 6d  .pDisconnect mem
11050 62 65 72 20 6f 66 20 74 68 65 0a 2a 2a 20 63 6f  ber of the.** co
11060 72 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69  rresponding sqli
11070 74 65 33 20 73 74 72 75 63 74 75 72 65 2e 20 54  te3 structure. T
11080 68 65 79 20 61 72 65 20 74 68 65 6e 20 64 65 6c  hey are then del
11090 65 74 65 64 2f 78 44 69 73 63 6f 6e 6e 65 63 74  eted/xDisconnect
110a0 65 64 0a 2a 2a 20 6e 65 78 74 20 74 69 6d 65 20  ed.** next time 
110b0 61 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 70  a statement is p
110c0 72 65 70 61 72 65 64 20 75 73 69 6e 67 20 73 61  repared using sa
110d0 69 64 20 73 71 6c 69 74 65 33 2a 2e 20 54 68 69  id sqlite3*. Thi
110e0 73 20 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20  s is done.** to 
110f0 61 76 6f 69 64 20 64 65 61 64 6c 6f 63 6b 20 69  avoid deadlock i
11100 73 73 75 65 73 20 69 6e 76 6f 6c 76 69 6e 67 20  ssues involving 
11110 6d 75 6c 74 69 70 6c 65 20 73 71 6c 69 74 65 33  multiple sqlite3
11120 2e 6d 75 74 65 78 20 6d 75 74 65 78 65 73 2e 0a  .mutex mutexes..
11130 2a 2a 20 52 65 66 65 72 20 74 6f 20 63 6f 6d 6d  ** Refer to comm
11140 65 6e 74 73 20 61 62 6f 76 65 20 66 75 6e 63 74  ents above funct
11150 69 6f 6e 20 73 71 6c 69 74 65 33 56 74 61 62 55  ion sqlite3VtabU
11160 6e 6c 6f 63 6b 4c 69 73 74 28 29 20 66 6f 72 20  nlockList() for 
11170 61 6e 0a 2a 2a 20 65 78 70 6c 61 6e 61 74 69 6f  an.** explanatio
11180 6e 20 61 73 20 74 6f 20 77 68 79 20 69 74 20 69  n as to why it i
11190 73 20 73 61 66 65 20 74 6f 20 61 64 64 20 61 6e  s safe to add an
111a0 20 65 6e 74 72 79 20 74 6f 20 61 6e 20 73 71 6c   entry to an sql
111b0 69 74 65 33 2e 70 44 69 73 63 6f 6e 6e 65 63 74  ite3.pDisconnect
111c0 0a 2a 2a 20 6c 69 73 74 20 77 69 74 68 6f 75 74  .** list without
111d0 20 68 6f 6c 64 69 6e 67 20 74 68 65 20 63 6f 72   holding the cor
111e0 72 65 73 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74  responding sqlit
111f0 65 33 2e 6d 75 74 65 78 20 6d 75 74 65 78 2e 0a  e3.mutex mutex..
11200 2a 2a 0a 2a 2a 20 54 68 65 20 6d 65 6d 6f 72 79  **.** The memory
11210 20 66 6f 72 20 6f 62 6a 65 63 74 73 20 6f 66 20   for objects of 
11220 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c 77  this type is alw
11230 61 79 73 20 61 6c 6c 6f 63 61 74 65 64 20 62 79  ays allocated by
11240 0a 2a 2a 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  .** sqlite3DbMal
11250 6c 6f 63 28 29 2c 20 75 73 69 6e 67 20 74 68 65  loc(), using the
11260 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
11270 6c 65 20 73 74 6f 72 65 64 20 69 6e 20 56 54 61  le stored in VTa
11280 62 6c 65 2e 64 62 20 61 73 0a 2a 2a 20 74 68 65  ble.db as.** the
11290 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e   first argument.
112a0 0a 2a 2f 0a 73 74 72 75 63 74 20 56 54 61 62 6c  .*/.struct VTabl
112b0 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64  e {.  sqlite3 *d
112c0 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
112d0 2f 2a 20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e  /* Database conn
112e0 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 65  ection associate
112f0 64 20 77 69 74 68 20 74 68 69 73 20 74 61 62 6c  d with this tabl
11300 65 20 2a 2f 0a 20 20 4d 6f 64 75 6c 65 20 2a 70  e */.  Module *p
11310 4d 6f 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  Mod;            
11320 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 6d   /* Pointer to m
11330 6f 64 75 6c 65 20 69 6d 70 6c 65 6d 65 6e 74 61  odule implementa
11340 74 69 6f 6e 20 2a 2f 0a 20 20 73 71 6c 69 74 65  tion */.  sqlite
11350 33 5f 76 74 61 62 20 2a 70 56 74 61 62 3b 20 20  3_vtab *pVtab;  
11360 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
11370 6f 20 76 74 61 62 20 69 6e 73 74 61 6e 63 65 20  o vtab instance 
11380 2a 2f 0a 20 20 69 6e 74 20 6e 52 65 66 3b 20 20  */.  int nRef;  
11390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
113a0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 6f 69 6e  * Number of poin
113b0 74 65 72 73 20 74 6f 20 74 68 69 73 20 73 74 72  ters to this str
113c0 75 63 74 75 72 65 20 2a 2f 0a 20 20 75 38 20 62  ucture */.  u8 b
113d0 43 6f 6e 73 74 72 61 69 6e 74 3b 20 20 20 20 20  Constraint;     
113e0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
113f0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 61 72 65   constraints are
11400 20 73 75 70 70 6f 72 74 65 64 20 2a 2f 0a 20 20   supported */.  
11410 69 6e 74 20 69 53 61 76 65 70 6f 69 6e 74 3b 20  int iSavepoint; 
11420 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 70            /* Dep
11430 74 68 20 6f 66 20 74 68 65 20 53 41 56 45 50 4f  th of the SAVEPO
11440 49 4e 54 20 73 74 61 63 6b 20 2a 2f 0a 20 20 56  INT stack */.  V
11450 54 61 62 6c 65 20 2a 70 4e 65 78 74 3b 20 20 20  Table *pNext;   
11460 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
11470 20 69 6e 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20   in linked list 
11480 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 7d  (see above) */.}
11490 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 73 63 68  ;../*.** The sch
114a0 65 6d 61 20 66 6f 72 20 65 61 63 68 20 53 51 4c  ema for each SQL
114b0 20 74 61 62 6c 65 20 61 6e 64 20 76 69 65 77 20   table and view 
114c0 69 73 20 72 65 70 72 65 73 65 6e 74 65 64 20 69  is represented i
114d0 6e 20 6d 65 6d 6f 72 79 0a 2a 2a 20 62 79 20 61  n memory.** by a
114e0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
114f0 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75  e following stru
11500 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74  cture..*/.struct
11510 20 54 61 62 6c 65 20 7b 0a 20 20 63 68 61 72 20   Table {.  char 
11520 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
11530 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65 20 74  /* Name of the t
11540 61 62 6c 65 20 6f 72 20 76 69 65 77 20 2a 2f 0a  able or view */.
11550 20 20 43 6f 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20    Column *aCol; 
11560 20 20 20 20 20 20 20 2f 2a 20 49 6e 66 6f 72 6d         /* Inform
11570 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63 68  ation about each
11580 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64   column */.  Ind
11590 65 78 20 2a 70 49 6e 64 65 78 3b 20 20 20 20 20  ex *pIndex;     
115a0 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 53 51 4c    /* List of SQL
115b0 20 69 6e 64 65 78 65 73 20 6f 6e 20 74 68 69 73   indexes on this
115c0 20 74 61 62 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c   table. */.  Sel
115d0 65 63 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20  ect *pSelect;   
115e0 20 20 2f 2a 20 4e 55 4c 4c 20 66 6f 72 20 74 61    /* NULL for ta
115f0 62 6c 65 73 2e 20 20 50 6f 69 6e 74 73 20 74 6f  bles.  Points to
11600 20 64 65 66 69 6e 69 74 69 6f 6e 20 69 66 20 61   definition if a
11610 20 76 69 65 77 2e 20 2a 2f 0a 20 20 46 4b 65 79   view. */.  FKey
11620 20 2a 70 46 4b 65 79 3b 20 20 20 20 20 20 20 20   *pFKey;        
11630 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20   /* Linked list 
11640 6f 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  of all foreign k
11650 65 79 73 20 69 6e 20 74 68 69 73 20 74 61 62 6c  eys in this tabl
11660 65 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 43 6f  e */.  char *zCo
11670 6c 41 66 66 3b 20 20 20 20 20 20 20 2f 2a 20 53  lAff;       /* S
11680 74 72 69 6e 67 20 64 65 66 69 6e 69 6e 67 20 74  tring defining t
11690 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 65  he affinity of e
116a0 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20  ach column */.  
116b0 45 78 70 72 4c 69 73 74 20 2a 70 43 68 65 63 6b  ExprList *pCheck
116c0 3b 20 20 20 20 2f 2a 20 41 6c 6c 20 43 48 45 43  ;    /* All CHEC
116d0 4b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a 2f  K constraints */
116e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
116f0 20 20 20 20 20 20 20 20 2f 2a 20 20 20 2e 2e 2e          /*   ...
11700 20 61 6c 73 6f 20 75 73 65 64 20 61 73 20 63 6f   also used as co
11710 6c 75 6d 6e 20 6e 61 6d 65 20 6c 69 73 74 20 69  lumn name list i
11720 6e 20 61 20 56 49 45 57 20 2a 2f 0a 20 20 69 6e  n a VIEW */.  in
11730 74 20 74 6e 75 6d 3b 20 20 20 20 20 20 20 20 20  t tnum;         
11740 20 20 20 2f 2a 20 52 6f 6f 74 20 42 54 72 65 65     /* Root BTree
11750 20 70 61 67 65 20 66 6f 72 20 74 68 69 73 20 74   page for this t
11760 61 62 6c 65 20 2a 2f 0a 20 20 69 31 36 20 69 50  able */.  i16 iP
11770 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Key;           /
11780 2a 20 49 66 20 6e 6f 74 20 6e 65 67 61 74 69 76  * If not negativ
11790 65 2c 20 75 73 65 20 61 43 6f 6c 5b 69 50 4b 65  e, use aCol[iPKe
117a0 79 5d 20 61 73 20 74 68 65 20 72 6f 77 69 64 20  y] as the rowid 
117b0 2a 2f 0a 20 20 69 31 36 20 6e 43 6f 6c 3b 20 20  */.  i16 nCol;  
117c0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
117d0 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
117e0 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a  n this table */.
117f0 20 20 75 31 36 20 6e 52 65 66 3b 20 20 20 20 20    u16 nRef;     
11800 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
11810 20 6f 66 20 70 6f 69 6e 74 65 72 73 20 74 6f 20   of pointers to 
11820 74 68 69 73 20 54 61 62 6c 65 20 2a 2f 0a 20 20  this Table */.  
11830 4c 6f 67 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73  LogEst nRowLogEs
11840 74 3b 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65  t;   /* Estimate
11850 64 20 72 6f 77 73 20 69 6e 20 74 61 62 6c 65 20  d rows in table 
11860 2d 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74  - from sqlite_st
11870 61 74 31 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c  at1 table */.  L
11880 6f 67 45 73 74 20 73 7a 54 61 62 52 6f 77 3b 20  ogEst szTabRow; 
11890 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64      /* Estimated
118a0 20 73 69 7a 65 20 6f 66 20 65 61 63 68 20 74 61   size of each ta
118b0 62 6c 65 20 72 6f 77 20 69 6e 20 62 79 74 65 73  ble row in bytes
118c0 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54   */.#ifdef SQLIT
118d0 45 5f 45 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c  E_ENABLE_COSTMUL
118e0 54 0a 20 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d  T.  LogEst costM
118f0 75 6c 74 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74  ult;     /* Cost
11900 20 6d 75 6c 74 69 70 6c 69 65 72 20 66 6f 72 20   multiplier for 
11910 75 73 69 6e 67 20 74 68 69 73 20 74 61 62 6c 65  using this table
11920 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 75 38 20   */.#endif.  u8 
11930 74 61 62 46 6c 61 67 73 3b 20 20 20 20 20 20 20  tabFlags;       
11940 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 54 46 5f    /* Mask of TF_
11950 2a 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38  * values */.  u8
11960 20 6b 65 79 43 6f 6e 66 3b 20 20 20 20 20 20 20   keyConf;       
11970 20 20 20 2f 2a 20 57 68 61 74 20 74 6f 20 64 6f     /* What to do
11980 20 69 6e 20 63 61 73 65 20 6f 66 20 75 6e 69 71   in case of uniq
11990 75 65 6e 65 73 73 20 63 6f 6e 66 6c 69 63 74 20  ueness conflict 
119a0 6f 6e 20 69 50 4b 65 79 20 2a 2f 0a 23 69 66 6e  on iPKey */.#ifn
119b0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
119c0 41 4c 54 45 52 54 41 42 4c 45 0a 20 20 69 6e 74  ALTERTABLE.  int
119d0 20 61 64 64 43 6f 6c 4f 66 66 73 65 74 3b 20 20   addColOffset;  
119e0 20 20 2f 2a 20 4f 66 66 73 65 74 20 69 6e 20 43    /* Offset in C
119f0 52 45 41 54 45 20 54 41 42 4c 45 20 73 74 6d 74  REATE TABLE stmt
11a00 20 74 6f 20 61 64 64 20 61 20 6e 65 77 20 63 6f   to add a new co
11a10 6c 75 6d 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  lumn */.#endif.#
11a20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
11a30 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
11a40 20 20 69 6e 74 20 6e 4d 6f 64 75 6c 65 41 72 67    int nModuleArg
11a50 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
11a60 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f   of arguments to
11a70 20 74 68 65 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20   the module */. 
11a80 20 63 68 61 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65   char **azModule
11a90 41 72 67 3b 20 20 2f 2a 20 30 3a 20 6d 6f 64 75  Arg;  /* 0: modu
11aa0 6c 65 20 31 3a 20 73 63 68 65 6d 61 20 32 3a 20  le 1: schema 2: 
11ab0 76 74 61 62 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20  vtab name 3...: 
11ac0 61 72 67 73 20 2a 2f 0a 20 20 56 54 61 62 6c 65  args */.  VTable
11ad0 20 2a 70 56 54 61 62 6c 65 3b 20 20 20 20 20 2f   *pVTable;     /
11ae0 2a 20 4c 69 73 74 20 6f 66 20 56 54 61 62 6c 65  * List of VTable
11af0 20 6f 62 6a 65 63 74 73 2e 20 2a 2f 0a 23 65 6e   objects. */.#en
11b00 64 69 66 0a 20 20 54 72 69 67 67 65 72 20 2a 70  dif.  Trigger *p
11b10 54 72 69 67 67 65 72 3b 20 20 20 2f 2a 20 4c 69  Trigger;   /* Li
11b20 73 74 20 6f 66 20 74 72 69 67 67 65 72 73 20 73  st of triggers s
11b30 74 6f 72 65 64 20 69 6e 20 70 53 63 68 65 6d 61  tored in pSchema
11b40 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 53   */.  Schema *pS
11b50 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20 53 63  chema;     /* Sc
11b60 68 65 6d 61 20 74 68 61 74 20 63 6f 6e 74 61 69  hema that contai
11b70 6e 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ns this table */
11b80 0a 20 20 54 61 62 6c 65 20 2a 70 4e 65 78 74 5a  .  Table *pNextZ
11b90 6f 6d 62 69 65 3b 20 20 2f 2a 20 4e 65 78 74 20  ombie;  /* Next 
11ba0 6f 6e 20 74 68 65 20 50 61 72 73 65 2e 70 5a 6f  on the Parse.pZo
11bb0 6d 62 69 65 54 61 62 20 6c 69 73 74 20 2a 2f 0a  mbieTab list */.
11bc0 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  };../*.** Allowe
11bd0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 54 61 62  d values for Tab
11be0 6c 65 2e 74 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a  le.tabFlags..**.
11bf0 2a 2a 20 54 46 5f 4f 4f 4f 48 69 64 64 65 6e 20  ** TF_OOOHidden 
11c00 61 70 70 6c 69 65 73 20 74 6f 20 74 61 62 6c 65  applies to table
11c10 73 20 6f 72 20 76 69 65 77 20 74 68 61 74 20 68  s or view that h
11c20 61 76 65 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  ave hidden colum
11c30 6e 73 20 74 68 61 74 20 61 72 65 0a 2a 2a 20 66  ns that are.** f
11c40 6f 6c 6c 6f 77 65 64 20 62 79 20 6e 6f 6e 2d 68  ollowed by non-h
11c50 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20  idden columns.  
11c60 45 78 61 6d 70 6c 65 3a 20 20 22 43 52 45 41 54  Example:  "CREAT
11c70 45 20 56 49 52 54 55 41 4c 20 54 41 42 4c 45 20  E VIRTUAL TABLE 
11c80 78 20 55 53 49 4e 47 0a 2a 2a 20 76 74 61 62 31  x USING.** vtab1
11c90 28 61 20 48 49 44 44 45 4e 2c 20 62 29 3b 22 2e  (a HIDDEN, b);".
11ca0 20 20 53 69 6e 63 65 20 22 62 22 20 69 73 20 61    Since "b" is a
11cb0 20 6e 6f 6e 2d 68 69 64 64 65 6e 20 63 6f 6c 75   non-hidden colu
11cc0 6d 6e 20 62 75 74 20 22 61 22 20 69 73 20 68 69  mn but "a" is hi
11cd0 64 64 65 6e 2c 0a 2a 2a 20 74 68 65 20 54 46 5f  dden,.** the TF_
11ce0 4f 4f 4f 48 69 64 64 65 6e 20 61 74 74 72 69 62  OOOHidden attrib
11cf0 75 74 65 20 77 6f 75 6c 64 20 61 70 70 6c 79 20  ute would apply 
11d00 69 6e 20 74 68 69 73 20 63 61 73 65 2e 20 20 53  in this case.  S
11d10 75 63 68 20 74 61 62 6c 65 73 20 72 65 71 75 69  uch tables requi
11d20 72 65 0a 2a 2a 20 73 70 65 63 69 61 6c 20 68 61  re.** special ha
11d30 6e 64 6c 69 6e 67 20 64 75 72 69 6e 67 20 49 4e  ndling during IN
11d40 53 45 52 54 20 70 72 6f 63 65 73 73 69 6e 67 2e  SERT processing.
11d50 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 52  .*/.#define TF_R
11d60 65 61 64 6f 6e 6c 79 20 20 20 20 20 20 20 20 30  eadonly        0
11d70 78 30 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f  x01    /* Read-o
11d80 6e 6c 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65  nly system table
11d90 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45   */.#define TF_E
11da0 70 68 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30  phemeral       0
11db0 78 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  x02    /* An eph
11dc0 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
11dd0 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
11de0 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 34 20  imaryKey   0x04 
11df0 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61 73 20     /* Table has 
11e00 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20 2a 2f  a primary key */
11e10 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75 74 6f  .#define TF_Auto
11e20 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78 30 38  increment   0x08
11e30 20 20 20 20 2f 2a 20 49 6e 74 65 67 65 72 20 70      /* Integer p
11e40 72 69 6d 61 72 79 20 6b 65 79 20 69 73 20 61 75  rimary key is au
11e50 74 6f 69 6e 63 72 65 6d 65 6e 74 20 2a 2f 0a 23  toincrement */.#
11e60 64 65 66 69 6e 65 20 54 46 5f 56 69 72 74 75 61  define TF_Virtua
11e70 6c 20 20 20 20 20 20 20 20 20 30 78 31 30 20 20  l         0x10  
11e80 20 20 2f 2a 20 49 73 20 61 20 76 69 72 74 75 61    /* Is a virtua
11e90 6c 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69  l table */.#defi
11ea0 6e 65 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77  ne TF_WithoutRow
11eb0 69 64 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a  id    0x20    /*
11ec0 20 4e 6f 20 72 6f 77 69 64 2e 20 20 50 52 49 4d   No rowid.  PRIM
11ed0 41 52 59 20 4b 45 59 20 69 73 20 74 68 65 20 6b  ARY KEY is the k
11ee0 65 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  ey */.#define TF
11ef0 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 20  _NoVisibleRowid 
11f00 20 30 78 34 30 20 20 20 20 2f 2a 20 4e 6f 20 75   0x40    /* No u
11f10 73 65 72 2d 76 69 73 69 62 6c 65 20 22 72 6f 77  ser-visible "row
11f20 69 64 22 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  id" column */.#d
11f30 65 66 69 6e 65 20 54 46 5f 4f 4f 4f 48 69 64 64  efine TF_OOOHidd
11f40 65 6e 20 20 20 20 20 20 20 30 78 38 30 20 20 20  en       0x80   
11f50 20 2f 2a 20 4f 75 74 2d 6f 66 2d 4f 72 64 65 72   /* Out-of-Order
11f60 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20   hidden columns 
11f70 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 65 73 74 20  */.../*.** Test 
11f80 74 6f 20 73 65 65 20 77 68 65 74 68 65 72 20 6f  to see whether o
11f90 72 20 6e 6f 74 20 61 20 74 61 62 6c 65 20 69 73  r not a table is
11fa0 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
11fb0 2e 20 20 54 68 69 73 20 69 73 0a 2a 2a 20 64 6f  .  This is.** do
11fc0 6e 65 20 61 73 20 61 20 6d 61 63 72 6f 20 73 6f  ne as a macro so
11fd0 20 74 68 61 74 20 69 74 20 77 69 6c 6c 20 62 65   that it will be
11fe0 20 6f 70 74 69 6d 69 7a 65 64 20 6f 75 74 20 77   optimized out w
11ff0 68 65 6e 20 76 69 72 74 75 61 6c 0a 2a 2a 20 74  hen virtual.** t
12000 61 62 6c 65 20 73 75 70 70 6f 72 74 20 69 73 20  able support is 
12010 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
12020 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 6e 64   build..*/.#ifnd
12030 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
12040 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
12050 65 66 69 6e 65 20 49 73 56 69 72 74 75 61 6c 28  efine IsVirtual(
12060 58 29 20 20 20 20 20 20 28 28 28 58 29 2d 3e 74  X)      (((X)->t
12070 61 62 46 6c 61 67 73 20 26 20 54 46 5f 56 69 72  abFlags & TF_Vir
12080 74 75 61 6c 29 21 3d 30 29 0a 23 65 6c 73 65 0a  tual)!=0).#else.
12090 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
120a0 75 61 6c 28 58 29 20 20 20 20 20 20 30 0a 23 65  ual(X)      0.#e
120b0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72  ndif../*.** Macr
120c0 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  os to determine 
120d0 69 66 20 61 20 63 6f 6c 75 6d 6e 20 69 73 20 68  if a column is h
120e0 69 64 64 65 6e 2e 20 20 49 73 4f 72 64 69 6e 61  idden.  IsOrdina
120f0 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 29  ryHiddenColumn()
12100 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72 6b 73 20 66  .** only works f
12110 6f 72 20 6e 6f 6e 2d 76 69 72 74 75 61 6c 20 74  or non-virtual t
12120 61 62 6c 65 73 20 28 6f 72 64 69 6e 61 72 79 20  ables (ordinary 
12130 74 61 62 6c 65 73 20 61 6e 64 20 76 69 65 77 73  tables and views
12140 29 20 61 6e 64 20 69 73 0a 2a 2a 20 61 6c 77 61  ) and is.** alwa
12150 79 73 20 66 61 6c 73 65 20 75 6e 6c 65 73 73 20  ys false unless 
12160 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49  SQLITE_ENABLE_HI
12170 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 20 69 73 20  DDEN_COLUMNS is 
12180 64 65 66 69 6e 65 64 2e 20 20 54 68 65 0a 2a 2a  defined.  The.**
12190 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
121a0 29 20 6d 61 63 72 6f 20 69 73 20 67 65 6e 65 72  ) macro is gener
121b0 61 6c 20 70 75 72 70 6f 73 65 2e 0a 2a 2f 0a 23  al purpose..*/.#
121c0 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
121d0 45 5f 45 4e 41 42 4c 45 5f 48 49 44 44 45 4e 5f  E_ENABLE_HIDDEN_
121e0 43 4f 4c 55 4d 4e 53 29 0a 23 20 20 64 65 66 69  COLUMNS).#  defi
121f0 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d  ne IsHiddenColum
12200 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28 28  n(X)         (((
12210 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43  X)->colFlags & C
12220 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d  OLFLAG_HIDDEN)!=
12230 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f  0).#  define IsO
12240 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c  rdinaryHiddenCol
12250 75 6d 6e 28 58 29 20 28 28 28 58 29 2d 3e 63 6f  umn(X) (((X)->co
12260 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41 47  lFlags & COLFLAG
12270 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a 23 65 6c  _HIDDEN)!=0).#el
12280 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
12290 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c 54  TE_OMIT_VIRTUALT
122a0 41 42 4c 45 29 0a 23 20 20 64 65 66 69 6e 65 20  ABLE).#  define 
122b0 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 58  IsHiddenColumn(X
122c0 29 20 20 20 20 20 20 20 20 20 28 28 28 58 29 2d  )         (((X)-
122d0 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
122e0 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29 0a  LAG_HIDDEN)!=0).
122f0 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72 64 69  #  define IsOrdi
12300 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  naryHiddenColumn
12310 28 58 29 20 30 0a 23 65 6c 73 65 0a 23 20 20 64  (X) 0.#else.#  d
12320 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f  efine IsHiddenCo
12330 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20  lumn(X)         
12340 30 0a 23 20 20 64 65 66 69 6e 65 20 49 73 4f 72  0.#  define IsOr
12350 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
12360 6d 6e 28 58 29 20 30 0a 23 65 6e 64 69 66 0a 0a  mn(X) 0.#endif..
12370 0a 2f 2a 20 44 6f 65 73 20 74 68 65 20 74 61 62  ./* Does the tab
12380 6c 65 20 68 61 76 65 20 61 20 72 6f 77 69 64 20  le have a rowid 
12390 2a 2f 0a 23 64 65 66 69 6e 65 20 48 61 73 52 6f  */.#define HasRo
123a0 77 69 64 28 58 29 20 20 20 20 20 28 28 28 58 29  wid(X)     (((X)
123b0 2d 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f  ->tabFlags & TF_
123c0 57 69 74 68 6f 75 74 52 6f 77 69 64 29 3d 3d 30  WithoutRowid)==0
123d0 29 0a 23 64 65 66 69 6e 65 20 56 69 73 69 62 6c  ).#define Visibl
123e0 65 52 6f 77 69 64 28 58 29 20 28 28 28 58 29 2d  eRowid(X) (((X)-
123f0 3e 74 61 62 46 6c 61 67 73 20 26 20 54 46 5f 4e  >tabFlags & TF_N
12400 6f 56 69 73 69 62 6c 65 52 6f 77 69 64 29 3d 3d  oVisibleRowid)==
12410 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 66  0)../*.** Each f
12420 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74  oreign key const
12430 72 61 69 6e 74 20 69 73 20 61 6e 20 69 6e 73 74  raint is an inst
12440 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c  ance of the foll
12450 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 2e  owing structure.
12460 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72 65 69 67 6e  .**.** A foreign
12470 20 6b 65 79 20 69 73 20 61 73 73 6f 63 69 61 74   key is associat
12480 65 64 20 77 69 74 68 20 74 77 6f 20 74 61 62 6c  ed with two tabl
12490 65 73 2e 20 20 54 68 65 20 22 66 72 6f 6d 22 20  es.  The "from" 
124a0 74 61 62 6c 65 20 69 73 0a 2a 2a 20 74 68 65 20  table is.** the 
124b0 74 61 62 6c 65 20 74 68 61 74 20 63 6f 6e 74 61  table that conta
124c0 69 6e 73 20 74 68 65 20 52 45 46 45 52 45 4e 43  ins the REFERENC
124d0 45 53 20 63 6c 61 75 73 65 20 74 68 61 74 20 63  ES clause that c
124e0 72 65 61 74 65 73 20 74 68 65 20 66 6f 72 65 69  reates the forei
124f0 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20 54 68 65 20  gn.** key.  The 
12500 22 74 6f 22 20 74 61 62 6c 65 20 69 73 20 74 68  "to" table is th
12510 65 20 74 61 62 6c 65 20 74 68 61 74 20 69 73 20  e table that is 
12520 6e 61 6d 65 64 20 69 6e 20 74 68 65 20 52 45 46  named in the REF
12530 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 2e 0a  ERENCES clause..
12540 2a 2a 20 43 6f 6e 73 69 64 65 72 20 74 68 69 73  ** Consider this
12550 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a 0a 2a 2a 20   example:.**.** 
12560 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c 45      CREATE TABLE
12570 20 65 78 31 28 0a 2a 2a 20 20 20 20 20 20 20 61   ex1(.**       a
12580 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52 59   INTEGER PRIMARY
12590 20 4b 45 59 2c 0a 2a 2a 20 20 20 20 20 20 20 62   KEY,.**       b
125a0 20 49 4e 54 45 47 45 52 20 43 4f 4e 53 54 52 41   INTEGER CONSTRA
125b0 49 4e 54 20 66 6b 31 20 52 45 46 45 52 45 4e 43  INT fk1 REFERENC
125c0 45 53 20 65 78 32 28 78 29 0a 2a 2a 20 20 20 20  ES ex2(x).**    
125d0 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f 72 20 66 6f   );.**.** For fo
125e0 72 65 69 67 6e 20 6b 65 79 20 22 66 6b 31 22 2c  reign key "fk1",
125f0 20 74 68 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20   the from-table 
12600 69 73 20 22 65 78 31 22 20 61 6e 64 20 74 68 65  is "ex1" and the
12610 20 74 6f 2d 74 61 62 6c 65 20 69 73 20 22 65 78   to-table is "ex
12620 32 22 2e 0a 2a 2a 20 45 71 75 69 76 61 6c 65 6e  2"..** Equivalen
12630 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a 2a 2a 20 20  t names:.**.**  
12640 20 20 20 66 72 6f 6d 2d 74 61 62 6c 65 20 3d 3d     from-table ==
12650 20 63 68 69 6c 64 2d 74 61 62 6c 65 0a 2a 2a 20   child-table.** 
12660 20 20 20 20 20 20 74 6f 2d 74 61 62 6c 65 20 3d        to-table =
12670 3d 20 70 61 72 65 6e 74 2d 74 61 62 6c 65 0a 2a  = parent-table.*
12680 2a 0a 2a 2a 20 45 61 63 68 20 52 45 46 45 52 45  *.** Each REFERE
12690 4e 43 45 53 20 63 6c 61 75 73 65 20 67 65 6e 65  NCES clause gene
126a0 72 61 74 65 73 20 61 6e 20 69 6e 73 74 61 6e 63  rates an instanc
126b0 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69  e of the followi
126c0 6e 67 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20  ng structure.** 
126d0 77 68 69 63 68 20 69 73 20 61 74 74 61 63 68 65  which is attache
126e0 64 20 74 6f 20 74 68 65 20 66 72 6f 6d 2d 74 61  d to the from-ta
126f0 62 6c 65 2e 20 20 54 68 65 20 74 6f 2d 74 61 62  ble.  The to-tab
12700 6c 65 20 6e 65 65 64 20 6e 6f 74 20 65 78 69 73  le need not exis
12710 74 20 77 68 65 6e 0a 2a 2a 20 74 68 65 20 66 72  t when.** the fr
12720 6f 6d 2d 74 61 62 6c 65 20 69 73 20 63 72 65 61  om-table is crea
12730 74 65 64 2e 20 20 54 68 65 20 65 78 69 73 74 65  ted.  The existe
12740 6e 63 65 20 6f 66 20 74 68 65 20 74 6f 2d 74 61  nce of the to-ta
12750 62 6c 65 20 69 73 20 6e 6f 74 20 63 68 65 63 6b  ble is not check
12760 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6c 69  ed..**.** The li
12770 73 74 20 6f 66 20 61 6c 6c 20 70 61 72 65 6e 74  st of all parent
12780 73 20 66 6f 72 20 63 68 69 6c 64 20 54 61 62 6c  s for child Tabl
12790 65 20 58 20 69 73 20 68 65 6c 64 20 61 74 20 58  e X is held at X
127a0 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a 2a 20 41 20  .pFKey..**.** A 
127b0 6c 69 73 74 20 6f 66 20 61 6c 6c 20 63 68 69 6c  list of all chil
127c0 64 72 65 6e 20 66 6f 72 20 61 20 74 61 62 6c 65  dren for a table
127d0 20 6e 61 6d 65 64 20 5a 20 28 77 68 69 63 68 20   named Z (which 
127e0 6d 69 67 68 74 20 6e 6f 74 20 65 76 65 6e 20 65  might not even e
127f0 78 69 73 74 29 0a 2a 2a 20 69 73 20 68 65 6c 64  xist).** is held
12800 20 69 6e 20 53 63 68 65 6d 61 2e 66 6b 65 79 48   in Schema.fkeyH
12810 61 73 68 20 77 69 74 68 20 61 20 68 61 73 68 20  ash with a hash 
12820 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f 0a 73 74 72  key of Z..*/.str
12830 75 63 74 20 46 4b 65 79 20 7b 0a 20 20 54 61 62  uct FKey {.  Tab
12840 6c 65 20 2a 70 46 72 6f 6d 3b 20 20 20 20 20 2f  le *pFrom;     /
12850 2a 20 54 61 62 6c 65 20 63 6f 6e 74 61 69 6e 69  * Table containi
12860 6e 67 20 74 68 65 20 52 45 46 45 52 45 4e 43 45  ng the REFERENCE
12870 53 20 63 6c 61 75 73 65 20 28 61 6b 61 3a 20 43  S clause (aka: C
12880 68 69 6c 64 29 20 2a 2f 0a 20 20 46 4b 65 79 20  hild) */.  FKey 
12890 2a 70 4e 65 78 74 46 72 6f 6d 3b 20 20 2f 2a 20  *pNextFrom;  /* 
128a0 4e 65 78 74 20 46 4b 65 79 20 77 69 74 68 20 74  Next FKey with t
128b0 68 65 20 73 61 6d 65 20 69 6e 20 70 46 72 6f 6d  he same in pFrom
128c0 2e 20 4e 65 78 74 20 70 61 72 65 6e 74 20 6f 66  . Next parent of
128d0 20 70 46 72 6f 6d 20 2a 2f 0a 20 20 63 68 61 72   pFrom */.  char
128e0 20 2a 7a 54 6f 3b 20 20 20 20 20 20 20 20 2f 2a   *zTo;        /*
128f0 20 4e 61 6d 65 20 6f 66 20 74 61 62 6c 65 20 74   Name of table t
12900 68 61 74 20 74 68 65 20 6b 65 79 20 70 6f 69 6e  hat the key poin
12910 74 73 20 74 6f 20 28 61 6b 61 3a 20 50 61 72 65  ts to (aka: Pare
12920 6e 74 29 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70  nt) */.  FKey *p
12930 4e 65 78 74 54 6f 3b 20 20 20 20 2f 2a 20 4e 65  NextTo;    /* Ne
12940 78 74 20 77 69 74 68 20 74 68 65 20 73 61 6d 65  xt with the same
12950 20 7a 54 6f 2e 20 4e 65 78 74 20 63 68 69 6c 64   zTo. Next child
12960 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a 20 20 46 4b   of zTo. */.  FK
12970 65 79 20 2a 70 50 72 65 76 54 6f 3b 20 20 20 20  ey *pPrevTo;    
12980 2f 2a 20 50 72 65 76 69 6f 75 73 20 77 69 74 68  /* Previous with
12990 20 74 68 65 20 73 61 6d 65 20 7a 54 6f 20 2a 2f   the same zTo */
129a0 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b 20 20 20 20  .  int nCol;    
129b0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
129c0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
129d0 73 20 6b 65 79 20 2a 2f 0a 20 20 2f 2a 20 45 56  s key */.  /* EV
129e0 3a 20 52 2d 33 30 33 32 33 2d 32 31 39 31 37 20  : R-30323-21917 
129f0 2a 2f 0a 20 20 75 38 20 69 73 44 65 66 65 72 72  */.  u8 isDeferr
12a00 65 64 3b 20 20 20 20 20 20 20 2f 2a 20 54 72 75  ed;       /* Tru
12a10 65 20 69 66 20 63 6f 6e 73 74 72 61 69 6e 74 20  e if constraint 
12a20 63 68 65 63 6b 69 6e 67 20 69 73 20 64 65 66 65  checking is defe
12a30 72 72 65 64 20 74 69 6c 6c 20 43 4f 4d 4d 49 54  rred till COMMIT
12a40 20 2a 2f 0a 20 20 75 38 20 61 41 63 74 69 6f 6e   */.  u8 aAction
12a50 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f  [2];        /* O
12a60 4e 20 44 45 4c 45 54 45 20 61 6e 64 20 4f 4e 20  N DELETE and ON 
12a70 55 50 44 41 54 45 20 61 63 74 69 6f 6e 73 2c 20  UPDATE actions, 
12a80 72 65 73 70 65 63 74 69 76 65 6c 79 20 2a 2f 0a  respectively */.
12a90 20 20 54 72 69 67 67 65 72 20 2a 61 70 54 72 69    Trigger *apTri
12aa0 67 67 65 72 5b 32 5d 3b 2f 2a 20 54 72 69 67 67  gger[2];/* Trigg
12ab0 65 72 73 20 66 6f 72 20 61 41 63 74 69 6f 6e 5b  ers for aAction[
12ac0 5d 20 61 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73  ] actions */.  s
12ad0 74 72 75 63 74 20 73 43 6f 6c 4d 61 70 20 7b 20  truct sColMap { 
12ae0 20 20 20 20 20 2f 2a 20 4d 61 70 70 69 6e 67 20       /* Mapping 
12af0 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 70 46  of columns in pF
12b00 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d 6e 73 20 69  rom to columns i
12b10 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20 20 69 6e 74  n zTo */.    int
12b20 20 69 46 72 6f 6d 3b 20 20 20 20 20 20 20 20 20   iFrom;         
12b30 20 20 20 2f 2a 20 49 6e 64 65 78 20 6f 66 20 63     /* Index of c
12b40 6f 6c 75 6d 6e 20 69 6e 20 70 46 72 6f 6d 20 2a  olumn in pFrom *
12b50 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c  /.    char *zCol
12b60 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  ;           /* N
12b70 61 6d 65 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e  ame of column in
12b80 20 7a 54 6f 2e 20 20 49 66 20 4e 55 4c 4c 20 75   zTo.  If NULL u
12b90 73 65 20 50 52 49 4d 41 52 59 20 4b 45 59 20 2a  se PRIMARY KEY *
12ba0 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31 5d 3b 20 20  /.  } aCol[1];  
12bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65            /* One
12bc0 20 65 6e 74 72 79 20 66 6f 72 20 65 61 63 68 20   entry for each 
12bd0 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75 6d 6e 73 20  of nCol columns 
12be0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c  */.};../*.** SQL
12bf0 69 74 65 20 73 75 70 70 6f 72 74 73 20 6d 61 6e  ite supports man
12c00 79 20 64 69 66 66 65 72 65 6e 74 20 77 61 79 73  y different ways
12c10 20 74 6f 20 72 65 73 6f 6c 76 65 20 61 20 63 6f   to resolve a co
12c20 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f  nstraint.** erro
12c30 72 2e 20 20 52 4f 4c 4c 42 41 43 4b 20 70 72 6f  r.  ROLLBACK pro
12c40 63 65 73 73 69 6e 67 20 6d 65 61 6e 73 20 74 68  cessing means th
12c50 61 74 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20  at a constraint 
12c60 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a 20 63 61 75  violation.** cau
12c70 73 65 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f  ses the operatio
12c80 6e 20 69 6e 20 70 72 6f 63 65 73 73 20 74 6f 20  n in process to 
12c90 66 61 69 6c 20 61 6e 64 20 66 6f 72 20 74 68 65  fail and for the
12ca0 20 63 75 72 72 65 6e 74 20 74 72 61 6e 73 61 63   current transac
12cb0 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62 65 20 72 6f  tion.** to be ro
12cc0 6c 6c 65 64 20 62 61 63 6b 2e 20 20 41 42 4f 52  lled back.  ABOR
12cd0 54 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61  T processing mea
12ce0 6e 73 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  ns the operation
12cf0 20 69 6e 20 70 72 6f 63 65 73 73 0a 2a 2a 20 66   in process.** f
12d00 61 69 6c 73 20 61 6e 64 20 61 6e 79 20 70 72 69  ails and any pri
12d10 6f 72 20 63 68 61 6e 67 65 73 20 66 72 6f 6d 20  or changes from 
12d20 74 68 61 74 20 6f 6e 65 20 6f 70 65 72 61 74 69  that one operati
12d30 6f 6e 20 61 72 65 20 62 61 63 6b 65 64 20 6f 75  on are backed ou
12d40 74 2c 0a 2a 2a 20 62 75 74 20 74 68 65 20 74 72  t,.** but the tr
12d50 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6e 6f 74  ansaction is not
12d60 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20 46   rolled back.  F
12d70 41 49 4c 20 70 72 6f 63 65 73 73 69 6e 67 20 6d  AIL processing m
12d80 65 61 6e 73 20 74 68 61 74 0a 2a 2a 20 74 68 65  eans that.** the
12d90 20 6f 70 65 72 61 74 69 6f 6e 20 69 6e 20 70 72   operation in pr
12da0 6f 67 72 65 73 73 20 73 74 6f 70 73 20 61 6e 64  ogress stops and
12db0 20 72 65 74 75 72 6e 73 20 61 6e 20 65 72 72 6f   returns an erro
12dc0 72 20 63 6f 64 65 2e 20 20 42 75 74 20 70 72 69  r code.  But pri
12dd0 6f 72 0a 2a 2a 20 63 68 61 6e 67 65 73 20 64 75  or.** changes du
12de0 65 20 74 6f 20 74 68 65 20 73 61 6d 65 20 6f 70  e to the same op
12df0 65 72 61 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20  eration are not 
12e00 62 61 63 6b 65 64 20 6f 75 74 20 61 6e 64 20 6e  backed out and n
12e10 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a 2a 20 6f 63  o rollback.** oc
12e20 63 75 72 73 2e 20 20 49 47 4e 4f 52 45 20 6d 65  curs.  IGNORE me
12e30 61 6e 73 20 74 68 61 74 20 74 68 65 20 70 61 72  ans that the par
12e40 74 69 63 75 6c 61 72 20 72 6f 77 20 74 68 61 74  ticular row that
12e50 20 63 61 75 73 65 64 20 74 68 65 20 63 6f 6e 73   caused the cons
12e60 74 72 61 69 6e 74 0a 2a 2a 20 65 72 72 6f 72 20  traint.** error 
12e70 69 73 20 6e 6f 74 20 69 6e 73 65 72 74 65 64 20  is not inserted 
12e80 6f 72 20 75 70 64 61 74 65 64 2e 20 20 50 72 6f  or updated.  Pro
12e90 63 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65  cessing continue
12ea0 73 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 0a 2a  s and no error.*
12eb0 2a 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  * is returned.  
12ec0 52 45 50 4c 41 43 45 20 6d 65 61 6e 73 20 74 68  REPLACE means th
12ed0 61 74 20 70 72 65 65 78 69 73 74 69 6e 67 20 64  at preexisting d
12ee0 61 74 61 62 61 73 65 20 72 6f 77 73 20 74 68 61  atabase rows tha
12ef0 74 20 63 61 75 73 65 64 0a 2a 2a 20 61 20 55 4e  t caused.** a UN
12f00 49 51 55 45 20 63 6f 6e 73 74 72 61 69 6e 74 20  IQUE constraint 
12f10 76 69 6f 6c 61 74 69 6f 6e 20 61 72 65 20 72 65  violation are re
12f20 6d 6f 76 65 64 20 73 6f 20 74 68 61 74 20 74 68  moved so that th
12f30 65 20 6e 65 77 20 69 6e 73 65 72 74 20 6f 72 0a  e new insert or.
12f40 2a 2a 20 75 70 64 61 74 65 20 63 61 6e 20 70 72  ** update can pr
12f50 6f 63 65 65 64 2e 20 20 50 72 6f 63 65 73 73 69  oceed.  Processi
12f60 6e 67 20 63 6f 6e 74 69 6e 75 65 73 20 61 6e 64  ng continues and
12f70 20 6e 6f 20 65 72 72 6f 72 20 69 73 20 72 65 70   no error is rep
12f80 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 52 45 53  orted..**.** RES
12f90 54 52 49 43 54 2c 20 53 45 54 4e 55 4c 4c 2c 20  TRICT, SETNULL, 
12fa0 61 6e 64 20 43 41 53 43 41 44 45 20 61 63 74 69  and CASCADE acti
12fb0 6f 6e 73 20 61 70 70 6c 79 20 6f 6e 6c 79 20 74  ons apply only t
12fc0 6f 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 2e 0a  o foreign keys..
12fd0 2a 2a 20 52 45 53 54 52 49 43 54 20 69 73 20 74  ** RESTRICT is t
12fe0 68 65 20 73 61 6d 65 20 61 73 20 41 42 4f 52 54  he same as ABORT
12ff0 20 66 6f 72 20 49 4d 4d 45 44 49 41 54 45 20 66   for IMMEDIATE f
13000 6f 72 65 69 67 6e 20 6b 65 79 73 20 61 6e 64 20  oreign keys and 
13010 74 68 65 0a 2a 2a 20 73 61 6d 65 20 61 73 20 52  the.** same as R
13020 4f 4c 4c 42 41 43 4b 20 66 6f 72 20 44 45 46 45  OLLBACK for DEFE
13030 52 52 45 44 20 6b 65 79 73 2e 20 20 53 45 54 4e  RRED keys.  SETN
13040 55 4c 4c 20 6d 65 61 6e 73 20 74 68 61 74 20 74  ULL means that t
13050 68 65 20 66 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65  he foreign.** ke
13060 79 20 69 73 20 73 65 74 20 74 6f 20 4e 55 4c 4c  y is set to NULL
13070 2e 20 20 43 41 53 43 41 44 45 20 6d 65 61 6e 73  .  CASCADE means
13080 20 74 68 61 74 20 61 20 44 45 4c 45 54 45 20 6f   that a DELETE o
13090 72 20 55 50 44 41 54 45 20 6f 66 20 74 68 65 0a  r UPDATE of the.
130a0 2a 2a 20 72 65 66 65 72 65 6e 63 65 64 20 74 61  ** referenced ta
130b0 62 6c 65 20 72 6f 77 20 69 73 20 70 72 6f 70 61  ble row is propa
130c0 67 61 74 65 64 20 69 6e 74 6f 20 74 68 65 20 72  gated into the r
130d0 6f 77 20 74 68 61 74 20 68 6f 6c 64 73 20 74 68  ow that holds th
130e0 65 0a 2a 2a 20 66 6f 72 65 69 67 6e 20 6b 65 79  e.** foreign key
130f0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c  ..**.** The foll
13100 6f 77 69 6e 67 20 73 79 6d 62 6f 6c 69 63 20 76  owing symbolic v
13110 61 6c 75 65 73 20 61 72 65 20 75 73 65 64 20 74  alues are used t
13120 6f 20 72 65 63 6f 72 64 20 77 68 69 63 68 20 74  o record which t
13130 79 70 65 0a 2a 2a 20 6f 66 20 61 63 74 69 6f 6e  ype.** of action
13140 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f 0a 23 64 65   to take..*/.#de
13150 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65 20 20 20 20  fine OE_None    
13160 20 30 20 20 20 2f 2a 20 54 68 65 72 65 20 69 73   0   /* There is
13170 20 6e 6f 20 63 6f 6e 73 74 72 61 69 6e 74 20 74   no constraint t
13180 6f 20 63 68 65 63 6b 20 2a 2f 0a 23 64 65 66 69  o check */.#defi
13190 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 31  ne OE_Rollback 1
131a0 20 20 20 2f 2a 20 46 61 69 6c 20 74 68 65 20 6f     /* Fail the o
131b0 70 65 72 61 74 69 6f 6e 20 61 6e 64 20 72 6f 6c  peration and rol
131c0 6c 62 61 63 6b 20 74 68 65 20 74 72 61 6e 73 61  lback the transa
131d0 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
131e0 20 4f 45 5f 41 62 6f 72 74 20 20 20 20 32 20 20   OE_Abort    2  
131f0 20 2f 2a 20 42 61 63 6b 20 6f 75 74 20 63 68 61   /* Back out cha
13200 6e 67 65 73 20 62 75 74 20 64 6f 20 6e 6f 20 72  nges but do no r
13210 6f 6c 6c 62 61 63 6b 20 74 72 61 6e 73 61 63 74  ollback transact
13220 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ion */.#define O
13230 45 5f 46 61 69 6c 20 20 20 20 20 33 20 20 20 2f  E_Fail     3   /
13240 2a 20 53 74 6f 70 20 74 68 65 20 6f 70 65 72 61  * Stop the opera
13250 74 69 6f 6e 20 62 75 74 20 6c 65 61 76 65 20 61  tion but leave a
13260 6c 6c 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73  ll prior changes
13270 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 49   */.#define OE_I
13280 67 6e 6f 72 65 20 20 20 34 20 20 20 2f 2a 20 49  gnore   4   /* I
13290 67 6e 6f 72 65 20 74 68 65 20 65 72 72 6f 72 2e  gnore the error.
132a0 20 44 6f 20 6e 6f 74 20 64 6f 20 74 68 65 20 49   Do not do the I
132b0 4e 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20  NSERT or UPDATE 
132c0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  */.#define OE_Re
132d0 70 6c 61 63 65 20 20 35 20 20 20 2f 2a 20 44 65  place  5   /* De
132e0 6c 65 74 65 20 65 78 69 73 74 69 6e 67 20 72 65  lete existing re
132f0 63 6f 72 64 2c 20 74 68 65 6e 20 64 6f 20 49 4e  cord, then do IN
13300 53 45 52 54 20 6f 72 20 55 50 44 41 54 45 20 2a  SERT or UPDATE *
13310 2f 0a 0a 23 64 65 66 69 6e 65 20 4f 45 5f 52 65  /..#define OE_Re
13320 73 74 72 69 63 74 20 36 20 20 20 2f 2a 20 4f 45  strict 6   /* OE
13330 5f 41 62 6f 72 74 20 66 6f 72 20 49 4d 4d 45 44  _Abort for IMMED
13340 49 41 54 45 2c 20 4f 45 5f 52 6f 6c 6c 62 61 63  IATE, OE_Rollbac
13350 6b 20 66 6f 72 20 44 45 46 45 52 52 45 44 20 2a  k for DEFERRED *
13360 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
13370 4e 75 6c 6c 20 20 37 20 20 20 2f 2a 20 53 65 74  Null  7   /* Set
13380 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
13390 20 76 61 6c 75 65 20 74 6f 20 4e 55 4c 4c 20 2a   value to NULL *
133a0 2f 0a 23 64 65 66 69 6e 65 20 4f 45 5f 53 65 74  /.#define OE_Set
133b0 44 66 6c 74 20 20 38 20 20 20 2f 2a 20 53 65 74  Dflt  8   /* Set
133c0 20 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79   the foreign key
133d0 20 76 61 6c 75 65 20 74 6f 20 69 74 73 20 64 65   value to its de
133e0 66 61 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  fault */.#define
133f0 20 4f 45 5f 43 61 73 63 61 64 65 20 20 39 20 20   OE_Cascade  9  
13400 20 2f 2a 20 43 61 73 63 61 64 65 20 74 68 65 20   /* Cascade the 
13410 63 68 61 6e 67 65 73 20 2a 2f 0a 0a 23 64 65 66  changes */..#def
13420 69 6e 65 20 4f 45 5f 44 65 66 61 75 6c 74 20 20  ine OE_Default  
13430 31 30 20 20 2f 2a 20 44 6f 20 77 68 61 74 65 76  10  /* Do whatev
13440 65 72 20 74 68 65 20 64 65 66 61 75 6c 74 20 61  er the default a
13450 63 74 69 6f 6e 20 69 73 20 2a 2f 0a 0a 0a 2f 2a  ction is */.../*
13460 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20  .** An instance 
13470 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
13480 20 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61   structure is pa
13490 73 73 65 64 20 61 73 20 74 68 65 20 66 69 72 73  ssed as the firs
134a0 74 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 74 6f  t.** argument to
134b0 20 73 71 6c 69 74 65 33 56 64 62 65 4b 65 79 43   sqlite3VdbeKeyC
134c0 6f 6d 70 61 72 65 20 61 6e 64 20 69 73 20 75 73  ompare and is us
134d0 65 64 20 74 6f 20 63 6f 6e 74 72 6f 6c 20 74 68  ed to control th
134e0 65 0a 2a 2a 20 63 6f 6d 70 61 72 69 73 6f 6e 20  e.** comparison 
134f0 6f 66 20 74 68 65 20 74 77 6f 20 69 6e 64 65 78  of the two index
13500 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74   keys..**.** Not
13510 65 20 74 68 61 74 20 61 53 6f 72 74 4f 72 64 65  e that aSortOrde
13520 72 5b 5d 20 61 6e 64 20 61 43 6f 6c 6c 5b 5d 20  r[] and aColl[] 
13530 68 61 76 65 20 6e 46 69 65 6c 64 2b 31 20 73 6c  have nField+1 sl
13540 6f 74 73 2e 20 20 54 68 65 72 65 0a 2a 2a 20 61  ots.  There.** a
13550 72 65 20 6e 46 69 65 6c 64 20 73 6c 6f 74 73 20  re nField slots 
13560 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20  for the columns 
13570 6f 66 20 61 6e 20 69 6e 64 65 78 20 74 68 65 6e  of an index then
13580 20 6f 6e 65 20 65 78 74 72 61 20 73 6c 6f 74 0a   one extra slot.
13590 2a 2a 20 66 6f 72 20 74 68 65 20 72 6f 77 69 64  ** for the rowid
135a0 20 61 74 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a   at the end..*/.
135b0 73 74 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 7b  struct KeyInfo {
135c0 0a 20 20 75 33 32 20 6e 52 65 66 3b 20 20 20 20  .  u32 nRef;    
135d0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
135e0 20 6f 66 20 72 65 66 65 72 65 6e 63 65 73 20 74   of references t
135f0 6f 20 74 68 69 73 20 4b 65 79 49 6e 66 6f 20 6f  o this KeyInfo o
13600 62 6a 65 63 74 20 2a 2f 0a 20 20 75 38 20 65 6e  bject */.  u8 en
13610 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  c;             /
13620 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
13630 2d 20 6f 6e 65 20 6f 66 20 74 68 65 20 53 51 4c  - one of the SQL
13640 49 54 45 5f 55 54 46 2a 20 76 61 6c 75 65 73 20  ITE_UTF* values 
13650 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64 3b  */.  u16 nField;
13660 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13670 65 72 20 6f 66 20 6b 65 79 20 63 6f 6c 75 6d 6e  er of key column
13680 73 20 69 6e 20 74 68 65 20 69 6e 64 65 78 20 2a  s in the index *
13690 2f 0a 20 20 75 31 36 20 6e 58 46 69 65 6c 64 3b  /.  u16 nXField;
136a0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
136b0 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 62 65 79  r of columns bey
136c0 6f 6e 64 20 74 68 65 20 6b 65 79 20 63 6f 6c 75  ond the key colu
136d0 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  mns */.  sqlite3
136e0 20 2a 64 62 3b 20 20 20 20 20 20 20 20 2f 2a 20   *db;        /* 
136f0 54 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  The database con
13700 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20  nection */.  u8 
13710 2a 61 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20  *aSortOrder;    
13720 20 2f 2a 20 53 6f 72 74 20 6f 72 64 65 72 20 66   /* Sort order f
13730 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 2e 20  or each column. 
13740 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71 20 2a 61 43  */.  CollSeq *aC
13750 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20 43 6f 6c 6c  oll[1];  /* Coll
13760 61 74 69 6e 67 20 73 65 71 75 65 6e 63 65 20 66  ating sequence f
13770 6f 72 20 65 61 63 68 20 74 65 72 6d 20 6f 66 20  or each term of 
13780 74 68 65 20 6b 65 79 20 2a 2f 0a 7d 3b 0a 0a 2f  the key */.};../
13790 2a 0a 2a 2a 20 54 68 69 73 20 6f 62 6a 65 63 74  *.** This object
137a0 20 68 6f 6c 64 73 20 61 20 72 65 63 6f 72 64 20   holds a record 
137b0 77 68 69 63 68 20 68 61 73 20 62 65 65 6e 20 70  which has been p
137c0 61 72 73 65 64 20 6f 75 74 20 69 6e 74 6f 20 69  arsed out into i
137d0 6e 64 69 76 69 64 75 61 6c 0a 2a 2a 20 66 69 65  ndividual.** fie
137e0 6c 64 73 2c 20 66 6f 72 20 74 68 65 20 70 75 72  lds, for the pur
137f0 70 6f 73 65 73 20 6f 66 20 64 6f 69 6e 67 20 61  poses of doing a
13800 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 0a 2a 2a 0a   comparison..**.
13810 2a 2a 20 41 20 72 65 63 6f 72 64 20 69 73 20 61  ** A record is a
13820 6e 20 6f 62 6a 65 63 74 20 74 68 61 74 20 63 6f  n object that co
13830 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f  ntains one or mo
13840 72 65 20 66 69 65 6c 64 73 20 6f 66 20 64 61 74  re fields of dat
13850 61 2e 0a 2a 2a 20 52 65 63 6f 72 64 73 20 61 72  a..** Records ar
13860 65 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65 20  e used to store 
13870 74 68 65 20 63 6f 6e 74 65 6e 74 20 6f 66 20 61  the content of a
13880 20 74 61 62 6c 65 20 72 6f 77 20 61 6e 64 20 74   table row and t
13890 6f 20 73 74 6f 72 65 0a 2a 2a 20 74 68 65 20 6b  o store.** the k
138a0 65 79 20 6f 66 20 61 6e 20 69 6e 64 65 78 2e 20  ey of an index. 
138b0 20 41 20 62 6c 6f 62 20 65 6e 63 6f 64 69 6e 67   A blob encoding
138c0 20 6f 66 20 61 20 72 65 63 6f 72 64 20 69 73 20   of a record is 
138d0 63 72 65 61 74 65 64 20 62 79 0a 2a 2a 20 74 68  created by.** th
138e0 65 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 20  e OP_MakeRecord 
138f0 6f 70 63 6f 64 65 20 6f 66 20 74 68 65 20 56 44  opcode of the VD
13900 42 45 20 61 6e 64 20 69 73 20 64 69 73 61 73 73  BE and is disass
13910 65 6d 62 6c 65 64 20 62 79 20 74 68 65 0a 2a 2a  embled by the.**
13920 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 70 63 6f 64   OP_Column opcod
13930 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  e..**.** An inst
13940 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f 62 6a  ance of this obj
13950 65 63 74 20 73 65 72 76 65 73 20 61 73 20 61 20  ect serves as a 
13960 22 6b 65 79 22 20 66 6f 72 20 64 6f 69 6e 67 20  "key" for doing 
13970 61 20 73 65 61 72 63 68 20 6f 6e 0a 2a 2a 20 61  a search on.** a
13980 6e 20 69 6e 64 65 78 20 62 2b 74 72 65 65 2e 20  n index b+tree. 
13990 54 68 65 20 67 6f 61 6c 20 6f 66 20 74 68 65 20  The goal of the 
139a0 73 65 61 72 63 68 20 69 73 20 74 6f 20 66 69 6e  search is to fin
139b0 64 20 74 68 65 20 65 6e 74 72 79 20 74 68 61 74  d the entry that
139c0 0a 2a 2a 20 69 73 20 63 6c 6f 73 65 64 20 74 6f  .** is closed to
139d0 20 74 68 65 20 6b 65 79 20 64 65 73 63 72 69 62   the key describ
139e0 65 64 20 62 79 20 74 68 69 73 20 6f 62 6a 65 63  ed by this objec
139f0 74 2e 20 20 54 68 69 73 20 6f 62 6a 65 63 74 20  t.  This object 
13a00 6d 69 67 68 74 20 68 6f 6c 64 0a 2a 2a 20 6a 75  might hold.** ju
13a10 73 74 20 61 20 70 72 65 66 69 78 20 6f 66 20 74  st a prefix of t
13a20 68 65 20 6b 65 79 2e 20 20 54 68 65 20 6e 75 6d  he key.  The num
13a30 62 65 72 20 6f 66 20 66 69 65 6c 64 73 20 69 73  ber of fields is
13a40 20 67 69 76 65 6e 20 62 79 0a 2a 2a 20 70 4b 65   given by.** pKe
13a50 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c 64 2e 0a 2a  yInfo->nField..*
13a60 2a 0a 2a 2a 20 54 68 65 20 72 31 20 61 6e 64 20  *.** The r1 and 
13a70 72 32 20 66 69 65 6c 64 73 20 61 72 65 20 74 68  r2 fields are th
13a80 65 20 76 61 6c 75 65 73 20 74 6f 20 72 65 74 75  e values to retu
13a90 72 6e 20 69 66 20 74 68 69 73 20 6b 65 79 20 69  rn if this key i
13aa0 73 20 6c 65 73 73 20 74 68 61 6e 0a 2a 2a 20 6f  s less than.** o
13ab0 72 20 67 72 65 61 74 65 72 20 74 68 61 6e 20 61  r greater than a
13ac0 20 6b 65 79 20 69 6e 20 74 68 65 20 62 74 72 65   key in the btre
13ad0 65 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e  e, respectively.
13ae0 20 20 54 68 65 73 65 20 61 72 65 20 6e 6f 72 6d    These are norm
13af0 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61 6e 64 20 2b  ally.** -1 and +
13b00 31 20 72 65 73 70 65 63 74 69 76 65 6c 79 2c 20  1 respectively, 
13b10 62 75 74 20 6d 69 67 68 74 20 62 65 20 69 6e 76  but might be inv
13b20 65 72 74 65 64 20 74 6f 20 2b 31 20 61 6e 64 20  erted to +1 and 
13b30 2d 31 20 69 66 20 74 68 65 20 62 2d 74 72 65 65  -1 if the b-tree
13b40 0a 2a 2a 20 69 73 20 69 6e 20 44 45 53 43 20 6f  .** is in DESC o
13b50 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  rder..**.** The 
13b60 6b 65 79 20 63 6f 6d 70 61 72 69 73 6f 6e 20 66  key comparison f
13b70 75 6e 63 74 69 6f 6e 73 20 61 63 74 75 61 6c 6c  unctions actuall
13b80 79 20 72 65 74 75 72 6e 20 64 65 66 61 75 6c 74  y return default
13b90 5f 72 63 20 77 68 65 6e 20 74 68 65 79 20 66 69  _rc when they fi
13ba0 6e 64 0a 2a 2a 20 61 6e 20 65 71 75 61 6c 73 20  nd.** an equals 
13bb0 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 64 65 66  comparison.  def
13bc0 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 2d  ault_rc can be -
13bd0 31 2c 20 30 2c 20 6f 72 20 2b 31 2e 20 20 49 66  1, 0, or +1.  If
13be0 20 74 68 65 72 65 20 61 72 65 0a 2a 2a 20 6d 75   there are.** mu
13bf0 6c 74 69 70 6c 65 20 65 6e 74 72 69 65 73 20 69  ltiple entries i
13c00 6e 20 74 68 65 20 62 2d 74 72 65 65 20 77 69 74  n the b-tree wit
13c10 68 20 74 68 65 20 73 61 6d 65 20 6b 65 79 20 28  h the same key (
13c20 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f 6f 6b 69 6e  when only lookin
13c30 67 0a 2a 2a 20 61 74 20 74 68 65 20 66 69 72 73  g.** at the firs
13c40 74 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65  t pKeyInfo->nFie
13c50 6c 64 73 2c 29 20 74 68 65 6e 20 64 65 66 61 75  lds,) then defau
13c60 6c 74 5f 72 63 20 63 61 6e 20 62 65 20 73 65 74  lt_rc can be set
13c70 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a 20 63 61 75   to -1 to.** cau
13c80 73 65 20 74 68 65 20 73 65 61 72 63 68 20 74 6f  se the search to
13c90 20 66 69 6e 64 20 74 68 65 20 6c 61 73 74 20 6d   find the last m
13ca0 61 74 63 68 2c 20 6f 72 20 2b 31 20 74 6f 20 63  atch, or +1 to c
13cb0 61 75 73 65 20 74 68 65 20 73 65 61 72 63 68 20  ause the search 
13cc0 74 6f 0a 2a 2a 20 66 69 6e 64 20 74 68 65 20 66  to.** find the f
13cd0 69 72 73 74 20 6d 61 74 63 68 2e 0a 2a 2a 0a 2a  irst match..**.*
13ce0 2a 20 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72  * The key compar
13cf0 69 73 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 77  ison functions w
13d00 69 6c 6c 20 73 65 74 20 65 71 53 65 65 6e 20 74  ill set eqSeen t
13d10 6f 20 74 72 75 65 20 69 66 20 74 68 65 79 20 65  o true if they e
13d20 76 65 72 0a 2a 2a 20 67 65 74 20 61 6e 64 20 65  ver.** get and e
13d30 71 75 61 6c 20 72 65 73 75 6c 74 73 20 77 68 65  qual results whe
13d40 6e 20 63 6f 6d 70 61 72 69 6e 67 20 74 68 69 73  n comparing this
13d50 20 73 74 72 75 63 74 75 72 65 20 74 6f 20 61 20   structure to a 
13d60 62 2d 74 72 65 65 20 72 65 63 6f 72 64 2e 0a 2a  b-tree record..*
13d70 2a 20 57 68 65 6e 20 64 65 66 61 75 6c 74 5f 72  * When default_r
13d80 63 21 3d 30 2c 20 74 68 65 20 73 65 61 72 63 68  c!=0, the search
13d90 20 6d 69 67 68 74 20 65 6e 64 20 75 70 20 6f 6e   might end up on
13da0 20 74 68 65 20 72 65 63 6f 72 64 20 69 6d 6d 65   the record imme
13db0 64 69 61 74 65 6c 79 0a 2a 2a 20 62 65 66 6f 72  diately.** befor
13dc0 65 20 74 68 65 20 66 69 72 73 74 20 6d 61 74 63  e the first matc
13dd0 68 20 6f 72 20 69 6d 6d 65 64 69 61 74 65 6c 79  h or immediately
13de0 20 61 66 74 65 72 20 74 68 65 20 6c 61 73 74 20   after the last 
13df0 6d 61 74 63 68 2e 20 20 54 68 65 0a 2a 2a 20 65  match.  The.** e
13e00 71 53 65 65 6e 20 66 69 65 6c 64 20 77 69 6c 6c  qSeen field will
13e10 20 69 6e 64 69 63 61 74 65 20 77 68 65 74 68 65   indicate whethe
13e20 72 20 6f 72 20 6e 6f 74 20 61 6e 20 65 78 61 63  r or not an exac
13e30 74 20 6d 61 74 63 68 20 65 78 69 73 74 73 20 69  t match exists i
13e40 6e 20 74 68 65 0a 2a 2a 20 62 2d 74 72 65 65 2e  n the.** b-tree.
13e50 0a 2a 2f 0a 73 74 72 75 63 74 20 55 6e 70 61 63  .*/.struct Unpac
13e60 6b 65 64 52 65 63 6f 72 64 20 7b 0a 20 20 4b 65  kedRecord {.  Ke
13e70 79 49 6e 66 6f 20 2a 70 4b 65 79 49 6e 66 6f 3b  yInfo *pKeyInfo;
13e80 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6f 6e 20 61    /* Collation a
13e90 6e 64 20 73 6f 72 74 2d 6f 72 64 65 72 20 69 6e  nd sort-order in
13ea0 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f 0a 20 20 4d  formation */.  M
13eb0 65 6d 20 2a 61 4d 65 6d 3b 20 20 20 20 20 20 20  em *aMem;       
13ec0 20 20 20 2f 2a 20 56 61 6c 75 65 73 20 2a 2f 0a     /* Values */.
13ed0 20 20 75 31 36 20 6e 46 69 65 6c 64 3b 20 20 20    u16 nField;   
13ee0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
13ef0 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 61 70  of entries in ap
13f00 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69 38 20 64 65  Mem[] */.  i8 de
13f10 66 61 75 6c 74 5f 72 63 3b 20 20 20 20 20 20 2f  fault_rc;      /
13f20 2a 20 43 6f 6d 70 61 72 69 73 6f 6e 20 72 65 73  * Comparison res
13f30 75 6c 74 20 69 66 20 6b 65 79 73 20 61 72 65 20  ult if keys are 
13f40 65 71 75 61 6c 20 2a 2f 0a 20 20 75 38 20 65 72  equal */.  u8 er
13f50 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20 2f  rCode;         /
13f60 2a 20 45 72 72 6f 72 20 64 65 74 65 63 74 65 64  * Error detected
13f70 20 62 79 20 78 52 65 63 6f 72 64 43 6f 6d 70 61   by xRecordCompa
13f80 72 65 20 28 43 4f 52 52 55 50 54 20 6f 72 20 4e  re (CORRUPT or N
13f90 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69 38 20 72 31  OMEM) */.  i8 r1
13fa0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
13fb0 2a 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72  * Value to retur
13fc0 6e 20 69 66 20 28 6c 68 73 20 3e 20 72 68 73 29  n if (lhs > rhs)
13fd0 20 2a 2f 0a 20 20 69 38 20 72 32 3b 20 20 20 20   */.  i8 r2;    
13fe0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c            /* Val
13ff0 75 65 20 74 6f 20 72 65 74 75 72 6e 20 69 66 20  ue to return if 
14000 28 72 68 73 20 3c 20 6c 68 73 29 20 2a 2f 0a 20  (rhs < lhs) */. 
14010 20 75 38 20 65 71 53 65 65 6e 3b 20 20 20 20 20   u8 eqSeen;     
14020 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20       /* True if 
14030 61 6e 20 65 71 75 61 6c 69 74 79 20 63 6f 6d 70  an equality comp
14040 61 72 69 73 6f 6e 20 68 61 73 20 62 65 65 6e 20  arison has been 
14050 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a 0a 2f 2a 0a  seen */.};.../*.
14060 2a 2a 20 45 61 63 68 20 53 51 4c 20 69 6e 64 65  ** Each SQL inde
14070 78 20 69 73 20 72 65 70 72 65 73 65 6e 74 65 64  x is represented
14080 20 69 6e 20 6d 65 6d 6f 72 79 20 62 79 20 61 6e   in memory by an
14090 0a 2a 2a 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  .** instance of 
140a0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74  the following st
140b0 72 75 63 74 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 54  ructure..**.** T
140c0 68 65 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 74 68  he columns of th
140d0 65 20 74 61 62 6c 65 20 74 68 61 74 20 61 72 65  e table that are
140e0 20 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 61   to be indexed a
140f0 72 65 20 64 65 73 63 72 69 62 65 64 0a 2a 2a 20  re described.** 
14100 62 79 20 74 68 65 20 61 69 43 6f 6c 75 6d 6e 5b  by the aiColumn[
14110 5d 20 66 69 65 6c 64 20 6f 66 20 74 68 69 73 20  ] field of this 
14120 73 74 72 75 63 74 75 72 65 2e 20 20 46 6f 72 20  structure.  For 
14130 65 78 61 6d 70 6c 65 2c 20 73 75 70 70 6f 73 65  example, suppose
14140 0a 2a 2a 20 77 65 20 68 61 76 65 20 74 68 65 20  .** we have the 
14150 66 6f 6c 6c 6f 77 69 6e 67 20 74 61 62 6c 65 20  following table 
14160 61 6e 64 20 69 6e 64 65 78 3a 0a 2a 2a 0a 2a 2a  and index:.**.**
14170 20 20 20 20 20 43 52 45 41 54 45 20 54 41 42 4c       CREATE TABL
14180 45 20 45 78 31 28 63 31 20 69 6e 74 2c 20 63 32  E Ex1(c1 int, c2
14190 20 69 6e 74 2c 20 63 33 20 74 65 78 74 29 3b 0a   int, c3 text);.
141a0 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 49 4e  **     CREATE IN
141b0 44 45 58 20 45 78 32 20 4f 4e 20 45 78 31 28 63  DEX Ex2 ON Ex1(c
141c0 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a 20 49 6e 20  3,c1);.**.** In 
141d0 74 68 65 20 54 61 62 6c 65 20 73 74 72 75 63 74  the Table struct
141e0 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 20 45  ure describing E
141f0 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20 62 65 63 61  x1, nCol==3 beca
14200 75 73 65 20 74 68 65 72 65 20 61 72 65 0a 2a 2a  use there are.**
14210 20 74 68 72 65 65 20 63 6f 6c 75 6d 6e 73 20 69   three columns i
14220 6e 20 74 68 65 20 74 61 62 6c 65 2e 20 20 49 6e  n the table.  In
14230 20 74 68 65 20 49 6e 64 65 78 20 73 74 72 75 63   the Index struc
14240 74 75 72 65 20 64 65 73 63 72 69 62 69 6e 67 0a  ture describing.
14250 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c 75 6d 6e 3d  ** Ex2, nColumn=
14260 3d 32 20 73 69 6e 63 65 20 32 20 6f 66 20 74 68  =2 since 2 of th
14270 65 20 33 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 45  e 3 columns of E
14280 78 31 20 61 72 65 20 69 6e 64 65 78 65 64 2e 0a  x1 are indexed..
14290 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 6f 66 20  ** The value of 
142a0 61 69 43 6f 6c 75 6d 6e 20 69 73 20 7b 32 2c 20  aiColumn is {2, 
142b0 30 7d 2e 20 20 61 69 43 6f 6c 75 6d 6e 5b 30 5d  0}.  aiColumn[0]
142c0 3d 3d 32 20 62 65 63 61 75 73 65 20 74 68 65 0a  ==2 because the.
142d0 2a 2a 20 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20  ** first column 
142e0 74 6f 20 62 65 20 69 6e 64 65 78 65 64 20 28 63  to be indexed (c
142f0 33 29 20 68 61 73 20 61 6e 20 69 6e 64 65 78 20  3) has an index 
14300 6f 66 20 32 20 69 6e 20 45 78 31 2e 61 43 6f 6c  of 2 in Ex1.aCol
14310 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73 65 63 6f 6e  []..** The secon
14320 64 20 63 6f 6c 75 6d 6e 20 74 6f 20 62 65 20 69  d column to be i
14330 6e 64 65 78 65 64 20 28 63 31 29 20 68 61 73 20  ndexed (c1) has 
14340 61 6e 20 69 6e 64 65 78 20 6f 66 20 30 20 69 6e  an index of 0 in
14350 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c 5b 5d 2c 20  .** Ex1.aCol[], 
14360 68 65 6e 63 65 20 45 78 32 2e 61 69 43 6f 6c 75  hence Ex2.aiColu
14370 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a 0a 2a 2a 20  mn[1]==0..**.** 
14380 54 68 65 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f  The Index.onErro
14390 72 20 66 69 65 6c 64 20 64 65 74 65 72 6d 69 6e  r field determin
143a0 65 73 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  es whether or no
143b0 74 20 74 68 65 20 69 6e 64 65 78 65 64 20 63 6f  t the indexed co
143c0 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73 74 20 62 65  lumns.** must be
143d0 20 75 6e 69 71 75 65 20 61 6e 64 20 77 68 61 74   unique and what
143e0 20 74 6f 20 64 6f 20 69 66 20 74 68 65 79 20 61   to do if they a
143f0 72 65 20 6e 6f 74 2e 20 20 57 68 65 6e 20 49 6e  re not.  When In
14400 64 65 78 2e 6f 6e 45 72 72 6f 72 3d 4f 45 5f 4e  dex.onError=OE_N
14410 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d 65 61 6e 73  one,.** it means
14420 20 74 68 69 73 20 69 73 20 6e 6f 74 20 61 20 75   this is not a u
14430 6e 69 71 75 65 20 69 6e 64 65 78 2e 20 20 4f 74  nique index.  Ot
14440 68 65 72 77 69 73 65 20 69 74 20 69 73 20 61 20  herwise it is a 
14450 75 6e 69 71 75 65 20 69 6e 64 65 78 0a 2a 2a 20  unique index.** 
14460 61 6e 64 20 74 68 65 20 76 61 6c 75 65 20 6f 66  and the value of
14470 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 20 69   Index.onError i
14480 6e 64 69 63 61 74 65 20 74 68 65 20 77 68 69 63  ndicate the whic
14490 68 20 63 6f 6e 66 6c 69 63 74 20 72 65 73 6f 6c  h conflict resol
144a0 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67 6f 72 69 74  ution.** algorit
144b0 68 6d 20 74 6f 20 65 6d 70 6c 6f 79 20 77 68 65  hm to employ whe
144c0 6e 65 76 65 72 20 61 6e 20 61 74 74 65 6d 70 74  never an attempt
144d0 20 69 73 20 6d 61 64 65 20 74 6f 20 69 6e 73 65   is made to inse
144e0 72 74 20 61 20 6e 6f 6e 2d 75 6e 69 71 75 65 0a  rt a non-unique.
144f0 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a 2a 2a 0a 2a  ** element..**.*
14500 2a 20 57 68 69 6c 65 20 70 61 72 73 69 6e 67 20  * While parsing 
14510 61 20 43 52 45 41 54 45 20 54 41 42 4c 45 20 6f  a CREATE TABLE o
14520 72 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 73  r CREATE INDEX s
14530 74 61 74 65 6d 65 6e 74 20 69 6e 20 6f 72 64 65  tatement in orde
14540 72 20 74 6f 0a 2a 2a 20 67 65 6e 65 72 61 74 65  r to.** generate
14550 20 56 44 42 45 20 63 6f 64 65 20 28 61 73 20 6f   VDBE code (as o
14560 70 70 6f 73 65 64 20 74 6f 20 70 61 72 73 69 6e  pposed to parsin
14570 67 20 6f 6e 65 20 72 65 61 64 20 66 72 6f 6d 20  g one read from 
14580 61 6e 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  an sqlite_master
14590 0a 2a 2a 20 74 61 62 6c 65 20 61 73 20 70 61 72  .** table as par
145a0 74 20 6f 66 20 70 61 72 73 69 6e 67 20 61 6e 20  t of parsing an 
145b0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
145c0 65 20 73 63 68 65 6d 61 29 2c 20 74 72 61 6e 73  e schema), trans
145d0 69 65 6e 74 20 69 6e 73 74 61 6e 63 65 73 0a 2a  ient instances.*
145e0 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  * of this struct
145f0 75 72 65 20 6d 61 79 20 62 65 20 63 72 65 61 74  ure may be creat
14600 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
14610 20 74 68 65 20 49 6e 64 65 78 2e 74 6e 75 6d 20   the Index.tnum 
14620 76 61 72 69 61 62 6c 65 20 69 73 0a 2a 2a 20 75  variable is.** u
14630 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
14640 20 61 64 64 72 65 73 73 20 6f 66 20 61 20 56 44   address of a VD
14650 42 45 20 69 6e 73 74 72 75 63 74 69 6f 6e 2c 20  BE instruction, 
14660 6e 6f 74 20 61 20 64 61 74 61 62 61 73 65 20 70  not a database p
14670 61 67 65 0a 2a 2a 20 6e 75 6d 62 65 72 20 28 69  age.** number (i
14680 74 20 63 61 6e 6e 6f 74 20 2d 20 74 68 65 20 64  t cannot - the d
14690 61 74 61 62 61 73 65 20 70 61 67 65 20 69 73 20  atabase page is 
146a0 6e 6f 74 20 61 6c 6c 6f 63 61 74 65 64 20 75 6e  not allocated un
146b0 74 69 6c 20 74 68 65 20 56 44 42 45 0a 2a 2a 20  til the VDBE.** 
146c0 70 72 6f 67 72 61 6d 20 69 73 20 65 78 65 63 75  program is execu
146d0 74 65 64 29 2e 20 53 65 65 20 63 6f 6e 76 65 72  ted). See conver
146e0 74 54 6f 57 69 74 68 6f 75 74 52 6f 77 69 64 54  tToWithoutRowidT
146f0 61 62 6c 65 28 29 20 66 6f 72 20 64 65 74 61 69  able() for detai
14700 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e  ls..*/.struct In
14710 64 65 78 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  dex {.  char *zN
14720 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
14730 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68 69 73   /* Name of this
14740 20 69 6e 64 65 78 20 2a 2f 0a 20 20 69 31 36 20   index */.  i16 
14750 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20  *aiColumn;      
14760 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 63 6f       /* Which co
14770 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64 20 62  lumns are used b
14780 79 20 74 68 69 73 20 69 6e 64 65 78 2e 20 20 31  y this index.  1
14790 73 74 20 69 73 20 30 20 2a 2f 0a 20 20 4c 6f 67  st is 0 */.  Log
147a0 45 73 74 20 2a 61 69 52 6f 77 4c 6f 67 45 73 74  Est *aiRowLogEst
147b0 3b 20 20 20 20 20 2f 2a 20 46 72 6f 6d 20 41 4e  ;     /* From AN
147c0 41 4c 59 5a 45 3a 20 45 73 74 2e 20 72 6f 77 73  ALYZE: Est. rows
147d0 20 73 65 6c 65 63 74 65 64 20 62 79 20 65 61 63   selected by eac
147e0 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 54 61  h column */.  Ta
147f0 62 6c 65 20 2a 70 54 61 62 6c 65 3b 20 20 20 20  ble *pTable;    
14800 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 53 51         /* The SQ
14810 4c 20 74 61 62 6c 65 20 62 65 69 6e 67 20 69 6e  L table being in
14820 64 65 78 65 64 20 2a 2f 0a 20 20 63 68 61 72 20  dexed */.  char 
14830 2a 7a 43 6f 6c 41 66 66 3b 20 20 20 20 20 20 20  *zColAff;       
14840 20 20 20 20 2f 2a 20 53 74 72 69 6e 67 20 64 65      /* String de
14850 66 69 6e 69 6e 67 20 74 68 65 20 61 66 66 69 6e  fining the affin
14860 69 74 79 20 6f 66 20 65 61 63 68 20 63 6f 6c 75  ity of each colu
14870 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a 70  mn */.  Index *p
14880 4e 65 78 74 3b 20 20 20 20 20 20 20 20 20 20 20  Next;           
14890 20 2f 2a 20 54 68 65 20 6e 65 78 74 20 69 6e 64   /* The next ind
148a0 65 78 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ex associated wi
148b0 74 68 20 74 68 65 20 73 61 6d 65 20 74 61 62 6c  th the same tabl
148c0 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
148d0 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 20  Schema;         
148e0 2f 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69  /* Schema contai
148f0 6e 69 6e 67 20 74 68 69 73 20 69 6e 64 65 78 20  ning this index 
14900 2a 2f 0a 20 20 75 38 20 2a 61 53 6f 72 74 4f 72  */.  u8 *aSortOr
14910 64 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  der;          /*
14920 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
14930 3a 20 54 72 75 65 3d 3d 44 45 53 43 2c 20 46 61  : True==DESC, Fa
14940 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a 20 20 63 6f  lse==ASC */.  co
14950 6e 73 74 20 63 68 61 72 20 2a 2a 61 7a 43 6f 6c  nst char **azCol
14960 6c 3b 20 20 20 20 20 2f 2a 20 41 72 72 61 79 20  l;     /* Array 
14970 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e 20 73 65 71  of collation seq
14980 75 65 6e 63 65 20 6e 61 6d 65 73 20 66 6f 72 20  uence names for 
14990 69 6e 64 65 78 20 2a 2f 0a 20 20 45 78 70 72 20  index */.  Expr 
149a0 2a 70 50 61 72 74 49 64 78 57 68 65 72 65 3b 20  *pPartIdxWhere; 
149b0 20 20 20 20 2f 2a 20 57 48 45 52 45 20 63 6c 61      /* WHERE cla
149c0 75 73 65 20 66 6f 72 20 70 61 72 74 69 61 6c 20  use for partial 
149d0 69 6e 64 69 63 65 73 20 2a 2f 0a 20 20 45 78 70  indices */.  Exp
149e0 72 4c 69 73 74 20 2a 61 43 6f 6c 45 78 70 72 3b  rList *aColExpr;
149f0 20 20 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20        /* Column 
14a00 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20  expressions */. 
14a10 20 69 6e 74 20 74 6e 75 6d 3b 20 20 20 20 20 20   int tnum;      
14a20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 42 20            /* DB 
14a30 50 61 67 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20  Page containing 
14a40 72 6f 6f 74 20 6f 66 20 74 68 69 73 20 69 6e 64  root of this ind
14a50 65 78 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 73  ex */.  LogEst s
14a60 7a 49 64 78 52 6f 77 3b 20 20 20 20 20 20 20 20  zIdxRow;        
14a70 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 61 76   /* Estimated av
14a80 65 72 61 67 65 20 72 6f 77 20 73 69 7a 65 20 69  erage row size i
14a90 6e 20 62 79 74 65 73 20 2a 2f 0a 20 20 75 31 36  n bytes */.  u16
14aa0 20 6e 4b 65 79 43 6f 6c 3b 20 20 20 20 20 20 20   nKeyCol;       
14ab0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
14ac0 6f 66 20 63 6f 6c 75 6d 6e 73 20 66 6f 72 6d 69  of columns formi
14ad0 6e 67 20 74 68 65 20 6b 65 79 20 2a 2f 0a 20 20  ng the key */.  
14ae0 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b 20 20 20 20  u16 nColumn;    
14af0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
14b00 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 73 74  er of columns st
14b10 6f 72 65 64 20 69 6e 20 74 68 65 20 69 6e 64 65  ored in the inde
14b20 78 20 2a 2f 0a 20 20 75 38 20 6f 6e 45 72 72 6f  x */.  u8 onErro
14b30 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
14b40 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c 20 4f 45 5f  /* OE_Abort, OE_
14b50 49 67 6e 6f 72 65 2c 20 4f 45 5f 52 65 70 6c 61  Ignore, OE_Repla
14b60 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f 6e 65 20 2a  ce, or OE_None *
14b70 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 64 78  /.  unsigned idx
14b80 54 79 70 65 3a 32 3b 20 20 20 20 20 20 2f 2a 20  Type:2;      /* 
14b90 31 3d 3d 55 4e 49 51 55 45 2c 20 32 3d 3d 50 52  1==UNIQUE, 2==PR
14ba0 49 4d 41 52 59 20 4b 45 59 2c 20 30 3d 3d 43 52  IMARY KEY, 0==CR
14bb0 45 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 20 20  EATE INDEX */.  
14bc0 75 6e 73 69 67 6e 65 64 20 62 55 6e 6f 72 64 65  unsigned bUnorde
14bd0 72 65 64 3a 31 3b 20 20 20 2f 2a 20 55 73 65 20  red:1;   /* Use 
14be0 74 68 69 73 20 69 6e 64 65 78 20 66 6f 72 20 3d  this index for =
14bf0 3d 20 6f 72 20 49 4e 20 71 75 65 72 69 65 73 20  = or IN queries 
14c00 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  only */.  unsign
14c10 65 64 20 75 6e 69 71 4e 6f 74 4e 75 6c 6c 3a 31  ed uniqNotNull:1
14c20 3b 20 20 2f 2a 20 54 72 75 65 20 69 66 20 55 4e  ;  /* True if UN
14c30 49 51 55 45 20 61 6e 64 20 4e 4f 54 20 4e 55 4c  IQUE and NOT NUL
14c40 4c 20 66 6f 72 20 61 6c 6c 20 63 6f 6c 75 6d 6e  L for all column
14c50 73 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  s */.  unsigned 
14c60 69 73 52 65 73 69 7a 65 64 3a 31 3b 20 20 20 20  isResized:1;    
14c70 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73 69 7a  /* True if resiz
14c80 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 29 20 68  eIndexObject() h
14c90 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 2a  as been called *
14ca0 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43  /.  unsigned isC
14cb0 6f 76 65 72 69 6e 67 3a 31 3b 20 20 20 2f 2a 20  overing:1;   /* 
14cc0 54 72 75 65 20 69 66 20 74 68 69 73 20 69 73 20  True if this is 
14cd0 61 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 65 78  a covering index
14ce0 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 6e   */.  unsigned n
14cf0 6f 53 6b 69 70 53 63 61 6e 3a 31 3b 20 20 20 2f  oSkipScan:1;   /
14d00 2a 20 44 6f 20 6e 6f 74 20 74 72 79 20 74 6f 20  * Do not try to 
14d10 75 73 65 20 73 6b 69 70 2d 73 63 61 6e 20 69 66  use skip-scan if
14d20 20 74 72 75 65 20 2a 2f 0a 23 69 66 64 65 66 20   true */.#ifdef 
14d30 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54  SQLITE_ENABLE_ST
14d40 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69  AT3_OR_STAT4.  i
14d50 6e 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20  nt nSample;     
14d60 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
14d70 72 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e  r of elements in
14d80 20 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20   aSample[] */.  
14d90 69 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20  int nSampleCol; 
14da0 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65           /* Size
14db0 20 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e   of IndexSample.
14dc0 61 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e  anEq[] and so on
14dd0 20 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61   */.  tRowcnt *a
14de0 41 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f  AvgEq;         /
14df0 2a 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61  * Average nEq va
14e00 6c 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f  lues for keys no
14e10 74 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a  t in aSample */.
14e20 20 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61    IndexSample *a
14e30 53 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61  Sample;    /* Sa
14e40 6d 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66  mples of the lef
14e50 74 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20  t-most key */.  
14e60 74 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73  tRowcnt *aiRowEs
14e70 74 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d  t;       /* Non-
14e80 6c 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74  logarithmic stat
14e90 31 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20  1 data for this 
14ea0 69 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63  index */.  tRowc
14eb0 6e 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20  nt nRowEst0;    
14ec0 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72      /* Non-logar
14ed0 69 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66  ithmic number of
14ee0 20 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64   rows in the ind
14ef0 65 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a  ex */.#endif.};.
14f00 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76  ./*.** Allowed v
14f10 61 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e  alues for Index.
14f20 69 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69  idxType.*/.#defi
14f30 6e 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50  ne SQLITE_IDXTYP
14f40 45 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20  E_APPDEF      0 
14f50 20 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69    /* Created usi
14f60 6e 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20  ng CREATE INDEX 
14f70 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
14f80 45 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45  E_IDXTYPE_UNIQUE
14f90 20 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70        1   /* Imp
14fa0 6c 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45  lements a UNIQUE
14fb0 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
14fc0 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44  define SQLITE_ID
14fd0 58 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59  XTYPE_PRIMARYKEY
14fe0 20 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20    2   /* Is the 
14ff0 50 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20  PRIMARY KEY for 
15000 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a  the table */../*
15010 20 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20   Return true if 
15020 69 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49  index X is a PRI
15030 4d 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a  MARY KEY index *
15040 2f 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d  /.#define IsPrim
15050 61 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20  aryKeyIndex(X)  
15060 28 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53  ((X)->idxType==S
15070 51 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52  QLITE_IDXTYPE_PR
15080 49 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65  IMARYKEY)../* Re
15090 74 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64  turn true if ind
150a0 65 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45  ex X is a UNIQUE
150b0 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
150c0 65 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  e IsUniqueIndex(
150d0 58 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e  X)      ((X)->on
150e0 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a  Error!=OE_None).
150f0 0a 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69  ./* The Index.ai
15100 43 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20  Column[] values 
15110 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73  are normally pos
15120 69 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20  itive integer.  
15130 42 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65  But.** there are
15140 20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76   some negative v
15150 61 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20  alues that have 
15160 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a  special meaning:
15170 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52  .*/.#define XN_R
15180 4f 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20  OWID     (-1)   
15190 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
151a0 75 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64  umn is the rowid
151b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45   */.#define XN_E
151c0 58 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20  XPR      (-2)   
151d0 20 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c    /* Indexed col
151e0 75 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73  umn is an expres
151f0 73 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45  sion */../*.** E
15200 61 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65  ach sample store
15210 64 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f  d in the sqlite_
15220 73 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72  stat3 table is r
15230 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
15240 6d 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20  mory.** using a 
15250 73 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69  structure of thi
15260 73 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63  s type.  See doc
15270 75 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68  umentation at th
15280 65 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20  e top of the.** 
15290 61 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65  analyze.c source
152a0 20 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69   file for additi
152b0 6f 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  onal information
152c0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65  ..*/.struct Inde
152d0 78 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64  xSample {.  void
152e0 20 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a   *p;          /*
152f0 20 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70   Pointer to samp
15300 6c 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20  led record */.  
15310 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20  int n;          
15320 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63    /* Size of rec
15330 6f 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  ord in bytes */.
15340 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b    tRowcnt *anEq;
15350 20 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62      /* Est. numb
15360 65 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65  er of rows where
15370 20 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20   the key equals 
15380 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
15390 20 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20   tRowcnt *anLt; 
153a0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
153b0 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
153c0 6b 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e  key is less than
153d0 20 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a   this sample */.
153e0 20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74    tRowcnt *anDLt
153f0 3b 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62  ;   /* Est. numb
15400 65 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b  er of distinct k
15410 65 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68  eys less than th
15420 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a  is sample */.};.
15430 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65  ./*.** Each toke
15440 6e 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20  n coming out of 
15450 74 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20  the lexer is an 
15460 69 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74  instance of.** t
15470 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
15480 54 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20  Tokens are also 
15490 75 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20  used as part of 
154a0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  an expression..*
154b0 2a 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b  *.** Note if Tok
154c0 65 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b  en.z==0 then Tok
154d0 65 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e  en.dyn and Token
154e0 2e 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64  .n are undefined
154f0 20 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74   and.** may cont
15500 61 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65  ain random value
15510 73 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20  s.  Do not make 
15520 61 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20  any assumptions 
15530 61 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a  about Token.dyn.
15540 2a 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77  ** and Token.n w
15550 68 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a  hen Token.z==0..
15560 2a 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20  */.struct Token 
15570 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
15580 7a 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f  z;     /* Text o
15590 66 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f  f the token.  No
155a0 74 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65  t NULL-terminate
155b0 64 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  d! */.  unsigned
155c0 20 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75   int n;    /* Nu
155d0 6d 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65  mber of characte
155e0 72 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e  rs in this token
155f0 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e   */.};../*.** An
15600 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69   instance of thi
15610 73 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74  s structure cont
15620 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ains information
15630 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
15640 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
15650 61 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f  a SELECT that co
15660 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65  ntains aggregate
15670 20 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a   functions..**.*
15680 2a 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b  * If Expr.op==TK
15690 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54  _AGG_COLUMN or T
156a0 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74  K_AGG_FUNCTION t
156b0 68 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66  hen Expr.pAggInf
156c0 6f 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65  o is a.** pointe
156d0 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74  r to this struct
156e0 75 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69  ure.  The Expr.i
156f0 43 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20  Column field is 
15700 74 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20  the index in.** 
15710 41 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f  AggInfo.aCol[] o
15720 72 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b  r AggInfo.aFunc[
15730 5d 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ] of information
15740 20 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72   needed to gener
15750 61 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20  ate.** code for 
15760 74 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a  that node..**.**
15770 20 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42   AggInfo.pGroupB
15780 79 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46  y and AggInfo.aF
15790 75 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20  unc.pExpr point 
157a0 74 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e  to fields within
157b0 20 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c   the.** original
157c0 20 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72   Select structur
157d0 65 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73  e that describes
157e0 20 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74   the SELECT stat
157f0 65 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a  ement.  These.**
15800 20 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e   fields do not n
15810 65 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20  eed to be freed 
15820 77 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e  when deallocatin
15830 67 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74  g the AggInfo st
15840 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75  ructure..*/.stru
15850 63 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75  ct AggInfo {.  u
15860 38 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20  8 directMode;   
15870 20 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74         /* Direct
15880 20 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20   rendering mode 
15890 6d 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20  means take data 
158a0 64 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20  directly.       
158b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
158c0 20 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63     ** from sourc
158d0 65 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20  e tables rather 
158e0 74 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75  than from accumu
158f0 6c 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75  lators */.  u8 u
15900 73 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20  seSortingIdx;   
15910 20 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74      /* In direct
15920 20 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65   mode, reference
15930 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
15940 65 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20  ex rather.      
15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15960 20 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20      ** than the 
15970 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
15980 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78    int sortingIdx
15990 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72  ;         /* Cur
159a0 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68  sor number of th
159b0 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20  e sorting index 
159c0 2a 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67  */.  int sorting
159d0 49 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20  IdxPTab;     /* 
159e0 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66  Cursor number of
159f0 20 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f   pseudo-table */
15a00 0a 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43  .  int nSortingC
15a10 6f 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75  olumn;     /* Nu
15a20 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20  mber of columns 
15a30 69 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69  in the sorting i
15a40 6e 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e  ndex */.  int mn
15a50 52 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20  Reg, mxReg;     
15a60 20 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65    /* Range of re
15a70 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65  gisters allocate
15a80 64 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61  d for aCol and a
15a90 46 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69  Func */.  ExprLi
15aa0 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20  st *pGroupBy;   
15ab0 20 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62    /* The group b
15ac0 79 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74  y clause */.  st
15ad0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c  ruct AggInfo_col
15ae0 20 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63   {    /* For eac
15af0 68 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e  h column used in
15b00 20 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a   source tables *
15b10 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  /.    Table *pTa
15b20 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  b;             /
15b30 2a 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a  * Source table *
15b40 2f 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  /.    int iTable
15b50 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
15b60 2a 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20  * Cursor number 
15b70 6f 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61  of the source ta
15b80 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
15b90 43 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20  Column;         
15ba0 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75      /* Column nu
15bb0 6d 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20  mber within the 
15bc0 73 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a  source table */.
15bd0 20 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43      int iSorterC
15be0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20  olumn;       /* 
15bf0 43 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e  Column number in
15c00 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64   the sorting ind
15c10 65 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d  ex */.    int iM
15c20 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  em;             
15c30 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63     /* Memory loc
15c40 61 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20  ation that acts 
15c50 61 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a  as accumulator *
15c60 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70  /.    Expr *pExp
15c70 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
15c80 2a 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65  * The original e
15c90 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d  xpression */.  }
15ca0 20 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43   *aCol;.  int nC
15cb0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
15cc0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75    /* Number of u
15cd0 73 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61  sed entries in a
15ce0 43 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e  Col[] */.  int n
15cf0 41 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20  Accumulator;    
15d00 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15d10 63 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f  columns that sho
15d20 77 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65  w through to the
15d30 20 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20   output..       
15d40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15d50 20 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c     ** Additional
15d60 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65   columns are use
15d70 64 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65  d only as parame
15d80 74 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20  ters to.        
15d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15da0 20 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66    ** aggregate f
15db0 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74  unctions */.  st
15dc0 72 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e  ruct AggInfo_fun
15dd0 63 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63  c {   /* For eac
15de0 68 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  h aggregate func
15df0 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  tion */.    Expr
15e00 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
15e10 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69       /* Expressi
15e20 6f 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20  on encoding the 
15e30 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  function */.    
15e40 46 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20  FuncDef *pFunc; 
15e50 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
15e60 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
15e70 6f 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  on implementatio
15e80 6e 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  n */.    int iMe
15e90 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
15ea0 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
15eb0 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
15ec0 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
15ed0 0a 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e  .    int iDistin
15ee0 63 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ct;           /*
15ef0 20 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65   Ephemeral table
15f00 20 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65   used to enforce
15f10 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d   DISTINCT */.  }
15f20 20 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e   *aFunc;.  int n
15f30 46 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20  Func;           
15f40 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
15f50 65 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63  entries in aFunc
15f60 5b 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  [] */.};../*.** 
15f70 54 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56  The datatype ynV
15f80 61 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69  ar is a signed i
15f90 6e 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31  nteger, either 1
15fa0 36 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e  6-bit or 32-bit.
15fb0 0a 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69  .** Usually it i
15fc0 73 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20  s 16-bits.  But 
15fd0 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41  if SQLITE_MAX_VA
15fe0 52 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73  RIABLE_NUMBER is
15ff0 20 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e   greater.** than
16000 20 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74   32767 we have t
16010 6f 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74  o make it 32-bit
16020 2e 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65  .  16-bit is pre
16030 66 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a  ferred because.*
16040 2a 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d  * it uses less m
16050 65 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70  emory in the Exp
16060 72 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20  r object, which 
16070 69 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20  is a big memory 
16080 75 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65  user.** in syste
16090 6d 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20  ms with lots of 
160a0 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
160b0 6e 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70  nts.  And few ap
160c0 70 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65  plications.** ne
160d0 65 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f  ed more than abo
160e0 75 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69  ut 10 or 20 vari
160f0 61 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65  ables.  But some
16100 20 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77   extreme users w
16110 61 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70  ant.** to have p
16120 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
16130 74 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37  ts with over 327
16140 36 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e  67 variables, an
16150 64 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68  d for them.** th
16160 65 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69  e option is avai
16170 6c 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c  lable (at compil
16180 65 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20  e-time)..*/.#if 
16190 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41  SQLITE_MAX_VARIA
161a0 42 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36  BLE_NUMBER<=3276
161b0 37 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e  7.typedef i16 yn
161c0 56 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64  Var;.#else.typed
161d0 65 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65  ef int ynVar;.#e
161e0 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68  ndif../*.** Each
161f0 20 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72   node of an expr
16200 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61  ession in the pa
16210 72 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69  rse tree is an i
16220 6e 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68  nstance.** of th
16230 69 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a  is structure..**
16240 0a 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74  .** Expr.op is t
16250 68 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69  he opcode. The i
16260 6e 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f  nteger parser to
16270 6b 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65  ken codes are re
16280 75 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64  used.** as opcod
16290 65 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61  es here. For exa
162a0 6d 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72  mple, the parser
162b0 20 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74   defines TK_GE t
162c0 6f 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a  o be an integer.
162d0 2a 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e  ** code represen
162e0 74 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70  ting the ">=" op
162f0 65 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d  erator. This sam
16300 65 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69  e integer code i
16310 73 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72  s reused.** to r
16320 65 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65  epresent the gre
16330 61 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75  ater-than-or-equ
16340 61 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69  al-to operator i
16350 6e 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  n the expression
16360 0a 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20  .** tree..**.** 
16370 49 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f  If the expressio
16380 6e 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65  n is an SQL lite
16390 72 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c  ral (TK_INTEGER,
163a0 20 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c   TK_FLOAT, TK_BL
163b0 4f 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52  OB,.** or TK_STR
163c0 49 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e  ING), then Expr.
163d0 74 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74  token contains t
163e0 68 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53  he text of the S
163f0 51 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a  QL literal. If.*
16400 2a 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  * the expression
16410 20 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28   is a variable (
16420 54 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68  TK_VARIABLE), th
16430 65 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f  en Expr.token co
16440 6e 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61  ntains the.** va
16450 72 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e  riable name. Fin
16460 61 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70  ally, if the exp
16470 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
16480 4c 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46  L function (TK_F
16490 55 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65  UNCTION),.** the
164a0 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
164b0 74 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f  tains the name o
164c0 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a  f the function..
164d0 2a 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68  **.** Expr.pRigh
164e0 74 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74  t and Expr.pLeft
164f0 20 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e   are the left an
16500 64 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65  d right subexpre
16510 73 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62  ssions of a.** b
16520 69 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20  inary operator. 
16530 45 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d  Either or both m
16540 61 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a  ay be NULL..**.*
16550 2a 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  * Expr.x.pList i
16560 73 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75  s a list of argu
16570 6d 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70  ments if the exp
16580 72 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51  ression is an SQ
16590 4c 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61  L function,.** a
165a0 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e   CASE expression
165b0 20 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73   or an IN expres
165c0 73 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d  sion of the form
165d0 20 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c   "<lhs> IN (<y>,
165e0 20 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78   <z>...)"..** Ex
165f0 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
16600 75 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72  used if the expr
16610 65 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d  ession is a sub-
16620 73 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70  select or an exp
16630 72 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68  ression of.** th
16640 65 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e  e form "<lhs> IN
16650 20 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20   (SELECT ...)". 
16660 49 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c  If the EP_xIsSel
16670 65 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69  ect bit is set i
16680 6e 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c  n the.** Expr.fl
16690 61 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45  ags mask, then E
166a0 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73  xpr.x.pSelect is
166b0 20 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73   valid. Otherwis
166c0 65 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20  e, Expr.x.pList 
166d0 69 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a  is.** valid..**.
166e0 2a 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e  ** An expression
166f0 20 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20   of the form ID 
16700 6f 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20  or ID.ID refers 
16710 74 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61  to a column in a
16720 20 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73   table..** For s
16730 75 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c  uch expressions,
16740 20 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20   Expr.op is set 
16750 74 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64  to TK_COLUMN and
16760 20 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a   Expr.iTable is.
16770 2a 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63  ** the integer c
16780 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
16790 61 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f  a VDBE cursor po
167a0 69 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74  inting to that t
167b0 61 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72  able and.** Expr
167c0 2e 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20  .iColumn is the 
167d0 63 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f  column number fo
167e0 72 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63  r the specific c
167f0 6f 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a  olumn.  If the.*
16800 2a 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20  * expression is 
16810 75 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74  used as a result
16820 20 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65   in an aggregate
16830 20 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68   SELECT, then th
16840 65 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c  e.** value is al
16850 73 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  so stored in the
16860 20 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d   Expr.iAgg colum
16870 6e 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61  n in the aggrega
16880 74 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74  te so that.** it
16890 20 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64   can be accessed
168a0 20 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65   after all aggre
168b0 67 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74  gates are comput
168c0 65 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  ed..**.** If the
168d0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61   expression is a
168e0 6e 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62  n unbound variab
168f0 6c 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65  le marker (a que
16900 73 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68  stion mark.** ch
16910 61 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74  aracter '?' in t
16920 68 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29  he original SQL)
16930 20 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69   then the Expr.i
16940 54 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20  Table holds the 
16950 69 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20  index.** number 
16960 66 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c  for that variabl
16970 65 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  e..**.** If the 
16980 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20  expression is a 
16990 73 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78  subquery then Ex
169a0 70 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73  pr.iColumn holds
169b0 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72   an integer.** r
169c0 65 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63  egister number c
169d0 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65  ontaining the re
169e0 73 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71  sult of the subq
169f0 75 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a  uery.  If the.**
16a00 20 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20   subquery gives 
16a10 61 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c  a constant resul
16a20 74 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69  t, then iTable i
16a30 73 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75  s -1.  If the su
16a40 62 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20  bquery.** gives 
16a50 61 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77  a different answ
16a60 65 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20  er at different 
16a70 74 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61  times during sta
16a80 74 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e  tement processin
16a90 67 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65  g.** then iTable
16aa0 20 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20   is the address 
16ab0 6f 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20  of a subroutine 
16ac0 74 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68  that computes th
16ad0 65 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a  e subquery..**.*
16ae0 2a 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73  * If the Expr is
16af0 20 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75   of type OP_Colu
16b00 6d 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c  mn, and the tabl
16b10 65 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e  e it is selectin
16b20 67 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64  g from.** is a d
16b30 69 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65  isk table or the
16b40 20 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d   "old.*" pseudo-
16b50 74 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62  table, then pTab
16b60 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
16b70 2a 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  * corresponding 
16b80 74 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e  table definition
16b90 2e 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49  ..**.** ALLOCATI
16ba0 4f 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20  ON NOTES:.**.** 
16bb0 45 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e  Expr objects can
16bc0 20 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65   use a lot of me
16bd0 6d 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61  mory space in da
16be0 74 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20  tabase schema.  
16bf0 54 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63  To.** help reduc
16c00 65 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65  e memory require
16c10 6d 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73  ments, sometimes
16c20 20 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20   an Expr object 
16c30 77 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63  will be.** trunc
16c40 61 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65  ated.  And to re
16c50 64 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20  duce the number 
16c60 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  of memory alloca
16c70 74 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73  tions, sometimes
16c80 0a 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  .** two or more 
16c90 45 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c  Expr objects wil
16ca0 6c 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61  l be stored in a
16cb0 20 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61   single memory a
16cc0 6c 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f  llocation,.** to
16cd0 67 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72  gether with Expr
16ce0 2e 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e  .zToken strings.
16cf0 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50  .**.** If the EP
16d00 5f 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f  _Reduced and EP_
16d10 54 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20  TokenOnly flags 
16d20 61 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20  are set when.** 
16d30 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69  an Expr object i
16d40 73 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68  s truncated.  Wh
16d50 65 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73  en EP_Reduced is
16d60 20 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a   set, then all.*
16d70 2a 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72  * the child Expr
16d80 20 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20   objects in the 
16d90 45 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45  Expr.pLeft and E
16da0 78 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72  xpr.pRight subtr
16db0 65 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61  ees.** are conta
16dc0 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20  ined within the 
16dd0 73 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  same memory allo
16de0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68  cation.  Note, h
16df0 6f 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20  owever, that.** 
16e00 74 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20  the subtrees in 
16e10 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20  Expr.x.pList or 
16e20 45 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61  Expr.x.pSelect a
16e30 72 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61  re always separa
16e40 74 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65  tely.** allocate
16e50 64 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  d, regardless of
16e60 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
16e70 45 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65  EP_Reduced is se
16e80 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70  t..*/.struct Exp
16e90 72 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20  r {.  u8 op;    
16ea0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
16eb0 4f 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72  Operation perfor
16ec0 6d 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65  med by this node
16ed0 20 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e   */.  char affin
16ee0 69 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ity;         /* 
16ef0 54 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20  The affinity of 
16f00 74 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20  the column or 0 
16f10 69 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20  if not a column 
16f20 2a 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20  */.  u32 flags; 
16f30 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56              /* V
16f40 61 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45  arious flags.  E
16f50 50 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  P_* See below */
16f60 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63  .  union {.    c
16f70 68 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20  har *zToken;    
16f80 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76        /* Token v
16f90 61 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69  alue. Zero termi
16fa0 6e 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74  nated and dequot
16fb0 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56  ed */.    int iV
16fc0 61 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20  alue;           
16fd0 20 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65   /* Non-negative
16fe0 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69   integer value i
16ff0 66 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f  f EP_IntValue */
17000 0a 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66  .  } u;..  /* If
17010 20 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c   the EP_TokenOnl
17020 79 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e  y flag is set in
17030 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20   the Expr.flags 
17040 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20  mask, then no.  
17050 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f  ** space is allo
17060 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69  cated for the fi
17070 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20  elds below this 
17080 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70  point. An attemp
17090 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73  t to.  ** access
170a0 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c   them will resul
170b0 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20  t in a segfault 
170c0 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a  or malfunction..
170d0 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a    **************
170e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
170f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17100 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17110 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72  *******/..  Expr
17120 20 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20   *pLeft;        
17130 20 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f     /* Left subno
17140 64 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52  de */.  Expr *pR
17150 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f  ight;          /
17160 2a 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20  * Right subnode 
17170 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20  */.  union {.   
17180 20 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74   ExprList *pList
17190 3b 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e  ;     /* op = IN
171a0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
171b0 2c 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e  , CASE, FUNCTION
171c0 2c 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20  , BETWEEN */.   
171d0 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74   Select *pSelect
171e0 3b 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53  ;     /* EP_xIsS
171f0 65 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49  elect and op = I
17200 4e 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43  N, EXISTS, SELEC
17210 54 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f  T */.  } x;..  /
17220 2a 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75  * If the EP_Redu
17230 63 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20  ced flag is set 
17240 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67  in the Expr.flag
17250 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a  s mask, then no.
17260 20 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c    ** space is al
17270 6c 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20  located for the 
17280 66 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69  fields below thi
17290 73 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65  s point. An atte
172a0 6d 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65  mpt to.  ** acce
172b0 73 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73  ss them will res
172c0 75 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c  ult in a segfaul
172d0 74 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e  t or malfunction
172e0 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..  ************
172f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17300 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17310 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17320 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20  *********/..#if 
17330 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
17340 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48  DEPTH>0.  int nH
17350 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
17360 20 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68   /* Height of th
17370 65 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79  e tree headed by
17380 20 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65   this node */.#e
17390 6e 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c  ndif.  int iTabl
173a0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  e;            /*
173b0 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73   TK_COLUMN: curs
173c0 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62  or number of tab
173d0 6c 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d  le holding colum
173e0 6e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  n.              
173f0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
17400 5f 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73  _REGISTER: regis
17410 74 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20  ter number.     
17420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17430 20 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45      ** TK_TRIGGE
17440 52 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d  R: 1 -> new, 0 -
17450 3e 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20  > old.          
17460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
17470 2a 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20  * EP_Unlikely:  
17480 31 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20  134217728 times 
17490 6c 69 6b 65 6c 69 68 6f 6f 64 20 2a 2f 0a 20 20  likelihood */.  
174a0 79 6e 56 61 72 20 69 43 6f 6c 75 6d 6e 3b 20 20  ynVar iColumn;  
174b0 20 20 20 20 20 20 20 2f 2a 20 54 4b 5f 43 4f 4c         /* TK_COL
174c0 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20 69 6e 64 65  UMN: column inde
174d0 78 2e 20 20 2d 31 20 66 6f 72 20 72 6f 77 69 64  x.  -1 for rowid
174e0 2e 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
174f0 20 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b             ** TK
17500 5f 56 41 52 49 41 42 4c 45 3a 20 76 61 72 69 61  _VARIABLE: varia
17510 62 6c 65 20 6e 75 6d 62 65 72 20 28 61 6c 77 61  ble number (alwa
17520 79 73 20 3e 3d 20 31 29 2e 20 2a 2f 0a 20 20 69  ys >= 1). */.  i
17530 31 36 20 69 41 67 67 3b 20 20 20 20 20 20 20 20  16 iAgg;        
17540 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65        /* Which e
17550 6e 74 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f  ntry in pAggInfo
17560 2d 3e 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46  ->aCol[] or ->aF
17570 75 6e 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69  unc[] */.  i16 i
17580 52 69 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20  RightJoinTable; 
17590 20 20 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a    /* If EP_FromJ
175a0 6f 69 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74  oin, the right t
175b0 61 62 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e  able of the join
175c0 20 2a 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20   */.  u8 op2;   
175d0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
175e0 54 4b 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69  TK_REGISTER: ori
175f0 67 69 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45  ginal value of E
17600 78 70 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20  xpr.op.         
17610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17620 2a 2a 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68  ** TK_COLUMN: th
17630 65 20 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f  e value of p5 fo
17640 72 20 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20  r OP_Column.    
17650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17660 20 20 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46       ** TK_AGG_F
17670 55 4e 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67  UNCTION: nesting
17680 20 64 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49   depth */.  AggI
17690 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20  nfo *pAggInfo;  
176a0 20 20 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b     /* Used by TK
176b0 5f 41 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  _AGG_COLUMN and 
176c0 54 4b 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20  TK_AGG_FUNCTION 
176d0 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62  */.  Table *pTab
176e0 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
176f0 61 62 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55  able for TK_COLU
17700 4d 4e 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20  MN expressions. 
17710 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  */.};../*.** The
17720 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74   following are t
17730 68 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62  he meanings of b
17740 69 74 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e  its in the Expr.
17750 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a  flags field..*/.
17760 23 64 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a  #define EP_FromJ
17770 6f 69 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a  oin  0x000001 /*
17780 20 4f 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f   Originates in O
17790 4e 2f 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f  N/USING clause o
177a0 66 20 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a  f outer join */.
177b0 23 64 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20  #define EP_Agg  
177c0 20 20 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a       0x000002 /*
177d0 20 43 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   Contains one or
177e0 20 6d 6f 72 65 20 61 67 67 72 65 67 61 74 65 20   more aggregate 
177f0 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  functions */.#de
17800 66 69 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64  fine EP_Resolved
17810 20 20 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44    0x000004 /* ID
17820 73 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f  s have been reso
17830 6c 76 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20  lved to COLUMNs 
17840 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 45 72  */.#define EP_Er
17850 72 6f 72 20 20 20 20 20 30 78 30 30 30 30 30 38  ror     0x000008
17860 20 2f 2a 20 45 78 70 72 65 73 73 69 6f 6e 20 63   /* Expression c
17870 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
17880 6f 72 65 20 65 72 72 6f 72 73 20 2a 2f 0a 23 64  ore errors */.#d
17890 65 66 69 6e 65 20 45 50 5f 44 69 73 74 69 6e 63  efine EP_Distinc
178a0 74 20 20 30 78 30 30 30 30 31 30 20 2f 2a 20 41  t  0x000010 /* A
178b0 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
178c0 6e 20 77 69 74 68 20 44 49 53 54 49 4e 43 54 20  n with DISTINCT 
178d0 6b 65 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69  keyword */.#defi
178e0 6e 65 20 45 50 5f 56 61 72 53 65 6c 65 63 74 20  ne EP_VarSelect 
178f0 30 78 30 30 30 30 32 30 20 2f 2a 20 70 53 65 6c  0x000020 /* pSel
17900 65 63 74 20 69 73 20 63 6f 72 72 65 6c 61 74 65  ect is correlate
17910 64 2c 20 6e 6f 74 20 63 6f 6e 73 74 61 6e 74 20  d, not constant 
17920 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 44 62  */.#define EP_Db
17930 6c 51 75 6f 74 65 64 20 30 78 30 30 30 30 34 30  lQuoted 0x000040
17940 20 2f 2a 20 74 6f 6b 65 6e 2e 7a 20 77 61 73 20   /* token.z was 
17950 6f 72 69 67 69 6e 61 6c 6c 79 20 69 6e 20 22 2e  originally in ".
17960 2e 2e 22 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  .." */.#define E
17970 50 5f 49 6e 66 69 78 46 75 6e 63 20 30 78 30 30  P_InfixFunc 0x00
17980 30 30 38 30 20 2f 2a 20 54 72 75 65 20 66 6f 72  0080 /* True for
17990 20 61 6e 20 69 6e 66 69 78 20 66 75 6e 63 74 69   an infix functi
179a0 6f 6e 3a 20 4c 49 4b 45 2c 20 47 4c 4f 42 2c 20  on: LIKE, GLOB, 
179b0 65 74 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  etc */.#define E
179c0 50 5f 43 6f 6c 6c 61 74 65 20 20 20 30 78 30 30  P_Collate   0x00
179d0 30 31 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e  0100 /* Tree con
179e0 74 61 69 6e 73 20 61 20 54 4b 5f 43 4f 4c 4c 41  tains a TK_COLLA
179f0 54 45 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23  TE operator */.#
17a00 64 65 66 69 6e 65 20 45 50 5f 47 65 6e 65 72 69  define EP_Generi
17a10 63 20 20 20 30 78 30 30 30 32 30 30 20 2f 2a 20  c   0x000200 /* 
17a20 49 67 6e 6f 72 65 20 43 4f 4c 4c 41 54 45 20 6f  Ignore COLLATE o
17a30 72 20 61 66 66 69 6e 69 74 79 20 6f 6e 20 74 68  r affinity on th
17a40 69 73 20 74 72 65 65 20 2a 2f 0a 23 64 65 66 69  is tree */.#defi
17a50 6e 65 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 20  ne EP_IntValue  
17a60 30 78 30 30 30 34 30 30 20 2f 2a 20 49 6e 74 65  0x000400 /* Inte
17a70 67 65 72 20 76 61 6c 75 65 20 63 6f 6e 74 61 69  ger value contai
17a80 6e 65 64 20 69 6e 20 75 2e 69 56 61 6c 75 65 20  ned in u.iValue 
17a90 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 78 49  */.#define EP_xI
17aa0 73 53 65 6c 65 63 74 20 30 78 30 30 30 38 30 30  sSelect 0x000800
17ab0 20 2f 2a 20 78 2e 70 53 65 6c 65 63 74 20 69 73   /* x.pSelect is
17ac0 20 76 61 6c 69 64 20 28 6f 74 68 65 72 77 69 73   valid (otherwis
17ad0 65 20 78 2e 70 4c 69 73 74 20 69 73 29 20 2a 2f  e x.pList is) */
17ae0 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 6b 69 70  .#define EP_Skip
17af0 20 20 20 20 20 20 30 78 30 30 31 30 30 30 20 2f        0x001000 /
17b00 2a 20 43 4f 4c 4c 41 54 45 2c 20 41 53 2c 20 6f  * COLLATE, AS, o
17b10 72 20 55 4e 4c 49 4b 45 4c 59 20 2a 2f 0a 23 64  r UNLIKELY */.#d
17b20 65 66 69 6e 65 20 45 50 5f 52 65 64 75 63 65 64  efine EP_Reduced
17b30 20 20 20 30 78 30 30 32 30 30 30 20 2f 2a 20 45     0x002000 /* E
17b40 78 70 72 20 73 74 72 75 63 74 20 45 58 50 52 5f  xpr struct EXPR_
17b50 52 45 44 55 43 45 44 53 49 5a 45 20 62 79 74 65  REDUCEDSIZE byte
17b60 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
17b70 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20 30  e EP_TokenOnly 0
17b80 78 30 30 34 30 30 30 20 2f 2a 20 45 78 70 72 20  x004000 /* Expr 
17b90 73 74 72 75 63 74 20 45 58 50 52 5f 54 4f 4b 45  struct EXPR_TOKE
17ba0 4e 4f 4e 4c 59 53 49 5a 45 20 62 79 74 65 73 20  NONLYSIZE bytes 
17bb0 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20  only */.#define 
17bc0 45 50 5f 53 74 61 74 69 63 20 20 20 20 30 78 30  EP_Static    0x0
17bd0 30 38 30 30 30 20 2f 2a 20 48 65 6c 64 20 69 6e  08000 /* Held in
17be0 20 6d 65 6d 6f 72 79 20 6e 6f 74 20 6f 62 74 61   memory not obta
17bf0 69 6e 65 64 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63  ined from malloc
17c00 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  () */.#define EP
17c10 5f 4d 65 6d 54 6f 6b 65 6e 20 20 30 78 30 31 30  _MemToken  0x010
17c20 30 30 30 20 2f 2a 20 4e 65 65 64 20 74 6f 20 73  000 /* Need to s
17c30 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20 45  qlite3DbFree() E
17c40 78 70 72 2e 7a 54 6f 6b 65 6e 20 2a 2f 0a 23 64  xpr.zToken */.#d
17c50 65 66 69 6e 65 20 45 50 5f 4e 6f 52 65 64 75 63  efine EP_NoReduc
17c60 65 20 20 30 78 30 32 30 30 30 30 20 2f 2a 20 43  e  0x020000 /* C
17c70 61 6e 6e 6f 74 20 45 58 50 52 44 55 50 5f 52 45  annot EXPRDUP_RE
17c80 44 55 43 45 20 74 68 69 73 20 45 78 70 72 20 2a  DUCE this Expr *
17c90 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 55 6e 6c  /.#define EP_Unl
17ca0 69 6b 65 6c 79 20 20 30 78 30 34 30 30 30 30 20  ikely  0x040000 
17cb0 2f 2a 20 75 6e 6c 69 6b 65 6c 79 28 29 20 6f 72  /* unlikely() or
17cc0 20 6c 69 6b 65 6c 69 68 6f 6f 64 28 29 20 66 75   likelihood() fu
17cd0 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
17ce0 65 20 45 50 5f 43 6f 6e 73 74 46 75 6e 63 20 30  e EP_ConstFunc 0
17cf0 78 30 38 30 30 30 30 20 2f 2a 20 41 20 53 51 4c  x080000 /* A SQL
17d00 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
17d10 54 20 6f 72 20 5f 53 4c 4f 43 48 4e 47 20 66 75  T or _SLOCHNG fu
17d20 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e  nction */.#defin
17d30 65 20 45 50 5f 43 61 6e 42 65 4e 75 6c 6c 20 30  e EP_CanBeNull 0
17d40 78 31 30 30 30 30 30 20 2f 2a 20 43 61 6e 20 62  x100000 /* Can b
17d50 65 20 6e 75 6c 6c 20 64 65 73 70 69 74 65 20 4e  e null despite N
17d60 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61 69  OT NULL constrai
17d70 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  nt */.#define EP
17d80 5f 53 75 62 71 75 65 72 79 20 20 30 78 32 30 30  _Subquery  0x200
17d90 30 30 30 20 2f 2a 20 54 72 65 65 20 63 6f 6e 74  000 /* Tree cont
17da0 61 69 6e 73 20 61 20 54 4b 5f 53 45 4c 45 43 54  ains a TK_SELECT
17db0 20 6f 70 65 72 61 74 6f 72 20 2a 2f 0a 23 64 65   operator */.#de
17dc0 66 69 6e 65 20 45 50 5f 41 6c 69 61 73 20 20 20  fine EP_Alias   
17dd0 20 20 30 78 34 30 30 30 30 30 20 2f 2a 20 49 73    0x400000 /* Is
17de0 20 61 6e 20 61 6c 69 61 73 20 66 6f 72 20 61 20   an alias for a 
17df0 72 65 73 75 6c 74 20 73 65 74 20 63 6f 6c 75 6d  result set colum
17e00 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6d 62  n */../*.** Comb
17e10 69 6e 61 74 69 6f 6e 73 20 6f 66 20 74 77 6f 20  inations of two 
17e20 6f 72 20 6d 6f 72 65 20 45 50 5f 2a 20 66 6c 61  or more EP_* fla
17e30 67 73 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  gs.*/.#define EP
17e40 5f 50 72 6f 70 61 67 61 74 65 20 28 45 50 5f 43  _Propagate (EP_C
17e50 6f 6c 6c 61 74 65 7c 45 50 5f 53 75 62 71 75 65  ollate|EP_Subque
17e60 72 79 29 20 2f 2a 20 50 72 6f 70 61 67 61 74 65  ry) /* Propagate
17e70 20 74 68 65 73 65 20 62 69 74 73 20 75 70 20 74   these bits up t
17e80 72 65 65 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68  ree */../*.** Th
17e90 65 73 65 20 6d 61 63 72 6f 73 20 63 61 6e 20 62  ese macros can b
17ea0 65 20 75 73 65 64 20 74 6f 20 74 65 73 74 2c 20  e used to test, 
17eb0 73 65 74 2c 20 6f 72 20 63 6c 65 61 72 20 62 69  set, or clear bi
17ec0 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 45 78 70  ts in the.** Exp
17ed0 72 2e 66 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  r.flags field..*
17ee0 2f 0a 23 64 65 66 69 6e 65 20 45 78 70 72 48 61  /.#define ExprHa
17ef0 73 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  sProperty(E,P)  
17f00 20 20 20 28 28 28 45 29 2d 3e 66 6c 61 67 73 26     (((E)->flags&
17f10 28 50 29 29 21 3d 30 29 0a 23 64 65 66 69 6e 65  (P))!=0).#define
17f20 20 45 78 70 72 48 61 73 41 6c 6c 50 72 6f 70 65   ExprHasAllPrope
17f30 72 74 79 28 45 2c 50 29 20 20 28 28 28 45 29 2d  rty(E,P)  (((E)-
17f40 3e 66 6c 61 67 73 26 28 50 29 29 3d 3d 28 50 29  >flags&(P))==(P)
17f50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 53 65  ).#define ExprSe
17f60 74 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  tProperty(E,P)  
17f70 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 7c 3d 28     (E)->flags|=(
17f80 50 29 0a 23 64 65 66 69 6e 65 20 45 78 70 72 43  P).#define ExprC
17f90 6c 65 61 72 50 72 6f 70 65 72 74 79 28 45 2c 50  learProperty(E,P
17fa0 29 20 20 20 28 45 29 2d 3e 66 6c 61 67 73 26 3d  )   (E)->flags&=
17fb0 7e 28 50 29 0a 0a 2f 2a 20 54 68 65 20 45 78 70  ~(P)../* The Exp
17fc0 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
17fd0 29 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20  ) macro is used 
17fe0 66 6f 72 20 56 65 72 69 66 69 63 61 74 69 6f 6e  for Verification
17ff0 2c 20 56 61 6c 69 64 61 74 69 6f 6e 2c 0a 2a 2a  , Validation,.**
18000 20 61 6e 64 20 41 63 63 72 65 64 69 74 61 74 69   and Accreditati
18010 6f 6e 20 6f 6e 6c 79 2e 20 20 49 74 20 77 6f 72  on only.  It wor
18020 6b 73 20 6c 69 6b 65 20 45 78 70 72 53 65 74 50  ks like ExprSetP
18030 72 6f 70 65 72 74 79 28 29 20 64 75 72 69 6e 67  roperty() during
18040 20 56 56 41 0a 2a 2a 20 70 72 6f 63 65 73 73 65   VVA.** processe
18050 73 20 62 75 74 20 69 73 20 61 20 6e 6f 2d 6f 70  s but is a no-op
18060 20 66 6f 72 20 64 65 6c 69 76 65 72 79 2e 0a 2a   for delivery..*
18070 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
18080 44 45 42 55 47 0a 23 20 64 65 66 69 6e 65 20 45  DEBUG.# define E
18090 78 70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74  xprSetVVAPropert
180a0 79 28 45 2c 50 29 20 20 28 45 29 2d 3e 66 6c 61  y(E,P)  (E)->fla
180b0 67 73 7c 3d 28 50 29 0a 23 65 6c 73 65 0a 23 20  gs|=(P).#else.# 
180c0 64 65 66 69 6e 65 20 45 78 70 72 53 65 74 56 56  define ExprSetVV
180d0 41 50 72 6f 70 65 72 74 79 28 45 2c 50 29 0a 23  AProperty(E,P).#
180e0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63  endif../*.** Mac
180f0 72 6f 73 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  ros to determine
18100 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 62   the number of b
18110 79 74 65 73 20 72 65 71 75 69 72 65 64 20 62 79  ytes required by
18120 20 61 20 6e 6f 72 6d 61 6c 20 45 78 70 72 0a 2a   a normal Expr.*
18130 2a 20 73 74 72 75 63 74 2c 20 61 6e 20 45 78 70  * struct, an Exp
18140 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74 68  r struct with th
18150 65 20 45 50 5f 52 65 64 75 63 65 64 20 66 6c 61  e EP_Reduced fla
18160 67 20 73 65 74 20 69 6e 20 45 78 70 72 2e 66 6c  g set in Expr.fl
18170 61 67 73 0a 2a 2a 20 61 6e 64 20 61 6e 20 45 78  ags.** and an Ex
18180 70 72 20 73 74 72 75 63 74 20 77 69 74 68 20 74  pr struct with t
18190 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79 20  he EP_TokenOnly 
181a0 66 6c 61 67 20 73 65 74 2e 0a 2a 2f 0a 23 64 65  flag set..*/.#de
181b0 66 69 6e 65 20 45 58 50 52 5f 46 55 4c 4c 53 49  fine EXPR_FULLSI
181c0 5a 45 20 20 20 20 20 20 20 20 20 20 20 73 69 7a  ZE           siz
181d0 65 6f 66 28 45 78 70 72 29 20 20 20 20 20 20 20  eof(Expr)       
181e0 20 20 20 20 2f 2a 20 46 75 6c 6c 20 73 69 7a 65      /* Full size
181f0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52   */.#define EXPR
18200 5f 52 45 44 55 43 45 44 53 49 5a 45 20 20 20 20  _REDUCEDSIZE    
18210 20 20 20 20 6f 66 66 73 65 74 6f 66 28 45 78 70      offsetof(Exp
18220 72 2c 69 54 61 62 6c 65 29 20 20 2f 2a 20 43 6f  r,iTable)  /* Co
18230 6d 6d 6f 6e 20 66 65 61 74 75 72 65 73 20 2a 2f  mmon features */
18240 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f 54 4f  .#define EXPR_TO
18250 4b 45 4e 4f 4e 4c 59 53 49 5a 45 20 20 20 20 20  KENONLYSIZE     
18260 20 6f 66 66 73 65 74 6f 66 28 45 78 70 72 2c 70   offsetof(Expr,p
18270 4c 65 66 74 29 20 20 20 2f 2a 20 46 65 77 65 72  Left)   /* Fewer
18280 20 66 65 61 74 75 72 65 73 20 2a 2f 0a 0a 2f 2a   features */../*
18290 0a 2a 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64  .** Flags passed
182a0 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 45   to the sqlite3E
182b0 78 70 72 44 75 70 28 29 20 66 75 6e 63 74 69 6f  xprDup() functio
182c0 6e 2e 20 53 65 65 20 74 68 65 20 68 65 61 64 65  n. See the heade
182d0 72 20 63 6f 6d 6d 65 6e 74 0a 2a 2a 20 61 62 6f  r comment.** abo
182e0 76 65 20 73 71 6c 69 74 65 33 45 78 70 72 44 75  ve sqlite3ExprDu
182f0 70 28 29 20 66 6f 72 20 64 65 74 61 69 6c 73 2e  p() for details.
18300 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52  .*/.#define EXPR
18310 44 55 50 5f 52 45 44 55 43 45 20 20 20 20 20 20  DUP_REDUCE      
18320 20 20 20 30 78 30 30 30 31 20 20 2f 2a 20 55 73     0x0001  /* Us
18330 65 64 20 72 65 64 75 63 65 64 2d 73 69 7a 65 20  ed reduced-size 
18340 45 78 70 72 20 6e 6f 64 65 73 20 2a 2f 0a 0a 2f  Expr nodes */../
18350 2a 0a 2a 2a 20 41 20 6c 69 73 74 20 6f 66 20 65  *.** A list of e
18360 78 70 72 65 73 73 69 6f 6e 73 2e 20 20 45 61 63  xpressions.  Eac
18370 68 20 65 78 70 72 65 73 73 69 6f 6e 20 6d 61 79  h expression may
18380 20 6f 70 74 69 6f 6e 61 6c 6c 79 20 68 61 76 65   optionally have
18390 20 61 0a 2a 2a 20 6e 61 6d 65 2e 20 20 41 6e 20   a.** name.  An 
183a0 65 78 70 72 2f 6e 61 6d 65 20 63 6f 6d 62 69 6e  expr/name combin
183b0 61 74 69 6f 6e 20 63 61 6e 20 62 65 20 75 73 65  ation can be use
183c0 64 20 69 6e 20 73 65 76 65 72 61 6c 20 77 61 79  d in several way
183d0 73 2c 20 73 75 63 68 0a 2a 2a 20 61 73 20 74 68  s, such.** as th
183e0 65 20 6c 69 73 74 20 6f 66 20 22 65 78 70 72 20  e list of "expr 
183f0 41 53 20 49 44 22 20 66 69 65 6c 64 73 20 66 6f  AS ID" fields fo
18400 6c 6c 6f 77 69 6e 67 20 61 20 22 53 45 4c 45 43  llowing a "SELEC
18410 54 22 20 6f 72 20 69 6e 20 74 68 65 0a 2a 2a 20  T" or in the.** 
18420 6c 69 73 74 20 6f 66 20 22 49 44 20 3d 20 65 78  list of "ID = ex
18430 70 72 22 20 69 74 65 6d 73 20 69 6e 20 61 6e 20  pr" items in an 
18440 55 50 44 41 54 45 2e 20 20 41 20 6c 69 73 74 20  UPDATE.  A list 
18450 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63  of expressions c
18460 61 6e 0a 2a 2a 20 61 6c 73 6f 20 62 65 20 75 73  an.** also be us
18470 65 64 20 61 73 20 74 68 65 20 61 72 67 75 6d 65  ed as the argume
18480 6e 74 20 74 6f 20 61 20 66 75 6e 63 74 69 6f 6e  nt to a function
18490 2c 20 69 6e 20 77 68 69 63 68 20 63 61 73 65 20  , in which case 
184a0 74 68 65 20 61 2e 7a 4e 61 6d 65 0a 2a 2a 20 66  the a.zName.** f
184b0 69 65 6c 64 20 69 73 20 6e 6f 74 20 75 73 65 64  ield is not used
184c0 2e 0a 2a 2a 0a 2a 2a 20 42 79 20 64 65 66 61 75  ..**.** By defau
184d0 6c 74 20 74 68 65 20 45 78 70 72 2e 7a 53 70 61  lt the Expr.zSpa
184e0 6e 20 66 69 65 6c 64 20 68 6f 6c 64 73 20 61 20  n field holds a 
184f0 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c 65 20 64  human-readable d
18500 65 73 63 72 69 70 74 69 6f 6e 20 6f 66 0a 2a 2a  escription of.**
18510 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
18520 74 68 61 74 20 69 73 20 75 73 65 64 20 69 6e 20  that is used in 
18530 74 68 65 20 67 65 6e 65 72 61 74 69 6f 6e 20 6f  the generation o
18540 66 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73  f error messages
18550 20 61 6e 64 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 6c   and.** column l
18560 61 62 65 6c 73 2e 20 20 49 6e 20 74 68 69 73 20  abels.  In this 
18570 63 61 73 65 2c 20 45 78 70 72 2e 7a 53 70 61 6e  case, Expr.zSpan
18580 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 74 68   is typically th
18590 65 20 74 65 78 74 20 6f 66 20 61 0a 2a 2a 20 63  e text of a.** c
185a0 6f 6c 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e  olumn expression
185b0 20 61 73 20 69 74 20 65 78 69 73 74 73 20 69 6e   as it exists in
185c0 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d   a SELECT statem
185d0 65 6e 74 2e 20 20 48 6f 77 65 76 65 72 2c 20 69  ent.  However, i
185e0 66 0a 2a 2a 20 74 68 65 20 62 53 70 61 6e 49 73  f.** the bSpanIs
185f0 54 61 62 20 66 6c 61 67 20 69 73 20 73 65 74 2c  Tab flag is set,
18600 20 74 68 65 6e 20 7a 53 70 61 6e 20 69 73 20 6f   then zSpan is o
18610 76 65 72 6c 6f 61 64 65 64 20 74 6f 20 6d 65 61  verloaded to mea
18620 6e 20 74 68 65 20 6e 61 6d 65 0a 2a 2a 20 6f 66  n the name.** of
18630 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6c 75   the result colu
18640 6d 6e 20 69 6e 20 74 68 65 20 66 6f 72 6d 3a 20  mn in the form: 
18650 44 41 54 41 42 41 53 45 2e 54 41 42 4c 45 2e 43  DATABASE.TABLE.C
18660 4f 4c 55 4d 4e 2e 20 20 54 68 69 73 20 6c 61 74  OLUMN.  This lat
18670 65 72 0a 2a 2a 20 66 6f 72 6d 20 69 73 20 75 73  er.** form is us
18680 65 64 20 66 6f 72 20 6e 61 6d 65 20 72 65 73 6f  ed for name reso
18690 6c 75 74 69 6f 6e 20 77 69 74 68 20 6e 65 73 74  lution with nest
186a0 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 73 2e  ed FROM clauses.
186b0 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72 4c  .*/.struct ExprL
186c0 69 73 74 20 7b 0a 20 20 69 6e 74 20 6e 45 78 70  ist {.  int nExp
186d0 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  r;             /
186e0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 78 70 72  * Number of expr
186f0 65 73 73 69 6f 6e 73 20 6f 6e 20 74 68 65 20 6c  essions on the l
18700 69 73 74 20 2a 2f 0a 20 20 73 74 72 75 63 74 20  ist */.  struct 
18710 45 78 70 72 4c 69 73 74 5f 69 74 65 6d 20 7b 20  ExprList_item { 
18720 2f 2a 20 46 6f 72 20 65 61 63 68 20 65 78 70 72  /* For each expr
18730 65 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 6c 69  ession in the li
18740 73 74 20 2a 2f 0a 20 20 20 20 45 78 70 72 20 2a  st */.    Expr *
18750 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20 20  pExpr;          
18760 20 20 2f 2a 20 54 68 65 20 6c 69 73 74 20 6f 66    /* The list of
18770 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
18780 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b      char *zName;
18790 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
187a0 6f 6b 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20  oken associated 
187b0 77 69 74 68 20 74 68 69 73 20 65 78 70 72 65 73  with this expres
187c0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72  sion */.    char
187d0 20 2a 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20   *zSpan;        
187e0 20 20 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20      /* Original 
187f0 74 65 78 74 20 6f 66 20 74 68 65 20 65 78 70 72  text of the expr
18800 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38  ession */.    u8
18810 20 73 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20   sortOrder;     
18820 20 20 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44        /* 1 for D
18830 45 53 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43  ESC or 0 for ASC
18840 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64   */.    unsigned
18850 20 64 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20   done :1;       
18860 2f 2a 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64  /* A flag to ind
18870 69 63 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65  icate when proce
18880 73 73 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65  ssing is finishe
18890 64 20 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65  d */.    unsigne
188a0 64 20 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b  d bSpanIsTab :1;
188b0 20 2f 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20   /* zSpan holds 
188c0 44 42 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20  DB.TABLE.COLUMN 
188d0 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
188e0 72 65 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f  reusable :1;   /
188f0 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65  * Constant expre
18900 73 73 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c  ssion is reusabl
18910 65 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b  e */.    union {
18920 0a 20 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a  .      struct {.
18930 20 20 20 20 20 20 20 20 75 31 36 20 69 4f 72 64          u16 iOrd
18940 65 72 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a  erByCol;      /*
18950 20 46 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63   For ORDER BY, c
18960 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
18970 72 65 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20  result set */.  
18980 20 20 20 20 20 20 75 31 36 20 69 41 6c 69 61 73        u16 iAlias
18990 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
189a0 6e 64 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e  ndex into Parse.
189b0 61 41 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61  aAlias[] for zNa
189c0 6d 65 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b  me */.      } x;
189d0 0a 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73  .      int iCons
189e0 74 45 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f  tExprReg;      /
189f0 2a 20 52 65 67 69 73 74 65 72 20 69 6e 20 77 68  * Register in wh
18a00 69 63 68 20 45 78 70 72 20 76 61 6c 75 65 20 69  ich Expr value i
18a10 73 20 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20  s cached */.    
18a20 7d 20 75 3b 0a 20 20 7d 20 2a 61 3b 20 20 20 20  } u;.  } *a;    
18a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
18a40 20 41 6c 6c 6f 63 20 61 20 70 6f 77 65 72 20 6f   Alloc a power o
18a50 66 20 74 77 6f 20 67 72 65 61 74 65 72 20 6f 72  f two greater or
18a60 20 65 71 75 61 6c 20 74 6f 20 6e 45 78 70 72 20   equal to nExpr 
18a70 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
18a80 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
18a90 20 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73   structure is us
18aa0 65 64 20 62 79 20 74 68 65 20 70 61 72 73 65 72  ed by the parser
18ab0 20 74 6f 20 72 65 63 6f 72 64 20 62 6f 74 68 0a   to record both.
18ac0 2a 2a 20 74 68 65 20 70 61 72 73 65 20 74 72 65  ** the parse tre
18ad0 65 20 66 6f 72 20 61 6e 20 65 78 70 72 65 73 73  e for an express
18ae0 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 61 6e  ion and the span
18af0 20 6f 66 20 69 6e 70 75 74 20 74 65 78 74 20 66   of input text f
18b00 6f 72 20 61 6e 0a 2a 2a 20 65 78 70 72 65 73 73  or an.** express
18b10 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45  ion..*/.struct E
18b20 78 70 72 53 70 61 6e 20 7b 0a 20 20 45 78 70 72  xprSpan {.  Expr
18b30 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20   *pExpr;        
18b40 20 20 2f 2a 20 54 68 65 20 65 78 70 72 65 73 73    /* The express
18b50 69 6f 6e 20 70 61 72 73 65 20 74 72 65 65 20 2a  ion parse tree *
18b60 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
18b70 7a 53 74 61 72 74 3b 20 20 20 2f 2a 20 46 69 72  zStart;   /* Fir
18b80 73 74 20 63 68 61 72 61 63 74 65 72 20 6f 66 20  st character of 
18b90 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 20 20  input text */.  
18ba0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 45 6e 64  const char *zEnd
18bb0 3b 20 20 20 20 20 2f 2a 20 4f 6e 65 20 63 68 61  ;     /* One cha
18bc0 72 61 63 74 65 72 20 70 61 73 74 20 74 68 65 20  racter past the 
18bd0 65 6e 64 20 6f 66 20 69 6e 70 75 74 20 74 65 78  end of input tex
18be0 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  t */.};../*.** A
18bf0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
18c00 69 73 20 73 74 72 75 63 74 75 72 65 20 63 61 6e  is structure can
18c10 20 68 6f 6c 64 20 61 20 73 69 6d 70 6c 65 20 6c   hold a simple l
18c20 69 73 74 20 6f 66 20 69 64 65 6e 74 69 66 69 65  ist of identifie
18c30 72 73 2c 0a 2a 2a 20 73 75 63 68 20 61 73 20 74  rs,.** such as t
18c40 68 65 20 6c 69 73 74 20 22 61 2c 62 2c 63 22 20  he list "a,b,c" 
18c50 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
18c60 20 73 74 61 74 65 6d 65 6e 74 73 3a 0a 2a 2a 0a   statements:.**.
18c70 2a 2a 20 20 20 20 20 20 49 4e 53 45 52 54 20 49  **      INSERT I
18c80 4e 54 4f 20 74 28 61 2c 62 2c 63 29 20 56 41 4c  NTO t(a,b,c) VAL
18c90 55 45 53 20 2e 2e 2e 3b 0a 2a 2a 20 20 20 20 20  UES ...;.**     
18ca0 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 69 64   CREATE INDEX id
18cb0 78 20 4f 4e 20 74 28 61 2c 62 2c 63 29 3b 0a 2a  x ON t(a,b,c);.*
18cc0 2a 20 20 20 20 20 20 43 52 45 41 54 45 20 54 52  *      CREATE TR
18cd0 49 47 47 45 52 20 74 72 69 67 20 42 45 46 4f 52  IGGER trig BEFOR
18ce0 45 20 55 50 44 41 54 45 20 4f 4e 20 74 28 61 2c  E UPDATE ON t(a,
18cf0 62 2c 63 29 20 2e 2e 2e 3b 0a 2a 2a 0a 2a 2a 20  b,c) ...;.**.** 
18d00 54 68 65 20 49 64 4c 69 73 74 2e 61 2e 69 64 78  The IdList.a.idx
18d10 20 66 69 65 6c 64 20 69 73 20 75 73 65 64 20 77   field is used w
18d20 68 65 6e 20 74 68 65 20 49 64 4c 69 73 74 20 72  hen the IdList r
18d30 65 70 72 65 73 65 6e 74 73 20 74 68 65 20 6c 69  epresents the li
18d40 73 74 20 6f 66 0a 2a 2a 20 63 6f 6c 75 6d 6e 20  st of.** column 
18d50 6e 61 6d 65 73 20 61 66 74 65 72 20 61 20 74 61  names after a ta
18d60 62 6c 65 20 6e 61 6d 65 20 69 6e 20 61 6e 20 49  ble name in an I
18d70 4e 53 45 52 54 20 73 74 61 74 65 6d 65 6e 74 2e  NSERT statement.
18d80 20 20 49 6e 20 74 68 65 20 73 74 61 74 65 6d 65    In the stateme
18d90 6e 74 0a 2a 2a 0a 2a 2a 20 20 20 20 20 49 4e 53  nt.**.**     INS
18da0 45 52 54 20 49 4e 54 4f 20 74 28 61 2c 62 2c 63  ERT INTO t(a,b,c
18db0 29 20 2e 2e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 22  ) ....**.** If "
18dc0 61 22 20 69 73 20 74 68 65 20 6b 2d 74 68 20 63  a" is the k-th c
18dd0 6f 6c 75 6d 6e 20 6f 66 20 74 61 62 6c 65 20 22  olumn of table "
18de0 74 22 2c 20 74 68 65 6e 20 49 64 4c 69 73 74 2e  t", then IdList.
18df0 61 5b 30 5d 2e 69 64 78 3d 3d 6b 2e 0a 2a 2f 0a  a[0].idx==k..*/.
18e00 73 74 72 75 63 74 20 49 64 4c 69 73 74 20 7b 0a  struct IdList {.
18e10 20 20 73 74 72 75 63 74 20 49 64 4c 69 73 74 5f    struct IdList_
18e20 69 74 65 6d 20 7b 0a 20 20 20 20 63 68 61 72 20  item {.    char 
18e30 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20  *zName;      /* 
18e40 4e 61 6d 65 20 6f 66 20 74 68 65 20 69 64 65 6e  Name of the iden
18e50 74 69 66 69 65 72 20 2a 2f 0a 20 20 20 20 69 6e  tifier */.    in
18e60 74 20 69 64 78 3b 20 20 20 20 20 20 20 20 20 20  t idx;          
18e70 2f 2a 20 49 6e 64 65 78 20 69 6e 20 73 6f 6d 65  /* Index in some
18e80 20 54 61 62 6c 65 2e 61 43 6f 6c 5b 5d 20 6f 66   Table.aCol[] of
18e90 20 61 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 64 20   a column named 
18ea0 7a 4e 61 6d 65 20 2a 2f 0a 20 20 7d 20 2a 61 3b  zName */.  } *a;
18eb0 0a 20 20 69 6e 74 20 6e 49 64 3b 20 20 20 20 20  .  int nId;     
18ec0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
18ed0 20 69 64 65 6e 74 69 66 69 65 72 73 20 6f 6e 20   identifiers on 
18ee0 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  the list */.};..
18ef0 2f 2a 0a 2a 2a 20 54 68 65 20 62 69 74 6d 61 73  /*.** The bitmas
18f00 6b 20 64 61 74 61 74 79 70 65 20 64 65 66 69 6e  k datatype defin
18f10 65 64 20 62 65 6c 6f 77 20 69 73 20 75 73 65 64  ed below is used
18f20 20 66 6f 72 20 76 61 72 69 6f 75 73 20 6f 70 74   for various opt
18f30 69 6d 69 7a 61 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a  imizations..**.*
18f40 2a 20 43 68 61 6e 67 69 6e 67 20 74 68 69 73 20  * Changing this 
18f50 66 72 6f 6d 20 61 20 36 34 2d 62 69 74 20 74 6f  from a 64-bit to
18f60 20 61 20 33 32 2d 62 69 74 20 74 79 70 65 20 6c   a 32-bit type l
18f70 69 6d 69 74 73 20 74 68 65 20 6e 75 6d 62 65 72  imits the number
18f80 20 6f 66 0a 2a 2a 20 74 61 62 6c 65 73 20 69 6e   of.** tables in
18f90 20 61 20 6a 6f 69 6e 20 74 6f 20 33 32 20 69 6e   a join to 32 in
18fa0 73 74 65 61 64 20 6f 66 20 36 34 2e 20 20 42 75  stead of 64.  Bu
18fb0 74 20 69 74 20 61 6c 73 6f 20 72 65 64 75 63 65  t it also reduce
18fc0 73 20 74 68 65 20 73 69 7a 65 0a 2a 2a 20 6f 66  s the size.** of
18fd0 20 74 68 65 20 6c 69 62 72 61 72 79 20 62 79 20   the library by 
18fe0 37 33 38 20 62 79 74 65 73 20 6f 6e 20 69 78 38  738 bytes on ix8
18ff0 36 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  6..*/.#ifdef SQL
19000 49 54 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45  ITE_BITMASK_TYPE
19010 0a 20 20 74 79 70 65 64 65 66 20 53 51 4c 49 54  .  typedef SQLIT
19020 45 5f 42 49 54 4d 41 53 4b 5f 54 59 50 45 20 42  E_BITMASK_TYPE B
19030 69 74 6d 61 73 6b 3b 0a 23 65 6c 73 65 0a 20 20  itmask;.#else.  
19040 74 79 70 65 64 65 66 20 75 36 34 20 42 69 74 6d  typedef u64 Bitm
19050 61 73 6b 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ask;.#endif../*.
19060 2a 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  ** The number of
19070 20 62 69 74 73 20 69 6e 20 61 20 42 69 74 6d 61   bits in a Bitma
19080 73 6b 2e 20 20 22 42 4d 53 22 20 6d 65 61 6e 73  sk.  "BMS" means
19090 20 22 42 69 74 4d 61 73 6b 20 53 69 7a 65 22 2e   "BitMask Size".
190a0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 42 4d 53 20  .*/.#define BMS 
190b0 20 28 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 42   ((int)(sizeof(B
190c0 69 74 6d 61 73 6b 29 2a 38 29 29 0a 0a 2f 2a 0a  itmask)*8))../*.
190d0 2a 2a 20 41 20 62 69 74 20 69 6e 20 61 20 42 69  ** A bit in a Bi
190e0 74 6d 61 73 6b 0a 2a 2f 0a 23 64 65 66 69 6e 65  tmask.*/.#define
190f0 20 4d 41 53 4b 42 49 54 28 6e 29 20 20 20 28 28   MASKBIT(n)   ((
19100 28 42 69 74 6d 61 73 6b 29 31 29 3c 3c 28 6e 29  (Bitmask)1)<<(n)
19110 29 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42 49  ).#define MASKBI
19120 54 33 32 28 6e 29 20 28 28 28 75 6e 73 69 67 6e  T32(n) (((unsign
19130 65 64 20 69 6e 74 29 31 29 3c 3c 28 6e 29 29 0a  ed int)1)<<(n)).
19140 23 64 65 66 69 6e 65 20 41 4c 4c 42 49 54 53 20  #define ALLBITS 
19150 20 20 20 20 20 28 28 42 69 74 6d 61 73 6b 29 2d       ((Bitmask)-
19160 31 29 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f  1)../*.** The fo
19170 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
19180 65 20 64 65 73 63 72 69 62 65 73 20 74 68 65 20  e describes the 
19190 46 52 4f 4d 20 63 6c 61 75 73 65 20 6f 66 20 61  FROM clause of a
191a0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
191b0 74 2e 0a 2a 2a 20 45 61 63 68 20 74 61 62 6c 65  t..** Each table
191c0 20 6f 72 20 73 75 62 71 75 65 72 79 20 69 6e 20   or subquery in 
191d0 74 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  the FROM clause 
191e0 69 73 20 61 20 73 65 70 61 72 61 74 65 20 65 6c  is a separate el
191f0 65 6d 65 6e 74 20 6f 66 0a 2a 2a 20 74 68 65 20  ement of.** the 
19200 53 72 63 4c 69 73 74 2e 61 5b 5d 20 61 72 72 61  SrcList.a[] arra
19210 79 2e 0a 2a 2a 0a 2a 2a 20 57 69 74 68 20 74 68  y..**.** With th
19220 65 20 61 64 64 69 74 69 6f 6e 20 6f 66 20 6d 75  e addition of mu
19230 6c 74 69 70 6c 65 20 64 61 74 61 62 61 73 65 20  ltiple database 
19240 73 75 70 70 6f 72 74 2c 20 74 68 65 20 66 6f 6c  support, the fol
19250 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
19260 0a 2a 2a 20 63 61 6e 20 61 6c 73 6f 20 62 65 20  .** can also be 
19270 75 73 65 64 20 74 6f 20 64 65 73 63 72 69 62 65  used to describe
19280 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 74 61   a particular ta
19290 62 6c 65 20 73 75 63 68 20 61 73 20 74 68 65 20  ble such as the 
192a0 74 61 62 6c 65 20 74 68 61 74 0a 2a 2a 20 69 73  table that.** is
192b0 20 6d 6f 64 69 66 69 65 64 20 62 79 20 61 6e 20   modified by an 
192c0 49 4e 53 45 52 54 2c 20 44 45 4c 45 54 45 2c 20  INSERT, DELETE, 
192d0 6f 72 20 55 50 44 41 54 45 20 73 74 61 74 65 6d  or UPDATE statem
192e0 65 6e 74 2e 20 20 49 6e 20 73 74 61 6e 64 61 72  ent.  In standar
192f0 64 20 53 51 4c 2c 0a 2a 2a 20 73 75 63 68 20 61  d SQL,.** such a
19300 20 74 61 62 6c 65 20 6d 75 73 74 20 62 65 20 61   table must be a
19310 20 73 69 6d 70 6c 65 20 6e 61 6d 65 3a 20 49 44   simple name: ID
19320 2e 20 20 42 75 74 20 69 6e 20 53 51 4c 69 74 65  .  But in SQLite
19330 2c 20 74 68 65 20 74 61 62 6c 65 20 63 61 6e 0a  , the table can.
19340 2a 2a 20 6e 6f 77 20 62 65 20 69 64 65 6e 74 69  ** now be identi
19350 66 69 65 64 20 62 79 20 61 20 64 61 74 61 62 61  fied by a databa
19360 73 65 20 6e 61 6d 65 2c 20 61 20 64 6f 74 2c 20  se name, a dot, 
19370 74 68 65 6e 20 74 68 65 20 74 61 62 6c 65 20 6e  then the table n
19380 61 6d 65 3a 20 49 44 2e 49 44 2e 0a 2a 2a 0a 2a  ame: ID.ID..**.*
19390 2a 20 54 68 65 20 6a 6f 69 6e 74 79 70 65 20 73  * The jointype s
193a0 74 61 72 74 73 20 6f 75 74 20 73 68 6f 77 69 6e  tarts out showin
193b0 67 20 74 68 65 20 6a 6f 69 6e 20 74 79 70 65 20  g the join type 
193c0 62 65 74 77 65 65 6e 20 74 68 65 20 63 75 72 72  between the curr
193d0 65 6e 74 20 74 61 62 6c 65 0a 2a 2a 20 61 6e 64  ent table.** and
193e0 20 74 68 65 20 6e 65 78 74 20 74 61 62 6c 65 20   the next table 
193f0 6f 6e 20 74 68 65 20 6c 69 73 74 2e 20 20 54 68  on the list.  Th
19400 65 20 70 61 72 73 65 72 20 62 75 69 6c 64 73 20  e parser builds 
19410 74 68 65 20 6c 69 73 74 20 74 68 69 73 20 77 61  the list this wa
19420 79 2e 0a 2a 2a 20 42 75 74 20 73 71 6c 69 74 65  y..** But sqlite
19430 33 53 72 63 4c 69 73 74 53 68 69 66 74 4a 6f 69  3SrcListShiftJoi
19440 6e 54 79 70 65 28 29 20 6c 61 74 65 72 20 73 68  nType() later sh
19450 69 66 74 73 20 74 68 65 20 6a 6f 69 6e 74 79 70  ifts the jointyp
19460 65 73 20 73 6f 20 74 68 61 74 20 65 61 63 68 0a  es so that each.
19470 2a 2a 20 6a 6f 69 6e 74 79 70 65 20 65 78 70 72  ** jointype expr
19480 65 73 73 65 73 20 74 68 65 20 6a 6f 69 6e 20 62  esses the join b
19490 65 74 77 65 65 6e 20 74 68 65 20 74 61 62 6c 65  etween the table
194a0 20 61 6e 64 20 74 68 65 20 70 72 65 76 69 6f 75   and the previou
194b0 73 20 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 49  s table..**.** I
194c0 6e 20 74 68 65 20 63 6f 6c 55 73 65 64 20 66 69  n the colUsed fi
194d0 65 6c 64 2c 20 74 68 65 20 68 69 67 68 2d 6f 72  eld, the high-or
194e0 64 65 72 20 62 69 74 20 28 62 69 74 20 36 33 29  der bit (bit 63)
194f0 20 69 73 20 73 65 74 20 69 66 20 74 68 65 20 74   is set if the t
19500 61 62 6c 65 0a 2a 2a 20 63 6f 6e 74 61 69 6e 73  able.** contains
19510 20 6d 6f 72 65 20 74 68 61 6e 20 36 33 20 63 6f   more than 63 co
19520 6c 75 6d 6e 73 20 61 6e 64 20 74 68 65 20 36 34  lumns and the 64
19530 2d 74 68 20 6f 72 20 6c 61 74 65 72 20 63 6f 6c  -th or later col
19540 75 6d 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  umn is used..*/.
19550 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 20 7b  struct SrcList {
19560 0a 20 20 69 6e 74 20 6e 53 72 63 3b 20 20 20 20  .  int nSrc;    
19570 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
19580 20 74 61 62 6c 65 73 20 6f 72 20 73 75 62 71 75   tables or subqu
19590 65 72 69 65 73 20 69 6e 20 74 68 65 20 46 52 4f  eries in the FRO
195a0 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 75 33  M clause */.  u3
195b0 32 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20 2f  2 nAlloc;      /
195c0 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72  * Number of entr
195d0 69 65 73 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e  ies allocated in
195e0 20 61 5b 5d 20 62 65 6c 6f 77 20 2a 2f 0a 20 20   a[] below */.  
195f0 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
19600 74 65 6d 20 7b 0a 20 20 20 20 53 63 68 65 6d 61  tem {.    Schema
19610 20 2a 70 53 63 68 65 6d 61 3b 20 20 2f 2a 20 53   *pSchema;  /* S
19620 63 68 65 6d 61 20 74 6f 20 77 68 69 63 68 20 74  chema to which t
19630 68 69 73 20 69 74 65 6d 20 69 73 20 66 69 78 65  his item is fixe
19640 64 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  d */.    char *z
19650 44 61 74 61 62 61 73 65 3b 20 20 2f 2a 20 4e 61  Database;  /* Na
19660 6d 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 68  me of database h
19670 6f 6c 64 69 6e 67 20 74 68 69 73 20 74 61 62 6c  olding this tabl
19680 65 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a  e */.    char *z
19690 4e 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61  Name;      /* Na
196a0 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
196b0 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a 7a 41 6c  */.    char *zAl
196c0 69 61 73 3b 20 20 20 20 20 2f 2a 20 54 68 65 20  ias;     /* The 
196d0 22 42 22 20 70 61 72 74 20 6f 66 20 61 20 22 41  "B" part of a "A
196e0 20 41 53 20 42 22 20 70 68 72 61 73 65 2e 20 20   AS B" phrase.  
196f0 7a 4e 61 6d 65 20 69 73 20 74 68 65 20 22 41 22  zName is the "A"
19700 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
19710 54 61 62 3b 20 20 20 20 20 20 2f 2a 20 41 6e 20  Tab;      /* An 
19720 53 51 4c 20 74 61 62 6c 65 20 63 6f 72 72 65 73  SQL table corres
19730 70 6f 6e 64 69 6e 67 20 74 6f 20 7a 4e 61 6d 65  ponding to zName
19740 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a   */.    Select *
19750 70 53 65 6c 65 63 74 3b 20 20 2f 2a 20 41 20 53  pSelect;  /* A S
19760 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 20  ELECT statement 
19770 75 73 65 64 20 69 6e 20 70 6c 61 63 65 20 6f 66  used in place of
19780 20 61 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a 2f   a table name */
19790 0a 20 20 20 20 69 6e 74 20 61 64 64 72 46 69 6c  .    int addrFil
197a0 6c 53 75 62 3b 20 20 2f 2a 20 41 64 64 72 65 73  lSub;  /* Addres
197b0 73 20 6f 66 20 73 75 62 72 6f 75 74 69 6e 65 20  s of subroutine 
197c0 74 6f 20 6d 61 6e 69 66 65 73 74 20 61 20 73 75  to manifest a su
197d0 62 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 69 6e  bquery */.    in
197e0 74 20 72 65 67 52 65 74 75 72 6e 3b 20 20 20 20  t regReturn;    
197f0 2f 2a 20 52 65 67 69 73 74 65 72 20 68 6f 6c 64  /* Register hold
19800 69 6e 67 20 72 65 74 75 72 6e 20 61 64 64 72 65  ing return addre
19810 73 73 20 6f 66 20 61 64 64 72 46 69 6c 6c 53 75  ss of addrFillSu
19820 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  b */.    int reg
19830 52 65 73 75 6c 74 3b 20 20 20 20 2f 2a 20 52 65  Result;    /* Re
19840 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
19850 72 65 73 75 6c 74 73 20 6f 66 20 61 20 63 6f 2d  results of a co-
19860 72 6f 75 74 69 6e 65 20 2a 2f 0a 20 20 20 20 73  routine */.    s
19870 74 72 75 63 74 20 7b 0a 20 20 20 20 20 20 75 38  truct {.      u8
19880 20 6a 6f 69 6e 74 79 70 65 3b 20 20 20 20 20 20   jointype;      
19890 2f 2a 20 54 79 70 65 20 6f 66 20 6a 6f 69 6e 20  /* Type of join 
198a0 62 65 74 77 65 65 6e 20 74 68 69 73 20 74 61 62  between this tab
198b0 6c 65 20 61 6e 64 20 74 68 65 20 70 72 65 76 69  le and the previ
198c0 6f 75 73 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ous */.      uns
198d0 69 67 6e 65 64 20 6e 6f 74 49 6e 64 65 78 65 64  igned notIndexed
198e0 20 3a 31 3b 20 20 20 20 2f 2a 20 54 72 75 65 20   :1;    /* True 
198f0 69 66 20 74 68 65 72 65 20 69 73 20 61 20 4e 4f  if there is a NO
19900 54 20 49 4e 44 45 58 45 44 20 63 6c 61 75 73 65  T INDEXED clause
19910 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
19920 65 64 20 69 73 49 6e 64 65 78 65 64 42 79 20 3a  ed isIndexedBy :
19930 31 3b 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20  1;   /* True if 
19940 74 68 65 72 65 20 69 73 20 61 6e 20 49 4e 44 45  there is an INDE
19950 58 45 44 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  XED BY clause */
19960 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
19970 69 73 54 61 62 46 75 6e 63 20 3a 31 3b 20 20 20  isTabFunc :1;   
19980 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 61 62    /* True if tab
19990 6c 65 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69  le-valued-functi
199a0 6f 6e 20 73 79 6e 74 61 78 20 2a 2f 0a 20 20 20  on syntax */.   
199b0 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 43 6f     unsigned isCo
199c0 72 72 65 6c 61 74 65 64 20 3a 31 3b 20 20 2f 2a  rrelated :1;  /*
199d0 20 54 72 75 65 20 69 66 20 73 75 62 2d 71 75 65   True if sub-que
199e0 72 79 20 69 73 20 63 6f 72 72 65 6c 61 74 65 64  ry is correlated
199f0 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73 69 67 6e   */.      unsign
19a00 65 64 20 76 69 61 43 6f 72 6f 75 74 69 6e 65 20  ed viaCoroutine 
19a10 3a 31 3b 20 20 2f 2a 20 49 6d 70 6c 65 6d 65 6e  :1;  /* Implemen
19a20 74 65 64 20 61 73 20 61 20 63 6f 2d 72 6f 75 74  ted as a co-rout
19a30 69 6e 65 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  ine */.      uns
19a40 69 67 6e 65 64 20 69 73 52 65 63 75 72 73 69 76  igned isRecursiv
19a50 65 20 3a 31 3b 20 20 20 2f 2a 20 54 72 75 65 20  e :1;   /* True 
19a60 66 6f 72 20 72 65 63 75 72 73 69 76 65 20 72 65  for recursive re
19a70 66 65 72 65 6e 63 65 20 69 6e 20 57 49 54 48 20  ference in WITH 
19a80 2a 2f 0a 20 20 20 20 7d 20 66 67 3b 0a 23 69 66  */.    } fg;.#if
19a90 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
19aa0 5f 45 58 50 4c 41 49 4e 0a 20 20 20 20 75 38 20  _EXPLAIN.    u8 
19ab0 69 53 65 6c 65 63 74 49 64 3b 20 20 20 20 20 2f  iSelectId;     /
19ac0 2a 20 49 66 20 70 53 65 6c 65 63 74 21 3d 30 2c  * If pSelect!=0,
19ad0 20 74 68 65 20 69 64 20 6f 66 20 74 68 65 20 73   the id of the s
19ae0 75 62 2d 73 65 6c 65 63 74 20 69 6e 20 45 51 50  ub-select in EQP
19af0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 20 20 69   */.#endif.    i
19b00 6e 74 20 69 43 75 72 73 6f 72 3b 20 20 20 20 20  nt iCursor;     
19b10 20 2f 2a 20 54 68 65 20 56 44 42 45 20 63 75 72   /* The VDBE cur
19b20 73 6f 72 20 6e 75 6d 62 65 72 20 75 73 65 64 20  sor number used 
19b30 74 6f 20 61 63 63 65 73 73 20 74 68 69 73 20 74  to access this t
19b40 61 62 6c 65 20 2a 2f 0a 20 20 20 20 45 78 70 72  able */.    Expr
19b50 20 2a 70 4f 6e 3b 20 20 20 20 20 20 20 20 2f 2a   *pOn;        /*
19b60 20 54 68 65 20 4f 4e 20 63 6c 61 75 73 65 20 6f   The ON clause o
19b70 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20 20  f a join */.    
19b80 49 64 4c 69 73 74 20 2a 70 55 73 69 6e 67 3b 20  IdList *pUsing; 
19b90 20 20 2f 2a 20 54 68 65 20 55 53 49 4e 47 20 63    /* The USING c
19ba0 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f 69 6e 20  lause of a join 
19bb0 2a 2f 0a 20 20 20 20 42 69 74 6d 61 73 6b 20 63  */.    Bitmask c
19bc0 6f 6c 55 73 65 64 3b 20 20 2f 2a 20 42 69 74 20  olUsed;  /* Bit 
19bd0 4e 20 28 31 3c 3c 4e 29 20 73 65 74 20 69 66 20  N (1<<N) set if 
19be0 63 6f 6c 75 6d 6e 20 4e 20 6f 66 20 70 54 61 62  column N of pTab
19bf0 20 69 73 20 75 73 65 64 20 2a 2f 0a 20 20 20 20   is used */.    
19c00 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 20 20 63 68  union {.      ch
19c10 61 72 20 2a 7a 49 6e 64 65 78 65 64 42 79 3b 20  ar *zIndexedBy; 
19c20 20 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72     /* Identifier
19c30 20 66 72 6f 6d 20 22 49 4e 44 45 58 45 44 20 42   from "INDEXED B
19c40 59 20 3c 7a 49 6e 64 65 78 3e 22 20 63 6c 61 75  Y <zIndex>" clau
19c50 73 65 20 2a 2f 0a 20 20 20 20 20 20 45 78 70 72  se */.      Expr
19c60 4c 69 73 74 20 2a 70 46 75 6e 63 41 72 67 3b 20  List *pFuncArg; 
19c70 20 2f 2a 20 41 72 67 75 6d 65 6e 74 73 20 74 6f   /* Arguments to
19c80 20 74 61 62 6c 65 2d 76 61 6c 75 65 64 2d 66 75   table-valued-fu
19c90 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 7d 20  nction */.    } 
19ca0 75 31 3b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70  u1;.    Index *p
19cb0 49 42 49 6e 64 65 78 3b 20 20 2f 2a 20 49 6e 64  IBIndex;  /* Ind
19cc0 65 78 20 73 74 72 75 63 74 75 72 65 20 63 6f 72  ex structure cor
19cd0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 75 31  responding to u1
19ce0 2e 7a 49 6e 64 65 78 65 64 42 79 20 2a 2f 0a 20  .zIndexedBy */. 
19cf0 20 7d 20 61 5b 31 5d 3b 20 20 20 20 20 20 20 20   } a[1];        
19d00 20 20 20 20 20 2f 2a 20 4f 6e 65 20 65 6e 74 72       /* One entr
19d10 79 20 66 6f 72 20 65 61 63 68 20 69 64 65 6e 74  y for each ident
19d20 69 66 69 65 72 20 6f 6e 20 74 68 65 20 6c 69 73  ifier on the lis
19d30 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50  t */.};../*.** P
19d40 65 72 6d 69 74 74 65 64 20 76 61 6c 75 65 73 20  ermitted values 
19d50 6f 66 20 74 68 65 20 53 72 63 4c 69 73 74 2e 61  of the SrcList.a
19d60 2e 6a 6f 69 6e 74 79 70 65 20 66 69 65 6c 64 0a  .jointype field.
19d70 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 49 4e  */.#define JT_IN
19d80 4e 45 52 20 20 20 20 20 30 78 30 30 30 31 20 20  NER     0x0001  
19d90 20 20 2f 2a 20 41 6e 79 20 6b 69 6e 64 20 6f 66    /* Any kind of
19da0 20 69 6e 6e 65 72 20 6f 72 20 63 72 6f 73 73 20   inner or cross 
19db0 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
19dc0 4a 54 5f 43 52 4f 53 53 20 20 20 20 20 30 78 30  JT_CROSS     0x0
19dd0 30 30 32 20 20 20 20 2f 2a 20 45 78 70 6c 69 63  002    /* Explic
19de0 69 74 20 75 73 65 20 6f 66 20 74 68 65 20 43 52  it use of the CR
19df0 4f 53 53 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  OSS keyword */.#
19e00 64 65 66 69 6e 65 20 4a 54 5f 4e 41 54 55 52 41  define JT_NATURA
19e10 4c 20 20 20 30 78 30 30 30 34 20 20 20 20 2f 2a  L   0x0004    /*
19e20 20 54 72 75 65 20 66 6f 72 20 61 20 22 6e 61 74   True for a "nat
19e30 75 72 61 6c 22 20 6a 6f 69 6e 20 2a 2f 0a 23 64  ural" join */.#d
19e40 65 66 69 6e 65 20 4a 54 5f 4c 45 46 54 20 20 20  efine JT_LEFT   
19e50 20 20 20 30 78 30 30 30 38 20 20 20 20 2f 2a 20     0x0008    /* 
19e60 4c 65 66 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  Left outer join 
19e70 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 52 49  */.#define JT_RI
19e80 47 48 54 20 20 20 20 20 30 78 30 30 31 30 20 20  GHT     0x0010  
19e90 20 20 2f 2a 20 52 69 67 68 74 20 6f 75 74 65 72    /* Right outer
19ea0 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65   join */.#define
19eb0 20 4a 54 5f 4f 55 54 45 52 20 20 20 20 20 30 78   JT_OUTER     0x
19ec0 30 30 32 30 20 20 20 20 2f 2a 20 54 68 65 20 22  0020    /* The "
19ed0 4f 55 54 45 52 22 20 6b 65 79 77 6f 72 64 20 69  OUTER" keyword i
19ee0 73 20 70 72 65 73 65 6e 74 20 2a 2f 0a 23 64 65  s present */.#de
19ef0 66 69 6e 65 20 4a 54 5f 45 52 52 4f 52 20 20 20  fine JT_ERROR   
19f00 20 20 30 78 30 30 34 30 20 20 20 20 2f 2a 20 75    0x0040    /* u
19f10 6e 6b 6e 6f 77 6e 20 6f 72 20 75 6e 73 75 70 70  nknown or unsupp
19f20 6f 72 74 65 64 20 6a 6f 69 6e 20 74 79 70 65 20  orted join type 
19f30 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73  */.../*.** Flags
19f40 20 61 70 70 72 6f 70 72 69 61 74 65 20 66 6f 72   appropriate for
19f50 20 74 68 65 20 77 63 74 72 6c 46 6c 61 67 73 20   the wctrlFlags 
19f60 70 61 72 61 6d 65 74 65 72 20 6f 66 20 73 71 6c  parameter of sql
19f70 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28 29  ite3WhereBegin()
19f80 0a 2a 2a 20 61 6e 64 20 74 68 65 20 57 68 65 72  .** and the Wher
19f90 65 49 6e 66 6f 2e 77 63 74 72 6c 46 6c 61 67 73  eInfo.wctrlFlags
19fa0 20 6d 65 6d 62 65 72 2e 0a 2a 2a 0a 2a 2a 20 56   member..**.** V
19fb0 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74 73  alue constraints
19fc0 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20 61   (enforced via a
19fd0 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20  ssert()):.**    
19fe0 20 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54   WHERE_USE_LIMIT
19ff0 20 20 3d 3d 20 53 46 5f 46 69 78 65 64 4c 69 6d    == SF_FixedLim
1a000 69 74 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  it.*/.#define WH
1a010 45 52 45 5f 4f 52 44 45 52 42 59 5f 4e 4f 52 4d  ERE_ORDERBY_NORM
1a020 41 4c 20 20 20 30 78 30 30 30 30 20 2f 2a 20 4e  AL   0x0000 /* N
1a030 6f 2d 6f 70 20 2a 2f 0a 23 64 65 66 69 6e 65 20  o-op */.#define 
1a040 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 49  WHERE_ORDERBY_MI
1a050 4e 20 20 20 20 20 20 30 78 30 30 30 31 20 2f 2a  N      0x0001 /*
1a060 20 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73   ORDER BY proces
1a070 73 69 6e 67 20 66 6f 72 20 6d 69 6e 28 29 20 66  sing for min() f
1a080 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  unc */.#define W
1a090 48 45 52 45 5f 4f 52 44 45 52 42 59 5f 4d 41 58  HERE_ORDERBY_MAX
1a0a0 20 20 20 20 20 20 30 78 30 30 30 32 20 2f 2a 20        0x0002 /* 
1a0b0 4f 52 44 45 52 20 42 59 20 70 72 6f 63 65 73 73  ORDER BY process
1a0c0 69 6e 67 20 66 6f 72 20 6d 61 78 28 29 20 66 75  ing for max() fu
1a0d0 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  nc */.#define WH
1a0e0 45 52 45 5f 4f 4e 45 50 41 53 53 5f 44 45 53 49  ERE_ONEPASS_DESI
1a0f0 52 45 44 20 20 30 78 30 30 30 34 20 2f 2a 20 57  RED  0x0004 /* W
1a100 61 6e 74 20 74 6f 20 64 6f 20 6f 6e 65 2d 70 61  ant to do one-pa
1a110 73 73 20 55 50 44 41 54 45 2f 44 45 4c 45 54 45  ss UPDATE/DELETE
1a120 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1a130 45 5f 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 52  E_ONEPASS_MULTIR
1a140 4f 57 20 30 78 30 30 30 38 20 2f 2a 20 4f 4e 45  OW 0x0008 /* ONE
1a150 50 41 53 53 20 69 73 20 6f 6b 20 77 69 74 68 20  PASS is ok with 
1a160 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73 20 2a 2f  multiple rows */
1a170 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44  .#define WHERE_D
1a180 55 50 4c 49 43 41 54 45 53 5f 4f 4b 20 20 20 20  UPLICATES_OK    
1a190 30 78 30 30 31 30 20 2f 2a 20 4f 6b 20 74 6f 20  0x0010 /* Ok to 
1a1a0 72 65 74 75 72 6e 20 61 20 72 6f 77 20 6d 6f 72  return a row mor
1a1b0 65 20 74 68 61 6e 20 6f 6e 63 65 20 2a 2f 0a 23  e than once */.#
1a1c0 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52 5f  define WHERE_OR_
1a1d0 53 55 42 43 4c 41 55 53 45 20 20 20 20 20 30 78  SUBCLAUSE     0x
1a1e0 30 30 32 30 20 2f 2a 20 50 72 6f 63 65 73 73 69  0020 /* Processi
1a1f0 6e 67 20 61 20 73 75 62 2d 57 48 45 52 45 20 61  ng a sub-WHERE a
1a200 73 20 70 61 72 74 20 6f 66 0a 20 20 20 20 20 20  s part of.      
1a210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a230 2a 2a 20 74 68 65 20 4f 52 20 6f 70 74 69 6d 69  ** the OR optimi
1a240 7a 61 74 69 6f 6e 20 20 2a 2f 0a 23 64 65 66 69  zation  */.#defi
1a250 6e 65 20 57 48 45 52 45 5f 47 52 4f 55 50 42 59  ne WHERE_GROUPBY
1a260 20 20 20 20 20 20 20 20 20 20 30 78 30 30 34 30            0x0040
1a270 20 2f 2a 20 70 4f 72 64 65 72 42 79 20 69 73 20   /* pOrderBy is 
1a280 72 65 61 6c 6c 79 20 61 20 47 52 4f 55 50 20 42  really a GROUP B
1a290 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45  Y */.#define WHE
1a2a0 52 45 5f 44 49 53 54 49 4e 43 54 42 59 20 20 20  RE_DISTINCTBY   
1a2b0 20 20 20 20 30 78 30 30 38 30 20 2f 2a 20 70 4f      0x0080 /* pO
1a2c0 72 64 65 72 62 79 20 69 73 20 72 65 61 6c 6c 79  rderby is really
1a2d0 20 61 20 44 49 53 54 49 4e 43 54 20 63 6c 61 75   a DISTINCT clau
1a2e0 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  se */.#define WH
1a2f0 45 52 45 5f 57 41 4e 54 5f 44 49 53 54 49 4e 43  ERE_WANT_DISTINC
1a300 54 20 20 20 20 30 78 30 31 30 30 20 2f 2a 20 41  T    0x0100 /* A
1a310 6c 6c 20 6f 75 74 70 75 74 20 6e 65 65 64 73 20  ll output needs 
1a320 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74 20 2a  to be distinct *
1a330 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1a340 53 4f 52 54 42 59 47 52 4f 55 50 20 20 20 20 20  SORTBYGROUP     
1a350 20 30 78 30 32 30 30 20 2f 2a 20 53 75 70 70 6f   0x0200 /* Suppo
1a360 72 74 20 73 71 6c 69 74 65 33 57 68 65 72 65 49  rt sqlite3WhereI
1a370 73 53 6f 72 74 65 64 28 29 20 2a 2f 0a 23 64 65  sSorted() */.#de
1a380 66 69 6e 65 20 57 48 45 52 45 5f 53 45 45 4b 5f  fine WHERE_SEEK_
1a390 54 41 42 4c 45 20 20 20 20 20 20 20 30 78 30 34  TABLE       0x04
1a3a0 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20 64 65 66  00 /* Do not def
1a3b0 65 72 20 73 65 65 6b 73 20 6f 6e 20 6d 61 69 6e  er seeks on main
1a3c0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
1a3d0 65 20 57 48 45 52 45 5f 4f 52 44 45 52 42 59 5f  e WHERE_ORDERBY_
1a3e0 4c 49 4d 49 54 20 20 20 20 30 78 30 38 30 30 20  LIMIT    0x0800 
1a3f0 2f 2a 20 4f 52 44 45 52 42 59 2b 4c 49 4d 49 54  /* ORDERBY+LIMIT
1a400 20 6f 6e 20 74 68 65 20 69 6e 6e 65 72 20 6c 6f   on the inner lo
1a410 6f 70 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  op */.          
1a420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1a430 20 20 20 20 20 30 78 31 30 30 30 20 20 20 20 6e       0x1000    n
1a440 6f 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65  ot currently use
1a450 64 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20  d */.           
1a460 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1a470 20 20 20 20 30 78 32 30 30 30 20 20 20 20 6e 6f      0x2000    no
1a480 74 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64  t currently used
1a490 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1a4a0 45 5f 55 53 45 5f 4c 49 4d 49 54 20 20 20 20 20  E_USE_LIMIT     
1a4b0 20 20 20 30 78 34 30 30 30 20 2f 2a 20 55 73 65     0x4000 /* Use
1a4c0 20 74 68 65 20 4c 49 4d 49 54 20 69 6e 20 63 6f   the LIMIT in co
1a4d0 73 74 20 65 73 74 69 6d 61 74 65 73 20 2a 2f 0a  st estimates */.
1a4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a4f0 20 20 20 20 20 20 20 20 2f 2a 20 20 20 20 20 30          /*     0
1a500 78 38 30 30 30 20 20 20 20 6e 6f 74 20 63 75 72  x8000    not cur
1a510 72 65 6e 74 6c 79 20 75 73 65 64 20 2a 2f 0a 0a  rently used */..
1a520 2f 2a 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72  /* Allowed retur
1a530 6e 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71  n values from sq
1a540 6c 69 74 65 33 57 68 65 72 65 49 73 44 69 73 74  lite3WhereIsDist
1a550 69 6e 63 74 28 29 0a 2a 2f 0a 23 64 65 66 69 6e  inct().*/.#defin
1a560 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1a570 5f 4e 4f 4f 50 20 20 20 20 20 20 30 20 20 2f 2a  _NOOP      0  /*
1a580 20 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72   DISTINCT keywor
1a590 64 20 6e 6f 74 20 75 73 65 64 20 2a 2f 0a 23 64  d not used */.#d
1a5a0 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1a5b0 49 4e 43 54 5f 55 4e 49 51 55 45 20 20 20 20 31  INCT_UNIQUE    1
1a5c0 20 20 2f 2a 20 4e 6f 20 64 75 70 6c 69 63 61 74    /* No duplicat
1a5d0 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48  es */.#define WH
1a5e0 45 52 45 5f 44 49 53 54 49 4e 43 54 5f 4f 52 44  ERE_DISTINCT_ORD
1a5f0 45 52 45 44 20 20 20 32 20 20 2f 2a 20 41 6c 6c  ERED   2  /* All
1a600 20 64 75 70 6c 69 63 61 74 65 73 20 61 72 65 20   duplicates are 
1a610 61 64 6a 61 63 65 6e 74 20 2a 2f 0a 23 64 65 66  adjacent */.#def
1a620 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e  ine WHERE_DISTIN
1a630 43 54 5f 55 4e 4f 52 44 45 52 45 44 20 33 20 20  CT_UNORDERED 3  
1a640 2f 2a 20 44 75 70 6c 69 63 61 74 65 73 20 61 72  /* Duplicates ar
1a650 65 20 73 63 61 74 74 65 72 65 64 20 2a 2f 0a 0a  e scattered */..
1a660 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65 43 6f 6e 74  /*.** A NameCont
1a670 65 78 74 20 64 65 66 69 6e 65 73 20 61 20 63 6f  ext defines a co
1a680 6e 74 65 78 74 20 69 6e 20 77 68 69 63 68 20 74  ntext in which t
1a690 6f 20 72 65 73 6f 6c 76 65 20 74 61 62 6c 65 20  o resolve table 
1a6a0 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a 2a 20 6e 61  and column.** na
1a6b0 6d 65 73 2e 20 20 54 68 65 20 63 6f 6e 74 65 78  mes.  The contex
1a6c0 74 20 63 6f 6e 73 69 73 74 73 20 6f 66 20 61 20  t consists of a 
1a6d0 6c 69 73 74 20 6f 66 20 74 61 62 6c 65 73 20 28  list of tables (
1a6e0 74 68 65 20 70 53 72 63 4c 69 73 74 29 20 66 69  the pSrcList) fi
1a6f0 65 6c 64 20 61 6e 64 0a 2a 2a 20 61 20 6c 69 73  eld and.** a lis
1a700 74 20 6f 66 20 6e 61 6d 65 64 20 65 78 70 72 65  t of named expre
1a710 73 73 69 6f 6e 20 28 70 45 4c 69 73 74 29 2e 20  ssion (pEList). 
1a720 20 54 68 65 20 6e 61 6d 65 64 20 65 78 70 72 65   The named expre
1a730 73 73 69 6f 6e 20 6c 69 73 74 20 6d 61 79 0a 2a  ssion list may.*
1a740 2a 20 62 65 20 4e 55 4c 4c 2e 20 20 54 68 65 20  * be NULL.  The 
1a750 70 53 72 63 20 63 6f 72 72 65 73 70 6f 6e 64 73  pSrc corresponds
1a760 20 74 6f 20 74 68 65 20 46 52 4f 4d 20 63 6c 61   to the FROM cla
1a770 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43 54 20  use of a SELECT 
1a780 6f 72 0a 2a 2a 20 74 6f 20 74 68 65 20 74 61 62  or.** to the tab
1a790 6c 65 20 62 65 69 6e 67 20 6f 70 65 72 61 74 65  le being operate
1a7a0 64 20 6f 6e 20 62 79 20 49 4e 53 45 52 54 2c 20  d on by INSERT, 
1a7b0 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45 54  UPDATE, or DELET
1a7c0 45 2e 20 20 54 68 65 0a 2a 2a 20 70 45 4c 69 73  E.  The.** pELis
1a7d0 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74 6f  t corresponds to
1a7e0 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74 20   the result set 
1a7f0 6f 66 20 61 20 53 45 4c 45 43 54 20 61 6e 64 20  of a SELECT and 
1a800 69 73 20 4e 55 4c 4c 20 66 6f 72 0a 2a 2a 20 6f  is NULL for.** o
1a810 74 68 65 72 20 73 74 61 74 65 6d 65 6e 74 73 2e  ther statements.
1a820 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65  .**.** NameConte
1a830 78 74 73 20 63 61 6e 20 62 65 20 6e 65 73 74 65  xts can be neste
1a840 64 2e 20 20 57 68 65 6e 20 72 65 73 6f 6c 76 69  d.  When resolvi
1a850 6e 67 20 6e 61 6d 65 73 2c 20 74 68 65 20 69 6e  ng names, the in
1a860 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20 63 6f 6e 74  ner-most.** cont
1a870 65 78 74 20 69 73 20 73 65 61 72 63 68 65 64 20  ext is searched 
1a880 66 69 72 73 74 2e 20 20 49 66 20 6e 6f 20 6d 61  first.  If no ma
1a890 74 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68  tch is found, th
1a8a0 65 20 6e 65 78 74 20 6f 75 74 65 72 0a 2a 2a 20  e next outer.** 
1a8b0 63 6f 6e 74 65 78 74 20 69 73 20 63 68 65 63 6b  context is check
1a8c0 65 64 2e 20 20 49 66 20 74 68 65 72 65 20 69 73  ed.  If there is
1a8d0 20 73 74 69 6c 6c 20 6e 6f 20 6d 61 74 63 68 2c   still no match,
1a8e0 20 74 68 65 20 6e 65 78 74 20 63 6f 6e 74 65 78   the next contex
1a8f0 74 0a 2a 2a 20 69 73 20 63 68 65 63 6b 65 64 2e  t.** is checked.
1a900 20 20 54 68 69 73 20 70 72 6f 63 65 73 73 20 63    This process c
1a910 6f 6e 74 69 6e 75 65 73 20 75 6e 74 69 6c 20 65  ontinues until e
1a920 69 74 68 65 72 20 61 20 6d 61 74 63 68 20 69 73  ither a match is
1a930 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72 20 61 6c 6c   found.** or all
1a940 20 63 6f 6e 74 65 78 74 73 20 61 72 65 20 63 68   contexts are ch
1a950 65 63 6b 2e 20 20 57 68 65 6e 20 61 20 6d 61 74  eck.  When a mat
1a960 63 68 20 69 73 20 66 6f 75 6e 64 2c 20 74 68 65  ch is found, the
1a970 20 6e 52 65 66 20 6d 65 6d 62 65 72 20 6f 66 0a   nRef member of.
1a980 2a 2a 20 74 68 65 20 63 6f 6e 74 65 78 74 20 63  ** the context c
1a990 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d 61  ontaining the ma
1a9a0 74 63 68 20 69 73 20 69 6e 63 72 65 6d 65 6e 74  tch is increment
1a9b0 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 73  ed..**.** Each s
1a9c0 75 62 71 75 65 72 79 20 67 65 74 73 20 61 20 6e  ubquery gets a n
1a9d0 65 77 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2e 20  ew NameContext. 
1a9e0 20 54 68 65 20 70 4e 65 78 74 20 66 69 65 6c 64   The pNext field
1a9f0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a   points to the.*
1aa00 2a 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 69 6e  * NameContext in
1aa10 20 74 68 65 20 70 61 72 65 6e 74 20 71 75 65 72   the parent quer
1aa20 79 2e 20 20 54 68 75 73 20 74 68 65 20 70 72 6f  y.  Thus the pro
1aa30 63 65 73 73 20 6f 66 20 73 63 61 6e 6e 69 6e 67  cess of scanning
1aa40 20 74 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74   the.** NameCont
1aa50 65 78 74 20 6c 69 73 74 20 63 6f 72 72 65 73 70  ext list corresp
1aa60 6f 6e 64 73 20 74 6f 20 73 65 61 72 63 68 69 6e  onds to searchin
1aa70 67 20 74 68 72 6f 75 67 68 20 73 75 63 63 65 73  g through succes
1aa80 73 69 76 65 6c 79 20 6f 75 74 65 72 0a 2a 2a 20  sively outer.** 
1aa90 73 75 62 71 75 65 72 69 65 73 20 6c 6f 6f 6b 69  subqueries looki
1aaa0 6e 67 20 66 6f 72 20 61 20 6d 61 74 63 68 2e 0a  ng for a match..
1aab0 2a 2f 0a 73 74 72 75 63 74 20 4e 61 6d 65 43 6f  */.struct NameCo
1aac0 6e 74 65 78 74 20 7b 0a 20 20 50 61 72 73 65 20  ntext {.  Parse 
1aad0 2a 70 50 61 72 73 65 3b 20 20 20 20 20 20 20 2f  *pParse;       /
1aae0 2a 20 54 68 65 20 70 61 72 73 65 72 20 2a 2f 0a  * The parser */.
1aaf0 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 4c    SrcList *pSrcL
1ab00 69 73 74 3b 20 20 20 2f 2a 20 4f 6e 65 20 6f 72  ist;   /* One or
1ab10 20 6d 6f 72 65 20 74 61 62 6c 65 73 20 75 73 65   more tables use
1ab20 64 20 74 6f 20 72 65 73 6f 6c 76 65 20 6e 61 6d  d to resolve nam
1ab30 65 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  es */.  ExprList
1ab40 20 2a 70 45 4c 69 73 74 3b 20 20 20 20 2f 2a 20   *pEList;    /* 
1ab50 4f 70 74 69 6f 6e 61 6c 20 6c 69 73 74 20 6f 66  Optional list of
1ab60 20 72 65 73 75 6c 74 2d 73 65 74 20 63 6f 6c 75   result-set colu
1ab70 6d 6e 73 20 2a 2f 0a 20 20 41 67 67 49 6e 66 6f  mns */.  AggInfo
1ab80 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 2f 2a   *pAggInfo;   /*
1ab90 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f   Information abo
1aba0 75 74 20 61 67 67 72 65 67 61 74 65 73 20 61 74  ut aggregates at
1abb0 20 74 68 69 73 20 6c 65 76 65 6c 20 2a 2f 0a 20   this level */. 
1abc0 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e   NameContext *pN
1abd0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 75  ext;  /* Next ou
1abe0 74 65 72 20 6e 61 6d 65 20 63 6f 6e 74 65 78 74  ter name context
1abf0 2e 20 20 4e 55 4c 4c 20 66 6f 72 20 6f 75 74 65  .  NULL for oute
1ac00 72 6d 6f 73 74 20 2a 2f 0a 20 20 69 6e 74 20 6e  rmost */.  int n
1ac10 52 65 66 3b 20 20 20 20 20 20 20 20 20 20 20 20  Ref;            
1ac20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6e 61 6d  /* Number of nam
1ac30 65 73 20 72 65 73 6f 6c 76 65 64 20 62 79 20 74  es resolved by t
1ac40 68 69 73 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20  his context */. 
1ac50 20 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20   int nErr;      
1ac60 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1ac70 6f 66 20 65 72 72 6f 72 73 20 65 6e 63 6f 75 6e  of errors encoun
1ac80 74 65 72 65 64 20 77 68 69 6c 65 20 72 65 73 6f  tered while reso
1ac90 6c 76 69 6e 67 20 6e 61 6d 65 73 20 2a 2f 0a 20  lving names */. 
1aca0 20 75 31 36 20 6e 63 46 6c 61 67 73 3b 20 20 20   u16 ncFlags;   
1acb0 20 20 20 20 20 20 2f 2a 20 5a 65 72 6f 20 6f 72        /* Zero or
1acc0 20 6d 6f 72 65 20 4e 43 5f 2a 20 66 6c 61 67 73   more NC_* flags
1acd0 20 64 65 66 69 6e 65 64 20 62 65 6c 6f 77 20 2a   defined below *
1ace0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f  /.};../*.** Allo
1acf0 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 74  wed values for t
1ad00 68 65 20 4e 61 6d 65 43 6f 6e 74 65 78 74 2c 20  he NameContext, 
1ad10 6e 63 46 6c 61 67 73 20 66 69 65 6c 64 2e 0a 2a  ncFlags field..*
1ad20 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1ad30 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63  raints (all chec
1ad40 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ked via assert()
1ad50 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f 48 61 73 41  ):.**    NC_HasA
1ad60 67 67 20 20 20 20 3d 3d 20 53 46 5f 48 61 73 41  gg    == SF_HasA
1ad70 67 67 0a 2a 2a 20 20 20 20 4e 43 5f 4d 69 6e 4d  gg.**    NC_MinM
1ad80 61 78 41 67 67 20 3d 3d 20 53 46 5f 4d 69 6e 4d  axAgg == SF_MinM
1ad90 61 78 41 67 67 20 3d 3d 20 53 51 4c 49 54 45 5f  axAgg == SQLITE_
1ada0 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a 2a 0a 2a  FUNC_MINMAX.**.*
1adb0 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 41 6c 6c  /.#define NC_All
1adc0 6f 77 41 67 67 20 20 30 78 30 30 30 31 20 20 2f  owAgg  0x0001  /
1add0 2a 20 41 67 67 72 65 67 61 74 65 20 66 75 6e 63  * Aggregate func
1ade0 74 69 6f 6e 73 20 61 72 65 20 61 6c 6c 6f 77 65  tions are allowe
1adf0 64 20 68 65 72 65 20 2a 2f 0a 23 64 65 66 69 6e  d here */.#defin
1ae00 65 20 4e 43 5f 50 61 72 74 49 64 78 20 20 20 30  e NC_PartIdx   0
1ae10 78 30 30 30 32 20 20 2f 2a 20 54 72 75 65 20 69  x0002  /* True i
1ae20 66 20 72 65 73 6f 6c 76 69 6e 67 20 61 20 70 61  f resolving a pa
1ae30 72 74 69 61 6c 20 69 6e 64 65 78 20 57 48 45 52  rtial index WHER
1ae40 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f  E */.#define NC_
1ae50 49 73 43 68 65 63 6b 20 20 20 30 78 30 30 30 34  IsCheck   0x0004
1ae60 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72 65 73    /* True if res
1ae70 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20 69 6e 20  olving names in 
1ae80 61 20 43 48 45 43 4b 20 63 6f 6e 73 74 72 61 69  a CHECK constrai
1ae90 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  nt */.#define NC
1aea0 5f 49 6e 41 67 67 46 75 6e 63 20 30 78 30 30 30  _InAggFunc 0x000
1aeb0 38 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61 6e  8  /* True if an
1aec0 61 6c 79 7a 69 6e 67 20 61 72 67 75 6d 65 6e 74  alyzing argument
1aed0 73 20 74 6f 20 61 6e 20 61 67 67 20 66 75 6e 63  s to an agg func
1aee0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 48   */.#define NC_H
1aef0 61 73 41 67 67 20 20 20 20 30 78 30 30 31 30 20  asAgg    0x0010 
1af00 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20   /* One or more 
1af10 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69  aggregate functi
1af20 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a 23 64 65 66  ons seen */.#def
1af30 69 6e 65 20 4e 43 5f 49 64 78 45 78 70 72 20 20  ine NC_IdxExpr  
1af40 20 30 78 30 30 32 30 20 20 2f 2a 20 54 72 75 65   0x0020  /* True
1af50 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20 63 6f   if resolving co
1af60 6c 75 6d 6e 73 20 6f 66 20 43 52 45 41 54 45 20  lumns of CREATE 
1af70 49 4e 44 45 58 20 2a 2f 0a 23 64 65 66 69 6e 65  INDEX */.#define
1af80 20 4e 43 5f 56 61 72 53 65 6c 65 63 74 20 30 78   NC_VarSelect 0x
1af90 30 30 34 30 20 20 2f 2a 20 41 20 63 6f 72 72 65  0040  /* A corre
1afa0 6c 61 74 65 64 20 73 75 62 71 75 65 72 79 20 68  lated subquery h
1afb0 61 73 20 62 65 65 6e 20 73 65 65 6e 20 2a 2f 0a  as been seen */.
1afc0 23 64 65 66 69 6e 65 20 4e 43 5f 4d 69 6e 4d 61  #define NC_MinMa
1afd0 78 41 67 67 20 30 78 31 30 30 30 20 20 2f 2a 20  xAgg 0x1000  /* 
1afe0 6d 69 6e 2f 6d 61 78 20 61 67 67 72 65 67 61 74  min/max aggregat
1aff0 65 73 20 73 65 65 6e 2e 20 20 53 65 65 20 6e 6f  es seen.  See no
1b000 74 65 20 61 62 6f 76 65 20 2a 2f 0a 0a 2f 2a 0a  te above */../*.
1b010 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
1b020 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
1b030 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61 69  structure contai
1b040 6e 73 20 61 6c 6c 20 69 6e 66 6f 72 6d 61 74 69  ns all informati
1b050 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64 20 74 6f 20  on.** needed to 
1b060 67 65 6e 65 72 61 74 65 20 63 6f 64 65 20 66 6f  generate code fo
1b070 72 20 61 20 73 69 6e 67 6c 65 20 53 45 4c 45 43  r a single SELEC
1b080 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 0a  T statement..**.
1b090 2a 2a 20 6e 4c 69 6d 69 74 20 69 73 20 73 65 74  ** nLimit is set
1b0a0 20 74 6f 20 2d 31 20 69 66 20 74 68 65 72 65 20   to -1 if there 
1b0b0 69 73 20 6e 6f 20 4c 49 4d 49 54 20 63 6c 61 75  is no LIMIT clau
1b0c0 73 65 2e 20 20 6e 4f 66 66 73 65 74 20 69 73 20  se.  nOffset is 
1b0d0 73 65 74 20 74 6f 20 30 2e 0a 2a 2a 20 49 66 20  set to 0..** If 
1b0e0 74 68 65 72 65 20 69 73 20 61 20 4c 49 4d 49 54  there is a LIMIT
1b0f0 20 63 6c 61 75 73 65 2c 20 74 68 65 20 70 61 72   clause, the par
1b100 73 65 72 20 73 65 74 73 20 6e 4c 69 6d 69 74 20  ser sets nLimit 
1b110 74 6f 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  to the value of 
1b120 74 68 65 0a 2a 2a 20 6c 69 6d 69 74 20 61 6e 64  the.** limit and
1b130 20 6e 4f 66 66 73 65 74 20 74 6f 20 74 68 65 20   nOffset to the 
1b140 76 61 6c 75 65 20 6f 66 20 74 68 65 20 6f 66 66  value of the off
1b150 73 65 74 20 28 6f 72 20 30 20 69 66 20 74 68 65  set (or 0 if the
1b160 72 65 20 69 73 20 6e 6f 74 0a 2a 2a 20 6f 66 66  re is not.** off
1b170 73 65 74 29 2e 20 20 42 75 74 20 6c 61 74 65 72  set).  But later
1b180 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20 61 6e 64 20   on, nLimit and 
1b190 6e 4f 66 66 73 65 74 20 62 65 63 6f 6d 65 20 74  nOffset become t
1b1a0 68 65 20 6d 65 6d 6f 72 79 20 6c 6f 63 61 74 69  he memory locati
1b1b0 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68 65 20 56 44  ons.** in the VD
1b1c0 42 45 20 74 68 61 74 20 72 65 63 6f 72 64 20 74  BE that record t
1b1d0 68 65 20 6c 69 6d 69 74 20 61 6e 64 20 6f 66 66  he limit and off
1b1e0 73 65 74 20 63 6f 75 6e 74 65 72 73 2e 0a 2a 2a  set counters..**
1b1f0 0a 2a 2a 20 61 64 64 72 4f 70 65 6e 45 70 68 6d  .** addrOpenEphm
1b200 5b 5d 20 65 6e 74 72 69 65 73 20 63 6f 6e 74 61  [] entries conta
1b210 69 6e 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  in the address o
1b220 66 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72  f OP_OpenEphemer
1b230 61 6c 20 6f 70 63 6f 64 65 73 2e 0a 2a 2a 20 54  al opcodes..** T
1b240 68 65 73 65 20 61 64 64 72 65 73 73 65 73 20 6d  hese addresses m
1b250 75 73 74 20 62 65 20 73 74 6f 72 65 64 20 73 6f  ust be stored so
1b260 20 74 68 61 74 20 77 65 20 63 61 6e 20 67 6f 20   that we can go 
1b270 62 61 63 6b 20 61 6e 64 20 66 69 6c 6c 20 69 6e  back and fill in
1b280 0a 2a 2a 20 74 68 65 20 50 34 5f 4b 45 59 49 4e  .** the P4_KEYIN
1b290 46 4f 20 61 6e 64 20 50 32 20 70 61 72 61 6d 65  FO and P2 parame
1b2a0 74 65 72 73 20 6c 61 74 65 72 2e 20 20 4e 65 69  ters later.  Nei
1b2b0 74 68 65 72 20 74 68 65 20 4b 65 79 49 6e 66 6f  ther the KeyInfo
1b2c0 20 6e 6f 72 0a 2a 2a 20 74 68 65 20 6e 75 6d 62   nor.** the numb
1b2d0 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
1b2e0 20 50 32 20 63 61 6e 20 62 65 20 63 6f 6d 70 75   P2 can be compu
1b2f0 74 65 64 20 61 74 20 74 68 65 20 73 61 6d 65 20  ted at the same 
1b300 74 69 6d 65 0a 2a 2a 20 61 73 20 74 68 65 20 4f  time.** as the O
1b310 50 5f 4f 70 65 6e 45 70 68 6d 20 69 6e 73 74 72  P_OpenEphm instr
1b320 75 63 74 69 6f 6e 20 69 73 20 63 6f 64 65 64 20  uction is coded 
1b330 62 65 63 61 75 73 65 20 6e 6f 74 0a 2a 2a 20 65  because not.** e
1b340 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69 6f  nough informatio
1b350 6e 20 61 62 6f 75 74 20 74 68 65 20 63 6f 6d 70  n about the comp
1b360 6f 75 6e 64 20 71 75 65 72 79 20 69 73 20 6b 6e  ound query is kn
1b370 6f 77 6e 20 61 74 20 74 68 61 74 20 70 6f 69 6e  own at that poin
1b380 74 2e 0a 2a 2a 20 54 68 65 20 4b 65 79 49 6e 66  t..** The KeyInf
1b390 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 54 72  o for addrOpenTr
1b3a0 61 6e 5b 30 5d 20 61 6e 64 20 5b 31 5d 20 63 6f  an[0] and [1] co
1b3b0 6e 74 61 69 6e 73 20 63 6f 6c 6c 61 74 69 6e 67  ntains collating
1b3c0 20 73 65 71 75 65 6e 63 65 73 0a 2a 2a 20 66 6f   sequences.** fo
1b3d0 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 65 74  r the result set
1b3e0 2e 20 20 54 68 65 20 4b 65 79 49 6e 66 6f 20 66  .  The KeyInfo f
1b3f0 6f 72 20 61 64 64 72 4f 70 65 6e 45 70 68 6d 5b  or addrOpenEphm[
1b400 32 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c  2] contains coll
1b410 61 74 69 6e 67 0a 2a 2a 20 73 65 71 75 65 6e 63  ating.** sequenc
1b420 65 73 20 66 6f 72 20 74 68 65 20 4f 52 44 45 52  es for the ORDER
1b430 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73   BY clause..*/.s
1b440 74 72 75 63 74 20 53 65 6c 65 63 74 20 7b 0a 20  truct Select {. 
1b450 20 45 78 70 72 4c 69 73 74 20 2a 70 45 4c 69 73   ExprList *pELis
1b460 74 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20 66  t;      /* The f
1b470 69 65 6c 64 73 20 6f 66 20 74 68 65 20 72 65 73  ields of the res
1b480 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20  ult */.  u8 op; 
1b490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b4a0 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54 4b 5f 55 4e  /* One of: TK_UN
1b4b0 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54 4b 5f 49 4e  ION TK_ALL TK_IN
1b4c0 54 45 52 53 45 43 54 20 54 4b 5f 45 58 43 45 50  TERSECT TK_EXCEP
1b4d0 54 20 2a 2f 0a 20 20 4c 6f 67 45 73 74 20 6e 53  T */.  LogEst nS
1b4e0 65 6c 65 63 74 52 6f 77 3b 20 20 20 20 20 2f 2a  electRow;     /*
1b4f0 20 45 73 74 69 6d 61 74 65 64 20 6e 75 6d 62 65   Estimated numbe
1b500 72 20 6f 66 20 72 65 73 75 6c 74 20 72 6f 77 73  r of result rows
1b510 20 2a 2f 0a 20 20 75 33 32 20 73 65 6c 46 6c 61   */.  u32 selFla
1b520 67 73 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  gs;          /* 
1b530 56 61 72 69 6f 75 73 20 53 46 5f 2a 20 76 61 6c  Various SF_* val
1b540 75 65 73 20 2a 2f 0a 20 20 69 6e 74 20 69 4c 69  ues */.  int iLi
1b550 6d 69 74 2c 20 69 4f 66 66 73 65 74 3b 20 20 20  mit, iOffset;   
1b560 2f 2a 20 4d 65 6d 6f 72 79 20 72 65 67 69 73 74  /* Memory regist
1b570 65 72 73 20 68 6f 6c 64 69 6e 67 20 4c 49 4d 49  ers holding LIMI
1b580 54 20 26 20 4f 46 46 53 45 54 20 63 6f 75 6e 74  T & OFFSET count
1b590 65 72 73 20 2a 2f 0a 23 69 66 20 53 45 4c 45 43  ers */.#if SELEC
1b5a0 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 20  TTRACE_ENABLED. 
1b5b0 20 63 68 61 72 20 7a 53 65 6c 4e 61 6d 65 5b 31   char zSelName[1
1b5c0 32 5d 3b 20 20 20 20 20 2f 2a 20 53 79 6d 62 6f  2];     /* Symbo
1b5d0 6c 69 63 20 6e 61 6d 65 20 6f 66 20 74 68 69 73  lic name of this
1b5e0 20 53 45 4c 45 43 54 20 75 73 65 20 66 6f 72 20   SELECT use for 
1b5f0 64 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 65 6e  debugging */.#en
1b600 64 69 66 0a 20 20 69 6e 74 20 61 64 64 72 4f 70  dif.  int addrOp
1b610 65 6e 45 70 68 6d 5b 32 5d 3b 20 20 20 2f 2a 20  enEphm[2];   /* 
1b620 4f 50 5f 4f 70 65 6e 45 70 68 65 6d 20 6f 70 63  OP_OpenEphem opc
1b630 6f 64 65 73 20 72 65 6c 61 74 65 64 20 74 6f 20  odes related to 
1b640 74 68 69 73 20 73 65 6c 65 63 74 20 2a 2f 0a 20  this select */. 
1b650 20 53 72 63 4c 69 73 74 20 2a 70 53 72 63 3b 20   SrcList *pSrc; 
1b660 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 46          /* The F
1b670 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ROM clause */.  
1b680 45 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20  Expr *pWhere;   
1b690 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 57 48         /* The WH
1b6a0 45 52 45 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  ERE clause */.  
1b6b0 45 78 70 72 4c 69 73 74 20 2a 70 47 72 6f 75 70  ExprList *pGroup
1b6c0 42 79 3b 20 20 20 20 2f 2a 20 54 68 65 20 47 52  By;    /* The GR
1b6d0 4f 55 50 20 42 59 20 63 6c 61 75 73 65 20 2a 2f  OUP BY clause */
1b6e0 0a 20 20 45 78 70 72 20 2a 70 48 61 76 69 6e 67  .  Expr *pHaving
1b6f0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65  ;         /* The
1b700 20 48 41 56 49 4e 47 20 63 6c 61 75 73 65 20 2a   HAVING clause *
1b710 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 4f  /.  ExprList *pO
1b720 72 64 65 72 42 79 3b 20 20 20 20 2f 2a 20 54 68  rderBy;    /* Th
1b730 65 20 4f 52 44 45 52 20 42 59 20 63 6c 61 75 73  e ORDER BY claus
1b740 65 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70  e */.  Select *p
1b750 50 72 69 6f 72 3b 20 20 20 20 20 20 20 20 2f 2a  Prior;        /*
1b760 20 50 72 69 6f 72 20 73 65 6c 65 63 74 20 69 6e   Prior select in
1b770 20 61 20 63 6f 6d 70 6f 75 6e 64 20 73 65 6c 65   a compound sele
1b780 63 74 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ct statement */.
1b790 20 20 53 65 6c 65 63 74 20 2a 70 4e 65 78 74 3b    Select *pNext;
1b7a0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74           /* Next
1b7b0 20 73 65 6c 65 63 74 20 74 6f 20 74 68 65 20 6c   select to the l
1b7c0 65 66 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e  eft in a compoun
1b7d0 64 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 4c 69  d */.  Expr *pLi
1b7e0 6d 69 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  mit;          /*
1b7f0 20 4c 49 4d 49 54 20 65 78 70 72 65 73 73 69 6f   LIMIT expressio
1b800 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e 73 20 6e 6f  n. NULL means no
1b810 74 20 75 73 65 64 2e 20 2a 2f 0a 20 20 45 78 70  t used. */.  Exp
1b820 72 20 2a 70 4f 66 66 73 65 74 3b 20 20 20 20 20  r *pOffset;     
1b830 20 20 20 20 2f 2a 20 4f 46 46 53 45 54 20 65 78      /* OFFSET ex
1b840 70 72 65 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d  pression. NULL m
1b850 65 61 6e 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a  eans not used. *
1b860 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1b870 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 49             /* WI
1b880 54 48 20 63 6c 61 75 73 65 20 61 74 74 61 63 68  TH clause attach
1b890 65 64 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63  ed to this selec
1b8a0 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20 2a 2f 0a 7d  t. Or NULL. */.}
1b8b0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64  ;../*.** Allowed
1b8c0 20 76 61 6c 75 65 73 20 66 6f 72 20 53 65 6c 65   values for Sele
1b8d0 63 74 2e 73 65 6c 46 6c 61 67 73 2e 20 20 54 68  ct.selFlags.  Th
1b8e0 65 20 22 53 46 22 20 70 72 65 66 69 78 20 73 74  e "SF" prefix st
1b8f0 61 6e 64 73 20 66 6f 72 0a 2a 2a 20 22 53 65 6c  ands for.** "Sel
1b900 65 63 74 20 46 6c 61 67 22 2e 0a 2a 2a 0a 2a 2a  ect Flag"..**.**
1b910 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
1b920 74 73 20 28 61 6c 6c 20 63 68 65 63 6b 65 64 20  ts (all checked 
1b930 76 69 61 20 61 73 73 65 72 74 28 29 29 0a 2a 2a  via assert()).**
1b940 20 20 20 20 20 53 46 5f 48 61 73 41 67 67 20 20       SF_HasAgg  
1b950 20 20 20 3d 3d 20 4e 43 5f 48 61 73 41 67 67 0a     == NC_HasAgg.
1b960 2a 2a 20 20 20 20 20 53 46 5f 4d 69 6e 4d 61 78  **     SF_MinMax
1b970 41 67 67 20 20 3d 3d 20 4e 43 5f 4d 69 6e 4d 61  Agg  == NC_MinMa
1b980 78 41 67 67 20 20 20 20 20 3d 3d 20 53 51 4c 49  xAgg     == SQLI
1b990 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a 2a  TE_FUNC_MINMAX.*
1b9a0 2a 20 20 20 20 20 53 46 5f 46 69 78 65 64 4c 69  *     SF_FixedLi
1b9b0 6d 69 74 20 3d 3d 20 57 48 45 52 45 5f 55 53 45  mit == WHERE_USE
1b9c0 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64 65 66 69 6e  _LIMIT.*/.#defin
1b9d0 65 20 53 46 5f 44 69 73 74 69 6e 63 74 20 20 20  e SF_Distinct   
1b9e0 20 20 20 20 30 78 30 30 30 30 31 20 20 2f 2a 20      0x00001  /* 
1b9f0 4f 75 74 70 75 74 20 73 68 6f 75 6c 64 20 62 65  Output should be
1ba00 20 44 49 53 54 49 4e 43 54 20 2a 2f 0a 23 64 65   DISTINCT */.#de
1ba10 66 69 6e 65 20 53 46 5f 41 6c 6c 20 20 20 20 20  fine SF_All     
1ba20 20 20 20 20 20 20 20 30 78 30 30 30 30 32 20 20         0x00002  
1ba30 2f 2a 20 49 6e 63 6c 75 64 65 73 20 74 68 65 20  /* Includes the 
1ba40 41 4c 4c 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 23  ALL keyword */.#
1ba50 64 65 66 69 6e 65 20 53 46 5f 52 65 73 6f 6c 76  define SF_Resolv
1ba60 65 64 20 20 20 20 20 20 20 30 78 30 30 30 30 34  ed       0x00004
1ba70 20 20 2f 2a 20 49 64 65 6e 74 69 66 69 65 72 73    /* Identifiers
1ba80 20 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c   have been resol
1ba90 76 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ved */.#define S
1baa0 46 5f 41 67 67 72 65 67 61 74 65 20 20 20 20 20  F_Aggregate     
1bab0 20 30 78 30 30 30 30 38 20 20 2f 2a 20 43 6f 6e   0x00008  /* Con
1bac0 74 61 69 6e 73 20 61 67 67 20 66 75 6e 63 74 69  tains agg functi
1bad0 6f 6e 73 20 6f 72 20 61 20 47 52 4f 55 50 20 42  ons or a GROUP B
1bae0 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f  Y */.#define SF_
1baf0 48 61 73 41 67 67 20 20 20 20 20 20 20 20 20 30  HasAgg         0
1bb00 78 30 30 30 31 30 20 20 2f 2a 20 43 6f 6e 74 61  x00010  /* Conta
1bb10 69 6e 73 20 61 67 67 72 65 67 61 74 65 20 66 75  ins aggregate fu
1bb20 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
1bb30 6e 65 20 53 46 5f 55 73 65 73 45 70 68 65 6d 65  ne SF_UsesEpheme
1bb40 72 61 6c 20 20 30 78 30 30 30 32 30 20 20 2f 2a  ral  0x00020  /*
1bb50 20 55 73 65 73 20 74 68 65 20 4f 70 65 6e 45 70   Uses the OpenEp
1bb60 68 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 20 2a  hemeral opcode *
1bb70 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 45 78 70  /.#define SF_Exp
1bb80 61 6e 64 65 64 20 20 20 20 20 20 20 30 78 30 30  anded       0x00
1bb90 30 34 30 20 20 2f 2a 20 73 71 6c 69 74 65 33 53  040  /* sqlite3S
1bba0 65 6c 65 63 74 45 78 70 61 6e 64 28 29 20 63 61  electExpand() ca
1bbb0 6c 6c 65 64 20 6f 6e 20 74 68 69 73 20 2a 2f 0a  lled on this */.
1bbc0 23 64 65 66 69 6e 65 20 53 46 5f 48 61 73 54 79  #define SF_HasTy
1bbd0 70 65 49 6e 66 6f 20 20 20 20 30 78 30 30 30 38  peInfo    0x0008
1bbe0 30 20 20 2f 2a 20 46 52 4f 4d 20 73 75 62 71 75  0  /* FROM subqu
1bbf0 65 72 69 65 73 20 68 61 76 65 20 54 61 62 6c 65  eries have Table
1bc00 20 6d 65 74 61 64 61 74 61 20 2a 2f 0a 23 64 65   metadata */.#de
1bc10 66 69 6e 65 20 53 46 5f 43 6f 6d 70 6f 75 6e 64  fine SF_Compound
1bc20 20 20 20 20 20 20 20 30 78 30 30 31 30 30 20 20         0x00100  
1bc30 2f 2a 20 50 61 72 74 20 6f 66 20 61 20 63 6f 6d  /* Part of a com
1bc40 70 6f 75 6e 64 20 71 75 65 72 79 20 2a 2f 0a 23  pound query */.#
1bc50 64 65 66 69 6e 65 20 53 46 5f 56 61 6c 75 65 73  define SF_Values
1bc60 20 20 20 20 20 20 20 20 20 30 78 30 30 32 30 30           0x00200
1bc70 20 20 2f 2a 20 53 79 6e 74 68 65 73 69 7a 65 64    /* Synthesized
1bc80 20 66 72 6f 6d 20 56 41 4c 55 45 53 20 63 6c 61   from VALUES cla
1bc90 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
1bca0 46 5f 4d 75 6c 74 69 56 61 6c 75 65 20 20 20 20  F_MultiValue    
1bcb0 20 30 78 30 30 34 30 30 20 20 2f 2a 20 53 69 6e   0x00400  /* Sin
1bcc0 67 6c 65 20 56 41 4c 55 45 53 20 74 65 72 6d 20  gle VALUES term 
1bcd0 77 69 74 68 20 6d 75 6c 74 69 70 6c 65 20 72 6f  with multiple ro
1bce0 77 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  ws */.#define SF
1bcf0 5f 4e 65 73 74 65 64 46 72 6f 6d 20 20 20 20 20  _NestedFrom     
1bd00 30 78 30 30 38 30 30 20 20 2f 2a 20 50 61 72 74  0x00800  /* Part
1bd10 20 6f 66 20 61 20 70 61 72 65 6e 74 68 65 73 69   of a parenthesi
1bd20 7a 65 64 20 46 52 4f 4d 20 63 6c 61 75 73 65 20  zed FROM clause 
1bd30 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 4d 69  */.#define SF_Mi
1bd40 6e 4d 61 78 41 67 67 20 20 20 20 20 20 30 78 30  nMaxAgg      0x0
1bd50 31 30 30 30 20 20 2f 2a 20 41 67 67 72 65 67 61  1000  /* Aggrega
1bd60 74 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 6d 69  te containing mi
1bd70 6e 28 29 20 6f 72 20 6d 61 78 28 29 20 2a 2f 0a  n() or max() */.
1bd80 23 64 65 66 69 6e 65 20 53 46 5f 52 65 63 75 72  #define SF_Recur
1bd90 73 69 76 65 20 20 20 20 20 20 30 78 30 32 30 30  sive      0x0200
1bda0 30 20 20 2f 2a 20 54 68 65 20 72 65 63 75 72 73  0  /* The recurs
1bdb0 69 76 65 20 70 61 72 74 20 6f 66 20 61 20 72 65  ive part of a re
1bdc0 63 75 72 73 69 76 65 20 43 54 45 20 2a 2f 0a 23  cursive CTE */.#
1bdd0 64 65 66 69 6e 65 20 53 46 5f 46 69 78 65 64 4c  define SF_FixedL
1bde0 69 6d 69 74 20 20 20 20 20 30 78 30 34 30 30 30  imit     0x04000
1bdf0 20 20 2f 2a 20 6e 53 65 6c 65 63 74 52 6f 77 20    /* nSelectRow 
1be00 73 65 74 20 62 79 20 61 20 63 6f 6e 73 74 61 6e  set by a constan
1be10 74 20 4c 49 4d 49 54 20 2a 2f 0a 23 64 65 66 69  t LIMIT */.#defi
1be20 6e 65 20 53 46 5f 4d 61 79 62 65 43 6f 6e 76 65  ne SF_MaybeConve
1be30 72 74 20 20 20 30 78 30 38 30 30 30 20 20 2f 2a  rt   0x08000  /*
1be40 20 4e 65 65 64 20 63 6f 6e 76 65 72 74 43 6f 6d   Need convertCom
1be50 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62  poundSelectToSub
1be60 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69  query() */.#defi
1be70 6e 65 20 53 46 5f 43 6f 6e 76 65 72 74 65 64 20  ne SF_Converted 
1be80 20 20 20 20 20 30 78 31 30 30 30 30 20 20 2f 2a       0x10000  /*
1be90 20 42 79 20 63 6f 6e 76 65 72 74 43 6f 6d 70 6f   By convertCompo
1bea0 75 6e 64 53 65 6c 65 63 74 54 6f 53 75 62 71 75  undSelectToSubqu
1beb0 65 72 79 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65  ery() */.#define
1bec0 20 53 46 5f 49 6e 63 6c 75 64 65 48 69 64 64 65   SF_IncludeHidde
1bed0 6e 20 20 30 78 32 30 30 30 30 20 20 2f 2a 20 49  n  0x20000  /* I
1bee0 6e 63 6c 75 64 65 20 68 69 64 64 65 6e 20 63 6f  nclude hidden co
1bef0 6c 75 6d 6e 73 20 69 6e 20 6f 75 74 70 75 74 20  lumns in output 
1bf00 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 72  */.../*.** The r
1bf10 65 73 75 6c 74 73 20 6f 66 20 61 20 53 45 4c 45  esults of a SELE
1bf20 43 54 20 63 61 6e 20 62 65 20 64 69 73 74 72 69  CT can be distri
1bf30 62 75 74 65 64 20 69 6e 20 73 65 76 65 72 61 6c  buted in several
1bf40 20 77 61 79 73 2c 20 61 73 20 64 65 66 69 6e 65   ways, as define
1bf50 64 0a 2a 2a 20 62 79 20 6f 6e 65 20 6f 66 20 74  d.** by one of t
1bf60 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
1bf70 72 6f 73 2e 20 20 54 68 65 20 22 53 52 54 22 20  ros.  The "SRT" 
1bf80 70 72 65 66 69 78 20 6d 65 61 6e 73 20 22 53 45  prefix means "SE
1bf90 4c 45 43 54 20 52 65 73 75 6c 74 0a 2a 2a 20 54  LECT Result.** T
1bfa0 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ype"..**.**     
1bfb0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1bfc0 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73  Store results as
1bfd0 20 61 20 6b 65 79 20 69 6e 20 61 20 74 65 6d 70   a key in a temp
1bfe0 6f 72 61 72 79 20 69 6e 64 65 78 0a 2a 2a 20 20  orary index.**  
1bff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c000 20 20 20 69 64 65 6e 74 69 66 69 65 64 20 62 79     identified by
1c010 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e   pDest->iSDParm.
1c020 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 45  .**.**     SRT_E
1c030 78 63 65 70 74 20 20 20 20 20 20 52 65 6d 6f 76  xcept      Remov
1c040 65 20 72 65 73 75 6c 74 73 20 66 72 6f 6d 20 74  e results from t
1c050 68 65 20 74 65 6d 70 6f 72 61 72 79 20 69 6e 64  he temporary ind
1c060 65 78 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72  ex pDest->iSDPar
1c070 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  m..**.**     SRT
1c080 5f 45 78 69 73 74 73 20 20 20 20 20 20 53 74 6f  _Exists      Sto
1c090 72 65 20 61 20 31 20 69 6e 20 6d 65 6d 6f 72 79  re a 1 in memory
1c0a0 20 63 65 6c 6c 20 70 44 65 73 74 2d 3e 69 53 44   cell pDest->iSD
1c0b0 50 61 72 6d 20 69 66 20 74 68 65 20 72 65 73 75  Parm if the resu
1c0c0 6c 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  lt.**           
1c0d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69 73            set is
1c0e0 20 6e 6f 74 20 65 6d 70 74 79 2e 0a 2a 2a 0a 2a   not empty..**.*
1c0f0 2a 20 20 20 20 20 53 52 54 5f 44 69 73 63 61 72  *     SRT_Discar
1c100 64 20 20 20 20 20 54 68 72 6f 77 20 74 68 65 20  d     Throw the 
1c110 72 65 73 75 6c 74 73 20 61 77 61 79 2e 20 20 54  results away.  T
1c120 68 69 73 20 69 73 20 75 73 65 64 20 62 79 20 53  his is used by S
1c130 45 4c 45 43 54 0a 2a 2a 20 20 20 20 20 20 20 20  ELECT.**        
1c140 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 61               sta
1c150 74 65 6d 65 6e 74 73 20 77 69 74 68 69 6e 20 74  tements within t
1c160 72 69 67 67 65 72 73 20 77 68 6f 73 65 20 6f 6e  riggers whose on
1c170 6c 79 20 70 75 72 70 6f 73 65 20 69 73 0a 2a 2a  ly purpose is.**
1c180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c190 20 20 20 20 20 74 68 65 20 73 69 64 65 2d 65 66       the side-ef
1c1a0 66 65 63 74 73 20 6f 66 20 66 75 6e 63 74 69 6f  fects of functio
1c1b0 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66  ns..**.** All of
1c1c0 20 74 68 65 20 61 62 6f 76 65 20 61 72 65 20 66   the above are f
1c1d0 72 65 65 20 74 6f 20 69 67 6e 6f 72 65 20 74 68  ree to ignore th
1c1e0 65 69 72 20 4f 52 44 45 52 20 42 59 20 63 6c 61  eir ORDER BY cla
1c1f0 75 73 65 2e 20 54 68 6f 73 65 20 74 68 61 74 0a  use. Those that.
1c200 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75 73 74 20 68  ** follow must h
1c210 6f 6e 6f 72 20 74 68 65 20 4f 52 44 45 52 20 42  onor the ORDER B
1c220 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20  Y clause..**.** 
1c230 20 20 20 20 53 52 54 5f 4f 75 74 70 75 74 20 20      SRT_Output  
1c240 20 20 20 20 47 65 6e 65 72 61 74 65 20 61 20 72      Generate a r
1c250 6f 77 20 6f 66 20 6f 75 74 70 75 74 20 28 75 73  ow of output (us
1c260 69 6e 67 20 74 68 65 20 4f 50 5f 52 65 73 75 6c  ing the OP_Resul
1c270 74 52 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20  tRow.**         
1c280 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 63 6f              opco
1c290 64 65 29 20 66 6f 72 20 65 61 63 68 20 72 6f 77  de) for each row
1c2a0 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 20 73   in the result s
1c2b0 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  et..**.**     SR
1c2c0 54 5f 4d 65 6d 20 20 20 20 20 20 20 20 20 4f 6e  T_Mem         On
1c2d0 6c 79 20 76 61 6c 69 64 20 69 66 20 74 68 65 20  ly valid if the 
1c2e0 72 65 73 75 6c 74 20 69 73 20 61 20 73 69 6e 67  result is a sing
1c2f0 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a 2a 20 20 20  le column..**   
1c300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c310 20 20 53 74 6f 72 65 20 74 68 65 20 66 69 72 73    Store the firs
1c320 74 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  t column of the 
1c330 66 69 72 73 74 20 72 65 73 75 6c 74 20 72 6f 77  first result row
1c340 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1c350 20 20 20 20 20 20 20 20 69 6e 20 72 65 67 69 73          in regis
1c360 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1c370 72 6d 20 74 68 65 6e 20 61 62 61 6e 64 6f 6e 20  rm then abandon 
1c380 74 68 65 20 72 65 73 74 0a 2a 2a 20 20 20 20 20  the rest.**     
1c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c3a0 6f 66 20 74 68 65 20 71 75 65 72 79 2e 20 20 54  of the query.  T
1c3b0 68 69 73 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  his destination 
1c3c0 69 6d 70 6c 69 65 73 20 22 4c 49 4d 49 54 20 31  implies "LIMIT 1
1c3d0 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54  "..**.**     SRT
1c3e0 5f 53 65 74 20 20 20 20 20 20 20 20 20 54 68 65  _Set         The
1c3f0 20 72 65 73 75 6c 74 20 6d 75 73 74 20 62 65 20   result must be 
1c400 61 20 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e  a single column.
1c410 20 20 53 74 6f 72 65 20 65 61 63 68 0a 2a 2a 20    Store each.** 
1c420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c430 20 20 20 20 72 6f 77 20 6f 66 20 72 65 73 75 6c      row of resul
1c440 74 20 61 73 20 74 68 65 20 6b 65 79 20 69 6e 20  t as the key in 
1c450 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1c460 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1c470 20 20 20 20 20 20 20 20 20 20 20 20 20 41 70 70               App
1c480 6c 79 20 74 68 65 20 61 66 66 69 6e 69 74 79 20  ly the affinity 
1c490 70 44 65 73 74 2d 3e 61 66 66 53 64 73 74 20 62  pDest->affSdst b
1c4a0 65 66 6f 72 65 20 73 74 6f 72 69 6e 67 0a 2a 2a  efore storing.**
1c4b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c4c0 20 20 20 20 20 72 65 73 75 6c 74 73 2e 20 20 55       results.  U
1c4d0 73 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  sed to implement
1c4e0 20 22 49 4e 20 28 53 45 4c 45 43 54 20 2e 2e 2e   "IN (SELECT ...
1c4f0 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  )"..**.**     SR
1c500 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 43 72  T_EphemTab    Cr
1c510 65 61 74 65 20 61 6e 20 74 65 6d 70 6f 72 61 72  eate an temporar
1c520 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69  y table pDest->i
1c530 53 44 50 61 72 6d 20 61 6e 64 20 73 74 6f 72 65  SDParm and store
1c540 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1c550 20 20 20 20 20 20 20 20 74 68 65 20 72 65 73 75          the resu
1c560 6c 74 20 74 68 65 72 65 2e 20 54 68 65 20 63 75  lt there. The cu
1c570 72 73 6f 72 20 69 73 20 6c 65 66 74 20 6f 70 65  rsor is left ope
1c580 6e 20 61 66 74 65 72 0a 2a 2a 20 20 20 20 20 20  n after.**      
1c590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1c5a0 65 74 75 72 6e 69 6e 67 2e 20 20 54 68 69 73 20  eturning.  This 
1c5b0 69 73 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c  is like SRT_Tabl
1c5c0 65 20 65 78 63 65 70 74 20 74 68 61 74 0a 2a 2a  e except that.**
1c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c5e0 20 20 20 20 20 74 68 69 73 20 64 65 73 74 69 6e       this destin
1c5f0 61 74 69 6f 6e 20 75 73 65 73 20 4f 50 5f 4f 70  ation uses OP_Op
1c600 65 6e 45 70 68 65 6d 65 72 61 6c 20 74 6f 20 63  enEphemeral to c
1c610 72 65 61 74 65 0a 2a 2a 20 20 20 20 20 20 20 20  reate.**        
1c620 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1c630 20 74 61 62 6c 65 20 66 69 72 73 74 2e 0a 2a 2a   table first..**
1c640 0a 2a 2a 20 20 20 20 20 53 52 54 5f 43 6f 72 6f  .**     SRT_Coro
1c650 75 74 69 6e 65 20 20 20 47 65 6e 65 72 61 74 65  utine   Generate
1c660 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 74 68   a co-routine th
1c670 61 74 20 72 65 74 75 72 6e 73 20 61 20 6e 65 77  at returns a new
1c680 20 72 6f 77 20 6f 66 0a 2a 2a 20 20 20 20 20 20   row of.**      
1c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
1c6a0 65 73 75 6c 74 73 20 65 61 63 68 20 74 69 6d 65  esults each time
1c6b0 20 69 74 20 69 73 20 69 6e 76 6f 6b 65 64 2e 20   it is invoked. 
1c6c0 20 54 68 65 20 65 6e 74 72 79 20 70 6f 69 6e 74   The entry point
1c6d0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1c6e0 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 63          of the c
1c6f0 6f 2d 72 6f 75 74 69 6e 65 20 69 73 20 73 74 6f  o-routine is sto
1c700 72 65 64 20 69 6e 20 72 65 67 69 73 74 65 72 20  red in register 
1c710 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 0a 2a  pDest->iSDParm.*
1c720 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1c730 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 72 65        and the re
1c740 73 75 6c 74 20 72 6f 77 20 69 73 20 73 74 6f 72  sult row is stor
1c750 65 64 20 69 6e 20 70 44 65 73 74 2d 3e 6e 44 65  ed in pDest->nDe
1c760 73 74 20 72 65 67 69 73 74 65 72 73 0a 2a 2a 20  st registers.** 
1c770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c780 20 20 20 20 73 74 61 72 74 69 6e 67 20 77 69 74      starting wit
1c790 68 20 70 44 65 73 74 2d 3e 69 53 64 73 74 2e 0a  h pDest->iSdst..
1c7a0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 54 61  **.**     SRT_Ta
1c7b0 62 6c 65 20 20 20 20 20 20 20 53 74 6f 72 65 20  ble       Store 
1c7c0 72 65 73 75 6c 74 73 20 69 6e 20 74 65 6d 70 6f  results in tempo
1c7d0 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74  rary table pDest
1c7e0 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20  ->iSDParm..**   
1c7f0 20 20 53 52 54 5f 46 69 66 6f 20 20 20 20 20 20    SRT_Fifo      
1c800 20 20 54 68 69 73 20 69 73 20 6c 69 6b 65 20 53    This is like S
1c810 52 54 5f 45 70 68 65 6d 54 61 62 20 65 78 63 65  RT_EphemTab exce
1c820 70 74 20 74 68 61 74 20 74 68 65 20 74 61 62 6c  pt that the tabl
1c830 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
1c840 20 20 20 20 20 20 20 20 20 69 73 20 61 73 73 75           is assu
1c850 6d 65 64 20 74 6f 20 61 6c 72 65 61 64 79 20 62  med to already b
1c860 65 20 6f 70 65 6e 2e 20 20 53 52 54 5f 46 69 66  e open.  SRT_Fif
1c870 6f 20 68 61 73 0a 2a 2a 20 20 20 20 20 20 20 20  o has.**        
1c880 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65               the
1c890 20 61 64 64 69 74 69 6f 6e 61 6c 20 70 72 6f 70   additional prop
1c8a0 65 72 74 79 20 6f 66 20 62 65 69 6e 67 20 61 62  erty of being ab
1c8b0 6c 65 20 74 6f 20 69 67 6e 6f 72 65 0a 2a 2a 20  le to ignore.** 
1c8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c8d0 20 20 20 20 74 68 65 20 4f 52 44 45 52 20 42 59      the ORDER BY
1c8e0 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20   clause..**.**  
1c8f0 20 20 20 53 52 54 5f 44 69 73 74 46 69 66 6f 20     SRT_DistFifo 
1c900 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73     Store results
1c910 20 69 6e 20 61 20 74 65 6d 70 6f 72 61 72 79 20   in a temporary 
1c920 74 61 62 6c 65 20 70 44 65 73 74 2d 3e 69 53 44  table pDest->iSD
1c930 50 61 72 6d 2e 0a 2a 2a 20 20 20 20 20 20 20 20  Parm..**        
1c940 20 20 20 20 20 20 20 20 20 20 20 20 20 42 75 74               But
1c950 20 61 6c 73 6f 20 75 73 65 20 74 65 6d 70 6f 72   also use tempor
1c960 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1c970 3e 69 53 44 50 61 72 6d 2b 31 20 61 73 0a 2a 2a  >iSDParm+1 as.**
1c980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c990 20 20 20 20 20 61 20 72 65 63 6f 72 64 20 6f 66       a record of
1c9a0 20 61 6c 6c 20 70 72 69 6f 72 20 72 65 73 75 6c   all prior resul
1c9b0 74 73 20 61 6e 64 20 69 67 6e 6f 72 65 20 61 6e  ts and ignore an
1c9c0 79 20 64 75 70 6c 69 63 61 74 65 0a 2a 2a 20 20  y duplicate.**  
1c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1c9e0 20 20 20 72 6f 77 73 2e 20 20 4e 61 6d 65 20 6d     rows.  Name m
1c9f0 65 61 6e 73 3a 20 20 22 44 69 73 74 69 6e 63 74  eans:  "Distinct
1ca00 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   Fifo"..**.**   
1ca10 20 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20    SRT_Queue     
1ca20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20    Store results 
1ca30 69 6e 20 70 72 69 6f 72 69 74 79 20 71 75 65 75  in priority queu
1ca40 65 20 70 44 65 73 74 2d 3e 69 53 44 50 61 72 6d  e pDest->iSDParm
1ca50 20 28 72 65 61 6c 6c 79 0a 2a 2a 20 20 20 20 20   (really.**     
1ca60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ca70 61 6e 20 69 6e 64 65 78 29 2e 20 20 41 70 70 65  an index).  Appe
1ca80 6e 64 20 61 20 73 65 71 75 65 6e 63 65 20 6e 75  nd a sequence nu
1ca90 6d 62 65 72 20 73 6f 20 74 68 61 74 20 61 6c 6c  mber so that all
1caa0 20 65 6e 74 72 69 65 73 0a 2a 2a 20 20 20 20 20   entries.**     
1cab0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cac0 61 72 65 20 64 69 73 74 69 6e 63 74 2e 0a 2a 2a  are distinct..**
1cad0 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74  .**     SRT_Dist
1cae0 51 75 65 75 65 20 20 20 53 74 6f 72 65 20 72 65  Queue   Store re
1caf0 73 75 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74  sults in priorit
1cb00 79 20 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69  y queue pDest->i
1cb10 53 44 50 61 72 6d 20 6f 6e 6c 79 20 69 66 0a 2a  SDParm only if.*
1cb20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cb30 20 20 20 20 20 20 74 68 65 20 73 61 6d 65 20 72        the same r
1cb40 65 63 6f 72 64 20 68 61 73 20 6e 65 76 65 72 20  ecord has never 
1cb50 62 65 65 6e 20 73 74 6f 72 65 64 20 62 65 66 6f  been stored befo
1cb60 72 65 2e 20 20 54 68 65 0a 2a 2a 20 20 20 20 20  re.  The.**     
1cb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cb80 69 6e 64 65 78 20 61 74 20 70 44 65 73 74 2d 3e  index at pDest->
1cb90 69 53 44 50 61 72 6d 2b 31 20 68 6f 6c 64 20 61  iSDParm+1 hold a
1cba0 6c 6c 20 70 72 69 6f 72 20 73 74 6f 72 65 73 2e  ll prior stores.
1cbb0 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f  .*/.#define SRT_
1cbc0 55 6e 69 6f 6e 20 20 20 20 20 20 20 20 31 20 20  Union        1  
1cbd0 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20  /* Store result 
1cbe0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1cbf0 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1cc00 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 20  RT_Except       
1cc10 32 20 20 2f 2a 20 52 65 6d 6f 76 65 20 72 65 73  2  /* Remove res
1cc20 75 6c 74 20 66 72 6f 6d 20 61 20 55 4e 49 4f 4e  ult from a UNION
1cc30 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e   index */.#defin
1cc40 65 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20  e SRT_Exists    
1cc50 20 20 20 33 20 20 2f 2a 20 53 74 6f 72 65 20 31     3  /* Store 1
1cc60 20 69 66 20 74 68 65 20 72 65 73 75 6c 74 20 69   if the result i
1cc70 73 20 6e 6f 74 20 65 6d 70 74 79 20 2a 2f 0a 23  s not empty */.#
1cc80 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73 63 61  define SRT_Disca
1cc90 72 64 20 20 20 20 20 20 34 20 20 2f 2a 20 44 6f  rd      4  /* Do
1cca0 20 6e 6f 74 20 73 61 76 65 20 74 68 65 20 72 65   not save the re
1ccb0 73 75 6c 74 73 20 61 6e 79 77 68 65 72 65 20 2a  sults anywhere *
1ccc0 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 46 69  /.#define SRT_Fi
1ccd0 66 6f 20 20 20 20 20 20 20 20 20 35 20 20 2f 2a  fo         5  /*
1cce0 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 61 73   Store result as
1ccf0 20 64 61 74 61 20 77 69 74 68 20 61 6e 20 61 75   data with an au
1cd00 74 6f 6d 61 74 69 63 20 72 6f 77 69 64 20 2a 2f  tomatic rowid */
1cd10 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44 69 73  .#define SRT_Dis
1cd20 74 46 69 66 6f 20 20 20 20 20 36 20 20 2f 2a 20  tFifo     6  /* 
1cd30 4c 69 6b 65 20 53 52 54 5f 46 69 66 6f 2c 20 62  Like SRT_Fifo, b
1cd40 75 74 20 75 6e 69 71 75 65 20 72 65 73 75 6c 74  ut unique result
1cd50 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e  s only */.#defin
1cd60 65 20 53 52 54 5f 51 75 65 75 65 20 20 20 20 20  e SRT_Queue     
1cd70 20 20 20 37 20 20 2f 2a 20 53 74 6f 72 65 20 72     7  /* Store r
1cd80 65 73 75 6c 74 20 69 6e 20 61 6e 20 71 75 65 75  esult in an queu
1cd90 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  e */.#define SRT
1cda0 5f 44 69 73 74 51 75 65 75 65 20 20 20 20 38 20  _DistQueue    8 
1cdb0 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 51 75 65   /* Like SRT_Que
1cdc0 75 65 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72  ue, but unique r
1cdd0 65 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 0a  esults only */..
1cde0 2f 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20  /* The ORDER BY 
1cdf0 63 6c 61 75 73 65 20 69 73 20 69 67 6e 6f 72 65  clause is ignore
1ce00 64 20 66 6f 72 20 61 6c 6c 20 6f 66 20 74 68 65  d for all of the
1ce10 20 61 62 6f 76 65 20 2a 2f 0a 23 64 65 66 69 6e   above */.#defin
1ce20 65 20 49 67 6e 6f 72 61 62 6c 65 4f 72 64 65 72  e IgnorableOrder
1ce30 62 79 28 58 29 20 28 28 58 2d 3e 65 44 65 73 74  by(X) ((X->eDest
1ce40 29 3c 3d 53 52 54 5f 44 69 73 74 51 75 65 75 65  )<=SRT_DistQueue
1ce50 29 0a 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4f  )..#define SRT_O
1ce60 75 74 70 75 74 20 20 20 20 20 20 20 39 20 20 2f  utput       9  /
1ce70 2a 20 4f 75 74 70 75 74 20 65 61 63 68 20 72 6f  * Output each ro
1ce80 77 20 6f 66 20 72 65 73 75 6c 74 20 2a 2f 0a 23  w of result */.#
1ce90 64 65 66 69 6e 65 20 53 52 54 5f 4d 65 6d 20 20  define SRT_Mem  
1cea0 20 20 20 20 20 20 20 31 30 20 20 2f 2a 20 53 74         10  /* St
1ceb0 6f 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 20  ore result in a 
1cec0 6d 65 6d 6f 72 79 20 63 65 6c 6c 20 2a 2f 0a 23  memory cell */.#
1ced0 64 65 66 69 6e 65 20 53 52 54 5f 53 65 74 20 20  define SRT_Set  
1cee0 20 20 20 20 20 20 20 31 31 20 20 2f 2a 20 53 74         11  /* St
1cef0 6f 72 65 20 72 65 73 75 6c 74 73 20 61 73 20 6b  ore results as k
1cf00 65 79 73 20 69 6e 20 61 6e 20 69 6e 64 65 78 20  eys in an index 
1cf10 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 45  */.#define SRT_E
1cf20 70 68 65 6d 54 61 62 20 20 20 20 31 32 20 20 2f  phemTab    12  /
1cf30 2a 20 43 72 65 61 74 65 20 74 72 61 6e 73 69 65  * Create transie
1cf40 6e 74 20 74 61 62 20 61 6e 64 20 73 74 6f 72 65  nt tab and store
1cf50 20 6c 69 6b 65 20 53 52 54 5f 54 61 62 6c 65 20   like SRT_Table 
1cf60 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 43  */.#define SRT_C
1cf70 6f 72 6f 75 74 69 6e 65 20 20 20 31 33 20 20 2f  oroutine   13  /
1cf80 2a 20 47 65 6e 65 72 61 74 65 20 61 20 73 69 6e  * Generate a sin
1cf90 67 6c 65 20 72 6f 77 20 6f 66 20 72 65 73 75 6c  gle row of resul
1cfa0 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  t */.#define SRT
1cfb0 5f 54 61 62 6c 65 20 20 20 20 20 20 20 31 34 20  _Table       14 
1cfc0 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74   /* Store result
1cfd0 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61 6e   as data with an
1cfe0 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69 64   automatic rowid
1cff0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e   */../*.** An in
1d000 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 6f  stance of this o
1d010 62 6a 65 63 74 20 64 65 73 63 72 69 62 65 73 20  bject describes 
1d020 77 68 65 72 65 20 74 6f 20 70 75 74 20 6f 66 20  where to put of 
1d030 74 68 65 20 72 65 73 75 6c 74 73 20 6f 66 0a 2a  the results of.*
1d040 2a 20 61 20 53 45 4c 45 43 54 20 73 74 61 74 65  * a SELECT state
1d050 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ment..*/.struct 
1d060 53 65 6c 65 63 74 44 65 73 74 20 7b 0a 20 20 75  SelectDest {.  u
1d070 38 20 65 44 65 73 74 3b 20 20 20 20 20 20 20 20  8 eDest;        
1d080 20 20 20 20 2f 2a 20 48 6f 77 20 74 6f 20 64 69      /* How to di
1d090 73 70 6f 73 65 20 6f 66 20 74 68 65 20 72 65 73  spose of the res
1d0a0 75 6c 74 73 2e 20 20 4f 6e 20 6f 66 20 53 52 54  ults.  On of SRT
1d0b0 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f 0a 20 20 63  _* above. */.  c
1d0c0 68 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20  har *zAffSdst;  
1d0d0 20 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20      /* Affinity 
1d0e0 75 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d  used when eDest=
1d0f0 3d 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 69 6e  =SRT_Set */.  in
1d100 74 20 69 53 44 50 61 72 6d 3b 20 20 20 20 20 20  t iSDParm;      
1d110 20 20 20 2f 2a 20 41 20 70 61 72 61 6d 65 74 65     /* A paramete
1d120 72 20 75 73 65 64 20 62 79 20 74 68 65 20 65 44  r used by the eD
1d130 65 73 74 20 64 69 73 70 6f 73 61 6c 20 6d 65 74  est disposal met
1d140 68 6f 64 20 2a 2f 0a 20 20 69 6e 74 20 69 53 64  hod */.  int iSd
1d150 73 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  st;           /*
1d160 20 42 61 73 65 20 72 65 67 69 73 74 65 72 20 77   Base register w
1d170 68 65 72 65 20 72 65 73 75 6c 74 73 20 61 72 65  here results are
1d180 20 77 72 69 74 74 65 6e 20 2a 2f 0a 20 20 69 6e   written */.  in
1d190 74 20 6e 53 64 73 74 3b 20 20 20 20 20 20 20 20  t nSdst;        
1d1a0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1d1b0 72 65 67 69 73 74 65 72 73 20 61 6c 6c 6f 63 61  registers alloca
1d1c0 74 65 64 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  ted */.  ExprLis
1d1d0 74 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 2f 2a  t *pOrderBy;  /*
1d1e0 20 4b 65 79 20 63 6f 6c 75 6d 6e 73 20 66 6f 72   Key columns for
1d1f0 20 53 52 54 5f 51 75 65 75 65 20 61 6e 64 20 53   SRT_Queue and S
1d200 52 54 5f 44 69 73 74 51 75 65 75 65 20 2a 2f 0a  RT_DistQueue */.
1d210 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75 72 69 6e 67  };../*.** During
1d220 20 63 6f 64 65 20 67 65 6e 65 72 61 74 69 6f 6e   code generation
1d230 20 6f 66 20 73 74 61 74 65 6d 65 6e 74 73 20 74   of statements t
1d240 68 61 74 20 64 6f 20 69 6e 73 65 72 74 73 20 69  hat do inserts i
1d250 6e 74 6f 20 41 55 54 4f 49 4e 43 52 45 4d 45 4e  nto AUTOINCREMEN
1d260 54 0a 2a 2a 20 74 61 62 6c 65 73 2c 20 74 68 65  T.** tables, the
1d270 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 6e 66 6f 72   following infor
1d280 6d 61 74 69 6f 6e 20 69 73 20 61 74 74 61 63 68  mation is attach
1d290 65 64 20 74 6f 20 74 68 65 20 54 61 62 6c 65 2e  ed to the Table.
1d2a0 75 2e 61 75 74 6f 49 6e 63 2e 70 0a 2a 2a 20 70  u.autoInc.p.** p
1d2b0 6f 69 6e 74 65 72 20 6f 66 20 65 61 63 68 20 61  ointer of each a
1d2c0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 74 61 62  utoincrement tab
1d2d0 6c 65 20 74 6f 20 72 65 63 6f 72 64 20 73 6f 6d  le to record som
1d2e0 65 20 73 69 64 65 20 69 6e 66 6f 72 6d 61 74 69  e side informati
1d2f0 6f 6e 20 74 68 61 74 0a 2a 2a 20 74 68 65 20 63  on that.** the c
1d300 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20 6e 65  ode generator ne
1d310 65 64 73 2e 20 20 57 65 20 68 61 76 65 20 74 6f  eds.  We have to
1d320 20 6b 65 65 70 20 70 65 72 2d 74 61 62 6c 65 20   keep per-table 
1d330 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 0a 2a 2a  autoincrement.**
1d340 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 6e 20   information in 
1d350 63 61 73 65 20 69 6e 73 65 72 74 73 20 61 72 65  case inserts are
1d360 20 64 6f 6e 65 20 77 69 74 68 69 6e 20 74 72 69   done within tri
1d370 67 67 65 72 73 2e 20 20 54 72 69 67 67 65 72 73  ggers.  Triggers
1d380 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e 6f 72 6d 61   do not.** norma
1d390 6c 6c 79 20 63 6f 6f 72 64 69 6e 61 74 65 20 74  lly coordinate t
1d3a0 68 65 69 72 20 61 63 74 69 76 69 74 69 65 73 2c  heir activities,
1d3b0 20 62 75 74 20 77 65 20 64 6f 20 6e 65 65 64 20   but we do need 
1d3c0 74 6f 20 63 6f 6f 72 64 69 6e 61 74 65 20 74 68  to coordinate th
1d3d0 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67 20 61 6e 64  e.** loading and
1d3e0 20 73 61 76 69 6e 67 20 6f 66 20 61 75 74 6f 69   saving of autoi
1d3f0 6e 63 72 65 6d 65 6e 74 20 69 6e 66 6f 72 6d 61  ncrement informa
1d400 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  tion..*/.struct 
1d410 41 75 74 6f 69 6e 63 49 6e 66 6f 20 7b 0a 20 20  AutoincInfo {.  
1d420 41 75 74 6f 69 6e 63 49 6e 66 6f 20 2a 70 4e 65  AutoincInfo *pNe
1d430 78 74 3b 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e  xt;   /* Next in
1d440 66 6f 20 62 6c 6f 63 6b 20 69 6e 20 61 20 6c 69  fo block in a li
1d450 73 74 20 6f 66 20 74 68 65 6d 20 61 6c 6c 20 2a  st of them all *
1d460 2f 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b  /.  Table *pTab;
1d470 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
1d480 6c 65 20 74 68 69 73 20 69 6e 66 6f 20 62 6c 6f  le this info blo
1d490 63 6b 20 72 65 66 65 72 73 20 74 6f 20 2a 2f 0a  ck refers to */.
1d4a0 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20    int iDb;      
1d4b0 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78          /* Index
1d4c0 20 69 6e 20 73 71 6c 69 74 65 33 2e 61 44 62 5b   in sqlite3.aDb[
1d4d0 5d 20 6f 66 20 64 61 74 61 62 61 73 65 20 68 6f  ] of database ho
1d4e0 6c 64 69 6e 67 20 70 54 61 62 20 2a 2f 0a 20 20  lding pTab */.  
1d4f0 69 6e 74 20 72 65 67 43 74 72 3b 20 20 20 20 20  int regCtr;     
1d500 20 20 20 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20        /* Memory 
1d510 72 65 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67  register holding
1d520 20 74 68 65 20 72 6f 77 69 64 20 63 6f 75 6e 74   the rowid count
1d530 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  er */.};../*.** 
1d540 53 69 7a 65 20 6f 66 20 74 68 65 20 63 6f 6c 75  Size of the colu
1d550 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a 23 69 66 6e  mn cache.*/.#ifn
1d560 64 65 66 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c  def SQLITE_N_COL
1d570 43 41 43 48 45 0a 23 20 64 65 66 69 6e 65 20 53  CACHE.# define S
1d580 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43 41 43 48 45  QLITE_N_COLCACHE
1d590 20 31 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a   10.#endif../*.*
1d5a0 2a 20 41 74 20 6c 65 61 73 74 20 6f 6e 65 20 69  * At least one i
1d5b0 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
1d5c0 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
1d5d0 72 65 20 69 73 20 63 72 65 61 74 65 64 20 66 6f  re is created fo
1d5e0 72 20 65 61 63 68 0a 2a 2a 20 74 72 69 67 67 65  r each.** trigge
1d5f0 72 20 74 68 61 74 20 6d 61 79 20 62 65 20 66 69  r that may be fi
1d600 72 65 64 20 77 68 69 6c 65 20 70 61 72 73 69 6e  red while parsin
1d610 67 20 61 6e 20 49 4e 53 45 52 54 2c 20 55 50 44  g an INSERT, UPD
1d620 41 54 45 20 6f 72 20 44 45 4c 45 54 45 0a 2a 2a  ATE or DELETE.**
1d630 20 73 74 61 74 65 6d 65 6e 74 2e 20 41 6c 6c 20   statement. All 
1d640 73 75 63 68 20 6f 62 6a 65 63 74 73 20 61 72 65  such objects are
1d650 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 6c   stored in the l
1d660 69 6e 6b 65 64 20 6c 69 73 74 20 68 65 61 64 65  inked list heade
1d670 64 20 61 74 0a 2a 2a 20 50 61 72 73 65 2e 70 54  d at.** Parse.pT
1d680 72 69 67 67 65 72 50 72 67 20 61 6e 64 20 64 65  riggerPrg and de
1d690 6c 65 74 65 64 20 6f 6e 63 65 20 73 74 61 74 65  leted once state
1d6a0 6d 65 6e 74 20 63 6f 6d 70 69 6c 61 74 69 6f 6e  ment compilation
1d6b0 20 68 61 73 20 62 65 65 6e 0a 2a 2a 20 63 6f 6d   has been.** com
1d6c0 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 41 20  pleted..**.** A 
1d6d0 56 64 62 65 20 73 75 62 2d 70 72 6f 67 72 61 6d  Vdbe sub-program
1d6e0 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73   that implements
1d6f0 20 74 68 65 20 62 6f 64 79 20 61 6e 64 20 57 48   the body and WH
1d700 45 4e 20 63 6c 61 75 73 65 20 6f 66 20 74 72 69  EN clause of tri
1d710 67 67 65 72 0a 2a 2a 20 54 72 69 67 67 65 72 50  gger.** TriggerP
1d720 72 67 2e 70 54 72 69 67 67 65 72 2c 20 61 73 73  rg.pTrigger, ass
1d730 75 6d 69 6e 67 20 61 20 64 65 66 61 75 6c 74 20  uming a default 
1d740 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 63 6c 61 75  ON CONFLICT clau
1d750 73 65 20 6f 66 0a 2a 2a 20 54 72 69 67 67 65 72  se of.** Trigger
1d760 50 72 67 2e 6f 72 63 6f 6e 66 2c 20 69 73 20 73  Prg.orconf, is s
1d770 74 6f 72 65 64 20 69 6e 20 74 68 65 20 54 72 69  tored in the Tri
1d780 67 67 65 72 50 72 67 2e 70 50 72 6f 67 72 61 6d  ggerPrg.pProgram
1d790 20 76 61 72 69 61 62 6c 65 2e 0a 2a 2a 20 54 68   variable..** Th
1d7a0 65 20 50 61 72 73 65 2e 70 54 72 69 67 67 65 72  e Parse.pTrigger
1d7b0 50 72 67 20 6c 69 73 74 20 6e 65 76 65 72 20 63  Prg list never c
1d7c0 6f 6e 74 61 69 6e 73 20 74 77 6f 20 65 6e 74 72  ontains two entr
1d7d0 69 65 73 20 77 69 74 68 20 74 68 65 20 73 61 6d  ies with the sam
1d7e0 65 0a 2a 2a 20 76 61 6c 75 65 73 20 66 6f 72 20  e.** values for 
1d7f0 62 6f 74 68 20 70 54 72 69 67 67 65 72 20 61 6e  both pTrigger an
1d800 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a 0a 2a 2a 20  d orconf..**.** 
1d810 54 68 65 20 54 72 69 67 67 65 72 50 72 67 2e 61  The TriggerPrg.a
1d820 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76 61 72 69 61  Colmask[0] varia
1d830 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 61 20  ble is set to a 
1d840 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f  mask of old.* co
1d850 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63 65 73 73 65  lumns.** accesse
1d860 64 20 28 6f 72 20 73 65 74 20 74 6f 20 30 20 66  d (or set to 0 f
1d870 6f 72 20 74 72 69 67 67 65 72 73 20 66 69 72 65  or triggers fire
1d880 64 20 61 73 20 61 20 72 65 73 75 6c 74 20 6f 66  d as a result of
1d890 20 49 4e 53 45 52 54 0a 2a 2a 20 73 74 61 74 65   INSERT.** state
1d8a0 6d 65 6e 74 73 29 2e 20 53 69 6d 69 6c 61 72 6c  ments). Similarl
1d8b0 79 2c 20 74 68 65 20 54 72 69 67 67 65 72 50 72  y, the TriggerPr
1d8c0 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31 5d 20 76 61  g.aColmask[1] va
1d8d0 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f  riable is set to
1d8e0 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f 66 20 6e 65  .** a mask of ne
1d8f0 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 75 73 65 64  w.* columns used
1d900 20 62 79 20 74 68 65 20 70 72 6f 67 72 61 6d 2e   by the program.
1d910 0a 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67  .*/.struct Trigg
1d920 65 72 50 72 67 20 7b 0a 20 20 54 72 69 67 67 65  erPrg {.  Trigge
1d930 72 20 2a 70 54 72 69 67 67 65 72 3b 20 20 20 20  r *pTrigger;    
1d940 20 20 2f 2a 20 54 72 69 67 67 65 72 20 74 68 69    /* Trigger thi
1d950 73 20 70 72 6f 67 72 61 6d 20 77 61 73 20 63 6f  s program was co
1d960 64 65 64 20 66 72 6f 6d 20 2a 2f 0a 20 20 54 72  ded from */.  Tr
1d970 69 67 67 65 72 50 72 67 20 2a 70 4e 65 78 74 3b  iggerPrg *pNext;
1d980 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 65 6e        /* Next en
1d990 74 72 79 20 69 6e 20 50 61 72 73 65 2e 70 54 72  try in Parse.pTr
1d9a0 69 67 67 65 72 50 72 67 20 6c 69 73 74 20 2a 2f  iggerPrg list */
1d9b0 0a 20 20 53 75 62 50 72 6f 67 72 61 6d 20 2a 70  .  SubProgram *p
1d9c0 50 72 6f 67 72 61 6d 3b 20 20 20 2f 2a 20 50 72  Program;   /* Pr
1d9d0 6f 67 72 61 6d 20 69 6d 70 6c 65 6d 65 6e 74 69  ogram implementi
1d9e0 6e 67 20 70 54 72 69 67 67 65 72 2f 6f 72 63 6f  ng pTrigger/orco
1d9f0 6e 66 20 2a 2f 0a 20 20 69 6e 74 20 6f 72 63 6f  nf */.  int orco
1da00 6e 66 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nf;             
1da10 2f 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f  /* Default ON CO
1da20 4e 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 2a 2f  NFLICT policy */
1da30 0a 20 20 75 33 32 20 61 43 6f 6c 6d 61 73 6b 5b  .  u32 aColmask[
1da40 32 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61  2];        /* Ma
1da50 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a 2c 20 6e 65  sks of old.*, ne
1da60 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20 61 63 63 65  w.* columns acce
1da70 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  ssed */.};../*.*
1da80 2a 20 54 68 65 20 79 44 62 4d 61 73 6b 20 64 61  * The yDbMask da
1da90 74 61 74 79 70 65 20 66 6f 72 20 74 68 65 20 62  tatype for the b
1daa0 69 74 6d 61 73 6b 20 6f 66 20 61 6c 6c 20 61 74  itmask of all at
1dab0 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73  tached databases
1dac0 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c 49 54 45 5f  ..*/.#if SQLITE_
1dad0 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33 30 0a  MAX_ATTACHED>30.
1dae0 20 20 74 79 70 65 64 65 66 20 75 6e 73 69 67 6e    typedef unsign
1daf0 65 64 20 63 68 61 72 20 79 44 62 4d 61 73 6b 5b  ed char yDbMask[
1db00 28 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  (SQLITE_MAX_ATTA
1db10 43 48 45 44 2b 39 29 2f 38 5d 3b 0a 23 20 64 65  CHED+9)/8];.# de
1db20 66 69 6e 65 20 44 62 4d 61 73 6b 54 65 73 74 28  fine DbMaskTest(
1db30 4d 2c 49 29 20 20 20 20 28 28 28 4d 29 5b 28 49  M,I)    (((M)[(I
1db40 29 2f 38 5d 26 28 31 3c 3c 28 28 49 29 26 37 29  )/8]&(1<<((I)&7)
1db50 29 29 21 3d 30 29 0a 23 20 64 65 66 69 6e 65 20  ))!=0).# define 
1db60 44 62 4d 61 73 6b 5a 65 72 6f 28 4d 29 20 20 20  DbMaskZero(M)   
1db70 20 20 20 6d 65 6d 73 65 74 28 28 4d 29 2c 30 2c     memset((M),0,
1db80 73 69 7a 65 6f 66 28 4d 29 29 0a 23 20 64 65 66  sizeof(M)).# def
1db90 69 6e 65 20 44 62 4d 61 73 6b 53 65 74 28 4d 2c  ine DbMaskSet(M,
1dba0 49 29 20 20 20 20 20 28 4d 29 5b 28 49 29 2f 38  I)     (M)[(I)/8
1dbb0 5d 7c 3d 28 31 3c 3c 28 28 49 29 26 37 29 29 0a  ]|=(1<<((I)&7)).
1dbc0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 41  # define DbMaskA
1dbd0 6c 6c 5a 65 72 6f 28 4d 29 20 20 20 73 71 6c 69  llZero(M)   sqli
1dbe0 74 65 33 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f  te3DbMaskAllZero
1dbf0 28 4d 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  (M).# define DbM
1dc00 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d 29 20 20 20  askNonZero(M)   
1dc10 28 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c  (sqlite3DbMaskAl
1dc20 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29 0a 23 65 6c  lZero(M)==0).#el
1dc30 73 65 0a 20 20 74 79 70 65 64 65 66 20 75 6e 73  se.  typedef uns
1dc40 69 67 6e 65 64 20 69 6e 74 20 79 44 62 4d 61 73  igned int yDbMas
1dc50 6b 3b 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61  k;.# define DbMa
1dc60 73 6b 54 65 73 74 28 4d 2c 49 29 20 20 20 20 28  skTest(M,I)    (
1dc70 28 28 4d 29 26 28 28 28 79 44 62 4d 61 73 6b 29  ((M)&(((yDbMask)
1dc80 31 29 3c 3c 28 49 29 29 29 21 3d 30 29 0a 23 20  1)<<(I)))!=0).# 
1dc90 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72  define DbMaskZer
1dca0 6f 28 4d 29 20 20 20 20 20 20 28 4d 29 3d 30 0a  o(M)      (M)=0.
1dcb0 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53  # define DbMaskS
1dcc0 65 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 7c  et(M,I)     (M)|
1dcd0 3d 28 28 28 79 44 62 4d 61 73 6b 29 31 29 3c 3c  =(((yDbMask)1)<<
1dce0 28 49 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62  (I)).# define Db
1dcf0 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20  MaskAllZero(M)  
1dd00 20 28 4d 29 3d 3d 30 0a 23 20 64 65 66 69 6e 65   (M)==0.# define
1dd10 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
1dd20 29 20 20 20 28 4d 29 21 3d 30 0a 23 65 6e 64 69  )   (M)!=0.#endi
1dd30 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 53 51 4c 20  f../*.** An SQL 
1dd40 70 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e 20  parser context. 
1dd50 20 41 20 63 6f 70 79 20 6f 66 20 74 68 69 73 20   A copy of this 
1dd60 73 74 72 75 63 74 75 72 65 20 69 73 20 70 61 73  structure is pas
1dd70 73 65 64 20 74 68 72 6f 75 67 68 0a 2a 2a 20 74  sed through.** t
1dd80 68 65 20 70 61 72 73 65 72 20 61 6e 64 20 64 6f  he parser and do
1dd90 77 6e 20 69 6e 74 6f 20 61 6c 6c 20 74 68 65 20  wn into all the 
1dda0 70 61 72 73 65 72 20 61 63 74 69 6f 6e 20 72 6f  parser action ro
1ddb0 75 74 69 6e 65 20 69 6e 20 6f 72 64 65 72 20 74  utine in order t
1ddc0 6f 0a 2a 2a 20 63 61 72 72 79 20 61 72 6f 75 6e  o.** carry aroun
1ddd0 64 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 74 68  d information th
1dde0 61 74 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20  at is global to 
1ddf0 74 68 65 20 65 6e 74 69 72 65 20 70 61 72 73 65  the entire parse
1de00 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 74 72 75  ..**.** The stru
1de10 63 74 75 72 65 20 69 73 20 64 69 76 69 64 65 64  cture is divided
1de20 20 69 6e 74 6f 20 74 77 6f 20 70 61 72 74 73 2e   into two parts.
1de30 20 20 57 68 65 6e 20 74 68 65 20 70 61 72 73 65    When the parse
1de40 72 20 61 6e 64 20 63 6f 64 65 0a 2a 2a 20 67 65  r and code.** ge
1de50 6e 65 72 61 74 65 20 63 61 6c 6c 20 74 68 65 6d  nerate call them
1de60 73 65 6c 76 65 73 20 72 65 63 75 72 73 69 76 65  selves recursive
1de70 6c 79 2c 20 74 68 65 20 66 69 72 73 74 20 70 61  ly, the first pa
1de80 72 74 20 6f 66 20 74 68 65 20 73 74 72 75 63 74  rt of the struct
1de90 75 72 65 0a 2a 2a 20 69 73 20 63 6f 6e 73 74 61  ure.** is consta
1dea0 6e 74 20 62 75 74 20 74 68 65 20 73 65 63 6f 6e  nt but the secon
1deb0 64 20 70 61 72 74 20 69 73 20 72 65 73 65 74 20  d part is reset 
1dec0 61 74 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67  at the beginning
1ded0 20 61 6e 64 20 65 6e 64 20 6f 66 0a 2a 2a 20 65   and end of.** e
1dee0 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 0a 2a  ach recursion..*
1def0 2a 0a 2a 2a 20 54 68 65 20 6e 54 61 62 6c 65 4c  *.** The nTableL
1df00 6f 63 6b 20 61 6e 64 20 61 54 61 62 6c 65 4c 6f  ock and aTableLo
1df10 63 6b 20 76 61 72 69 61 62 6c 65 73 20 61 72 65  ck variables are
1df20 20 6f 6e 6c 79 20 75 73 65 64 20 69 66 20 74 68   only used if th
1df30 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 0a 2a  e shared-cache.*
1df40 2a 20 66 65 61 74 75 72 65 20 69 73 20 65 6e 61  * feature is ena
1df50 62 6c 65 64 20 28 69 66 20 73 71 6c 69 74 65 33  bled (if sqlite3
1df60 54 73 64 28 29 2d 3e 75 73 65 53 68 61 72 65 64  Tsd()->useShared
1df70 44 61 74 61 20 69 73 20 74 72 75 65 29 2e 20 54  Data is true). T
1df80 68 65 79 20 61 72 65 0a 2a 2a 20 75 73 65 64 20  hey are.** used 
1df90 74 6f 20 73 74 6f 72 65 20 74 68 65 20 73 65 74  to store the set
1dfa0 20 6f 66 20 74 61 62 6c 65 2d 6c 6f 63 6b 73 20   of table-locks 
1dfb0 72 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20  required by the 
1dfc0 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e 67 0a  statement being.
1dfd0 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e 20 46 75 6e  ** compiled. Fun
1dfe0 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 54 61 62  ction sqlite3Tab
1dff0 6c 65 4c 6f 63 6b 28 29 20 69 73 20 75 73 65 64  leLock() is used
1e000 20 74 6f 20 61 64 64 20 65 6e 74 72 69 65 73 20   to add entries 
1e010 74 6f 20 74 68 65 0a 2a 2a 20 6c 69 73 74 2e 0a  to the.** list..
1e020 2a 2f 0a 73 74 72 75 63 74 20 50 61 72 73 65 20  */.struct Parse 
1e030 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b  {.  sqlite3 *db;
1e040 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
1e050 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 73 74  main database st
1e060 72 75 63 74 75 72 65 20 2a 2f 0a 20 20 63 68 61  ructure */.  cha
1e070 72 20 2a 7a 45 72 72 4d 73 67 3b 20 20 20 20 20  r *zErrMsg;     
1e080 20 20 2f 2a 20 41 6e 20 65 72 72 6f 72 20 6d 65    /* An error me
1e090 73 73 61 67 65 20 2a 2f 0a 20 20 56 64 62 65 20  ssage */.  Vdbe 
1e0a0 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20 20 20  *pVdbe;         
1e0b0 2f 2a 20 41 6e 20 65 6e 67 69 6e 65 20 66 6f 72  /* An engine for
1e0c0 20 65 78 65 63 75 74 69 6e 67 20 64 61 74 61 62   executing datab
1e0d0 61 73 65 20 62 79 74 65 63 6f 64 65 20 2a 2f 0a  ase bytecode */.
1e0e0 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
1e0f0 20 20 20 20 20 20 20 2f 2a 20 52 65 74 75 72 6e         /* Return
1e100 20 63 6f 64 65 20 66 72 6f 6d 20 65 78 65 63 75   code from execu
1e110 74 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 63 6f 6c  tion */.  u8 col
1e120 4e 61 6d 65 73 53 65 74 3b 20 20 20 20 20 20 2f  NamesSet;      /
1e130 2a 20 54 52 55 45 20 61 66 74 65 72 20 4f 50 5f  * TRUE after OP_
1e140 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68 61 73 20 62  ColumnName has b
1e150 65 65 6e 20 69 73 73 75 65 64 20 74 6f 20 70 56  een issued to pV
1e160 64 62 65 20 2a 2f 0a 20 20 75 38 20 63 68 65 63  dbe */.  u8 chec
1e170 6b 53 63 68 65 6d 61 3b 20 20 20 20 20 20 2f 2a  kSchema;      /*
1e180 20 43 61 75 73 65 73 20 73 63 68 65 6d 61 20 63   Causes schema c
1e190 6f 6f 6b 69 65 20 63 68 65 63 6b 20 61 66 74 65  ookie check afte
1e1a0 72 20 61 6e 20 65 72 72 6f 72 20 2a 2f 0a 20 20  r an error */.  
1e1b0 75 38 20 6e 65 73 74 65 64 3b 20 20 20 20 20 20  u8 nested;      
1e1c0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1e1d0 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20 74  f nested calls t
1e1e0 6f 20 74 68 65 20 70 61 72 73 65 72 2f 63 6f 64  o the parser/cod
1e1f0 65 20 67 65 6e 65 72 61 74 6f 72 20 2a 2f 0a 20  e generator */. 
1e200 20 75 38 20 6e 54 65 6d 70 52 65 67 3b 20 20 20   u8 nTempReg;   
1e210 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e220 6f 66 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67  of temporary reg
1e230 69 73 74 65 72 73 20 69 6e 20 61 54 65 6d 70 52  isters in aTempR
1e240 65 67 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 73 4d  eg[] */.  u8 isM
1e250 75 6c 74 69 57 72 69 74 65 3b 20 20 20 20 20 2f  ultiWrite;     /
1e260 2a 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d  * True if statem
1e270 65 6e 74 20 6d 61 79 20 6d 6f 64 69 66 79 2f 69  ent may modify/i
1e280 6e 73 65 72 74 20 6d 75 6c 74 69 70 6c 65 20 72  nsert multiple r
1e290 6f 77 73 20 2a 2f 0a 20 20 75 38 20 6d 61 79 41  ows */.  u8 mayA
1e2a0 62 6f 72 74 3b 20 20 20 20 20 20 20 20 20 2f 2a  bort;         /*
1e2b0 20 54 72 75 65 20 69 66 20 73 74 61 74 65 6d 65   True if stateme
1e2c0 6e 74 20 6d 61 79 20 74 68 72 6f 77 20 61 6e 20  nt may throw an 
1e2d0 41 42 4f 52 54 20 65 78 63 65 70 74 69 6f 6e 20  ABORT exception 
1e2e0 2a 2f 0a 20 20 75 38 20 68 61 73 43 6f 6d 70 6f  */.  u8 hasCompo
1e2f0 75 6e 64 3b 20 20 20 20 20 20 2f 2a 20 4e 65 65  und;      /* Nee
1e300 64 20 74 6f 20 69 6e 76 6f 6b 65 20 63 6f 6e 76  d to invoke conv
1e310 65 72 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63  ertCompoundSelec
1e320 74 54 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f  tToSubquery() */
1e330 0a 20 20 75 38 20 6f 6b 43 6f 6e 73 74 46 61 63  .  u8 okConstFac
1e340 74 6f 72 3b 20 20 20 20 2f 2a 20 4f 4b 20 74 6f  tor;    /* OK to
1e350 20 66 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73   factor out cons
1e360 74 61 6e 74 73 20 2a 2f 0a 20 20 75 38 20 64 69  tants */.  u8 di
1e370 73 61 62 6c 65 4c 6f 6f 6b 61 73 69 64 65 3b 20  sableLookaside; 
1e380 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 74 69 6d  /* Number of tim
1e390 65 73 20 6c 6f 6f 6b 61 73 69 64 65 20 68 61 73  es lookaside has
1e3a0 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 20 2a   been disabled *
1e3b0 2f 0a 20 20 75 38 20 6e 43 6f 6c 43 61 63 68 65  /.  u8 nColCache
1e3c0 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  ;        /* Numb
1e3d0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e  er of entries in
1e3e0 20 61 43 6f 6c 43 61 63 68 65 5b 5d 20 2a 2f 0a   aColCache[] */.
1e3f0 20 20 69 6e 74 20 61 54 65 6d 70 52 65 67 5b 38    int aTempReg[8
1e400 5d 3b 20 20 20 20 20 2f 2a 20 48 6f 6c 64 69 6e  ];     /* Holdin
1e410 67 20 61 72 65 61 20 66 6f 72 20 74 65 6d 70 6f  g area for tempo
1e420 72 61 72 79 20 72 65 67 69 73 74 65 72 73 20 2a  rary registers *
1e430 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65 52 65  /.  int nRangeRe
1e440 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65  g;       /* Size
1e450 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61 72   of the temporar
1e460 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f 63 6b  y register block
1e470 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e 67 65   */.  int iRange
1e480 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 46 69  Reg;       /* Fi
1e490 72 73 74 20 72 65 67 69 73 74 65 72 20 69 6e 20  rst register in 
1e4a0 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73 74  temporary regist
1e4b0 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20 69 6e  er block */.  in
1e4c0 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20 20 20  t nErr;         
1e4d0 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
1e4e0 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f 0a 20  errors seen */. 
1e4f0 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20 20 20   int nTab;      
1e500 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
1e510 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20 61 6c  of previously al
1e520 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63 75 72  located VDBE cur
1e530 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20 6e 4d  sors */.  int nM
1e540 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  em;            /
1e550 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65 6d 6f  * Number of memo
1e560 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20 73 6f  ry cells used so
1e570 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20 6e 53   far */.  int nS
1e580 65 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  et;            /
1e590 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 65 74 73  * Number of sets
1e5a0 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
1e5b0 20 20 69 6e 74 20 6e 4f 6e 63 65 3b 20 20 20 20    int nOnce;    
1e5c0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
1e5d0 20 6f 66 20 4f 50 5f 4f 6e 63 65 20 69 6e 73 74   of OP_Once inst
1e5e0 72 75 63 74 69 6f 6e 73 20 73 6f 20 66 61 72 20  ructions so far 
1e5f0 2a 2f 0a 20 20 69 6e 74 20 6e 4f 70 41 6c 6c 6f  */.  int nOpAllo
1e600 63 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  c;        /* Num
1e610 62 65 72 20 6f 66 20 73 6c 6f 74 73 20 61 6c 6c  ber of slots all
1e620 6f 63 61 74 65 64 20 66 6f 72 20 56 64 62 65 2e  ocated for Vdbe.
1e630 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 73  aOp[] */.  int s
1e640 7a 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  zOpAlloc;       
1e650 2f 2a 20 42 79 74 65 73 20 6f 66 20 6d 65 6d 6f  /* Bytes of memo
1e660 72 79 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  ry space allocat
1e670 65 64 20 66 6f 72 20 56 64 62 65 2e 61 4f 70 5b  ed for Vdbe.aOp[
1e680 5d 20 2a 2f 0a 20 20 69 6e 74 20 69 46 69 78 65  ] */.  int iFixe
1e690 64 4f 70 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  dOp;        /* N
1e6a0 65 76 65 72 20 62 61 63 6b 20 6f 75 74 20 6f 70  ever back out op
1e6b0 63 6f 64 65 73 20 69 46 69 78 65 64 4f 70 2d 31  codes iFixedOp-1
1e6c0 20 6f 72 20 65 61 72 6c 69 65 72 20 2a 2f 0a 20   or earlier */. 
1e6d0 20 69 6e 74 20 63 6b 42 61 73 65 3b 20 20 20 20   int ckBase;    
1e6e0 20 20 20 20 20 20 2f 2a 20 42 61 73 65 20 72 65        /* Base re
1e6f0 67 69 73 74 65 72 20 6f 66 20 64 61 74 61 20 64  gister of data d
1e700 75 72 69 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73  uring check cons
1e710 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74  traints */.  int
1e720 20 69 53 65 6c 66 54 61 62 3b 20 20 20 20 20 20   iSelfTab;      
1e730 20 20 2f 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e    /* Table of an
1e740 20 69 6e 64 65 78 20 77 68 6f 73 65 20 65 78 70   index whose exp
1e750 72 73 20 61 72 65 20 62 65 69 6e 67 20 63 6f 64  rs are being cod
1e760 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63  ed */.  int iCac
1e770 68 65 4c 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20  heLevel;     /* 
1e780 43 6f 6c 43 61 63 68 65 20 76 61 6c 69 64 20 77  ColCache valid w
1e790 68 65 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e  hen aColCache[].
1e7a0 69 4c 65 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65  iLevel<=iCacheLe
1e7b0 76 65 6c 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61  vel */.  int iCa
1e7c0 63 68 65 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a  cheCnt;       /*
1e7d0 20 43 6f 75 6e 74 65 72 20 75 73 65 64 20 74 6f   Counter used to
1e7e0 20 67 65 6e 65 72 61 74 65 20 61 43 6f 6c 43 61   generate aColCa
1e7f0 63 68 65 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73  che[].lru values
1e800 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c   */.  int nLabel
1e810 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  ;          /* Nu
1e820 6d 62 65 72 20 6f 66 20 6c 61 62 65 6c 73 20 75  mber of labels u
1e830 73 65 64 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c  sed */.  int *aL
1e840 61 62 65 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a  abel;         /*
1e850 20 53 70 61 63 65 20 74 6f 20 68 6f 6c 64 20 74   Space to hold t
1e860 68 65 20 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 73  he labels */.  s
1e870 74 72 75 63 74 20 79 43 6f 6c 43 61 63 68 65 20  truct yColCache 
1e880 7b 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65  {.    int iTable
1e890 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
1e8a0 61 62 6c 65 20 63 75 72 73 6f 72 20 6e 75 6d 62  able cursor numb
1e8b0 65 72 20 2a 2f 0a 20 20 20 20 69 31 36 20 69 43  er */.    i16 iC
1e8c0 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
1e8d0 2f 2a 20 54 61 62 6c 65 20 63 6f 6c 75 6d 6e 20  /* Table column 
1e8e0 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 75 38  number */.    u8
1e8f0 20 74 65 6d 70 52 65 67 3b 20 20 20 20 20 20 20   tempReg;       
1e900 20 20 20 20 2f 2a 20 69 52 65 67 20 69 73 20 61      /* iReg is a
1e910 20 74 65 6d 70 20 72 65 67 69 73 74 65 72 20 74   temp register t
1e920 68 61 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  hat needs to be 
1e930 66 72 65 65 64 20 2a 2f 0a 20 20 20 20 69 6e 74  freed */.    int
1e940 20 69 4c 65 76 65 6c 3b 20 20 20 20 20 20 20 20   iLevel;        
1e950 20 20 20 2f 2a 20 4e 65 73 74 69 6e 67 20 6c 65     /* Nesting le
1e960 76 65 6c 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  vel */.    int i
1e970 52 65 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Reg;            
1e980 20 2f 2a 20 52 65 67 20 77 69 74 68 20 76 61 6c   /* Reg with val
1e990 75 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75 6d  ue of this colum
1e9a0 6e 2e 20 30 20 6d 65 61 6e 73 20 6e 6f 6e 65 2e  n. 0 means none.
1e9b0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6c 72 75 3b   */.    int lru;
1e9c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1e9d0 20 4c 65 61 73 74 20 72 65 63 65 6e 74 6c 79 20   Least recently 
1e9e0 75 73 65 64 20 65 6e 74 72 79 20 68 61 73 20 74  used entry has t
1e9f0 68 65 20 73 6d 61 6c 6c 65 73 74 20 76 61 6c 75  he smallest valu
1ea00 65 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 43 61 63  e */.  } aColCac
1ea10 68 65 5b 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  he[SQLITE_N_COLC
1ea20 41 43 48 45 5d 3b 20 20 2f 2a 20 4f 6e 65 20 66  ACHE];  /* One f
1ea30 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 63  or each column c
1ea40 61 63 68 65 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ache entry */.  
1ea50 45 78 70 72 4c 69 73 74 20 2a 70 43 6f 6e 73 74  ExprList *pConst
1ea60 45 78 70 72 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74  Expr;/* Constant
1ea70 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
1ea80 20 20 54 6f 6b 65 6e 20 63 6f 6e 73 74 72 61 69    Token constrai
1ea90 6e 74 4e 61 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f  ntName;/* Name o
1eaa0 66 20 74 68 65 20 63 6f 6e 73 74 72 61 69 6e 74  f the constraint
1eab0 20 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67   currently being
1eac0 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79 44 62   parsed */.  yDb
1ead0 4d 61 73 6b 20 77 72 69 74 65 4d 61 73 6b 3b 20  Mask writeMask; 
1eae0 20 20 2f 2a 20 53 74 61 72 74 20 61 20 77 72 69    /* Start a wri
1eaf0 74 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 6f  te transaction o
1eb00 6e 20 74 68 65 73 65 20 64 61 74 61 62 61 73 65  n these database
1eb10 73 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b 20 63  s */.  yDbMask c
1eb20 6f 6f 6b 69 65 4d 61 73 6b 3b 20 20 2f 2a 20 42  ookieMask;  /* B
1eb30 69 74 6d 61 73 6b 20 6f 66 20 73 63 68 65 6d 61  itmask of schema
1eb40 20 76 65 72 69 66 69 65 64 20 64 61 74 61 62 61   verified databa
1eb50 73 65 73 20 2a 2f 0a 20 20 69 6e 74 20 63 6f 6f  ses */.  int coo
1eb60 6b 69 65 56 61 6c 75 65 5b 53 51 4c 49 54 45 5f  kieValue[SQLITE_
1eb70 4d 41 58 5f 41 54 54 41 43 48 45 44 2b 32 5d 3b  MAX_ATTACHED+2];
1eb80 20 20 2f 2a 20 56 61 6c 75 65 73 20 6f 66 20 63    /* Values of c
1eb90 6f 6f 6b 69 65 73 20 74 6f 20 76 65 72 69 66 79  ookies to verify
1eba0 20 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77   */.  int regRow
1ebb0 69 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65  id;        /* Re
1ebc0 67 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72  gister holding r
1ebd0 6f 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54  owid of CREATE T
1ebe0 41 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20  ABLE entry */.  
1ebf0 69 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20  int regRoot;    
1ec00 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
1ec10 20 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61   holding root pa
1ec20 67 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65  ge number for ne
1ec30 77 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69  w objects */.  i
1ec40 6e 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20  nt nMaxArg;     
1ec50 20 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20      /* Max args 
1ec60 70 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66  passed to user f
1ec70 75 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70  unction by sub-p
1ec80 72 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45  rogram */.#if SE
1ec90 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
1eca0 44 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b  D.  int nSelect;
1ecb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ecc0 65 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61  er of SELECT sta
1ecd0 74 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a  tements seen */.
1ece0 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64    int nSelectInd
1ecf0 65 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61  ent;   /* How fa
1ed00 72 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45  r to indent SELE
1ed10 43 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74  CTTRACE() output
1ed20 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
1ed30 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
1ed40 48 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e  HARED_CACHE.  in
1ed50 74 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20  t nTableLock;   
1ed60 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1ed70 66 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c  f locks in aTabl
1ed80 65 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65  eLock */.  Table
1ed90 4c 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b  Lock *aTableLock
1eda0 3b 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61  ; /* Required ta
1edb0 62 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68  ble locks for sh
1edc0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode 
1edd0 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f  */.#endif.  Auto
1ede0 69 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20  incInfo *pAinc; 
1edf0 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20   /* Information 
1ee00 61 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d  about AUTOINCREM
1ee10 45 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a  ENT counters */.
1ee20 0a 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f  .  /* Informatio
1ee30 6e 20 75 73 65 64 20 77 68 69 6c 65 20 63 6f 64  n used while cod
1ee40 69 6e 67 20 74 72 69 67 67 65 72 20 70 72 6f 67  ing trigger prog
1ee50 72 61 6d 73 2e 20 2a 2f 0a 20 20 50 61 72 73 65  rams. */.  Parse
1ee60 20 2a 70 54 6f 70 6c 65 76 65 6c 3b 20 20 20 20   *pToplevel;    
1ee70 2f 2a 20 50 61 72 73 65 20 73 74 72 75 63 74 75  /* Parse structu
1ee80 72 65 20 66 6f 72 20 6d 61 69 6e 20 70 72 6f 67  re for main prog
1ee90 72 61 6d 20 28 6f 72 20 4e 55 4c 4c 29 20 2a 2f  ram (or NULL) */
1eea0 0a 20 20 54 61 62 6c 65 20 2a 70 54 72 69 67 67  .  Table *pTrigg
1eeb0 65 72 54 61 62 3b 20 20 2f 2a 20 54 61 62 6c 65  erTab;  /* Table
1eec0 20 74 72 69 67 67 65 72 73 20 61 72 65 20 62 65   triggers are be
1eed0 69 6e 67 20 63 6f 64 65 64 20 66 6f 72 20 2a 2f  ing coded for */
1eee0 0a 20 20 69 6e 74 20 61 64 64 72 43 72 54 61 62  .  int addrCrTab
1eef0 3b 20 20 20 20 20 20 20 2f 2a 20 41 64 64 72 65  ;       /* Addre
1ef00 73 73 20 6f 66 20 4f 50 5f 43 72 65 61 74 65 54  ss of OP_CreateT
1ef10 61 62 6c 65 20 6f 70 63 6f 64 65 20 6f 6e 20 43  able opcode on C
1ef20 52 45 41 54 45 20 54 41 42 4c 45 20 2a 2f 0a 20  REATE TABLE */. 
1ef30 20 75 33 32 20 6e 51 75 65 72 79 4c 6f 6f 70 3b   u32 nQueryLoop;
1ef40 20 20 20 20 20 20 2f 2a 20 45 73 74 20 6e 75 6d        /* Est num
1ef50 62 65 72 20 6f 66 20 69 74 65 72 61 74 69 6f 6e  ber of iteration
1ef60 73 20 6f 66 20 61 20 71 75 65 72 79 20 28 31 30  s of a query (10
1ef70 2a 6c 6f 67 32 28 4e 29 29 20 2a 2f 0a 20 20 75  *log2(N)) */.  u
1ef80 33 32 20 6f 6c 64 6d 61 73 6b 3b 20 20 20 20 20  32 oldmask;     
1ef90 20 20 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6f      /* Mask of o
1efa0 6c 64 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66  ld.* columns ref
1efb0 65 72 65 6e 63 65 64 20 2a 2f 0a 20 20 75 33 32  erenced */.  u32
1efc0 20 6e 65 77 6d 61 73 6b 3b 20 20 20 20 20 20 20   newmask;       
1efd0 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 6e 65 77    /* Mask of new
1efe0 2e 2a 20 63 6f 6c 75 6d 6e 73 20 72 65 66 65 72  .* columns refer
1eff0 65 6e 63 65 64 20 2a 2f 0a 20 20 75 38 20 65 54  enced */.  u8 eT
1f000 72 69 67 67 65 72 4f 70 3b 20 20 20 20 20 20 20  riggerOp;       
1f010 2f 2a 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  /* TK_UPDATE, TK
1f020 5f 49 4e 53 45 52 54 20 6f 72 20 54 4b 5f 44 45  _INSERT or TK_DE
1f030 4c 45 54 45 20 2a 2f 0a 20 20 75 38 20 65 4f 72  LETE */.  u8 eOr
1f040 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  conf;          /
1f050 2a 20 44 65 66 61 75 6c 74 20 4f 4e 20 43 4f 4e  * Default ON CON
1f060 46 4c 49 43 54 20 70 6f 6c 69 63 79 20 66 6f 72  FLICT policy for
1f070 20 74 72 69 67 67 65 72 20 73 74 65 70 73 20 2a   trigger steps *
1f080 2f 0a 20 20 75 38 20 64 69 73 61 62 6c 65 54 72  /.  u8 disableTr
1f090 69 67 67 65 72 73 3b 20 20 2f 2a 20 54 72 75 65  iggers;  /* True
1f0a0 20 74 6f 20 64 69 73 61 62 6c 65 20 74 72 69 67   to disable trig
1f0b0 67 65 72 73 20 2a 2f 0a 0a 20 20 2f 2a 2a 2a 2a  gers */..  /****
1f0c0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f0d0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f0e0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f0f0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f100 2a 2a 2a 2a 0a 20 20 2a 2a 20 41 62 6f 76 65 20  ****.  ** Above 
1f110 69 73 20 63 6f 6e 73 74 61 6e 74 20 62 65 74 77  is constant betw
1f120 65 65 6e 20 72 65 63 75 72 73 69 6f 6e 73 2e 20  een recursions. 
1f130 20 42 65 6c 6f 77 20 69 73 20 72 65 73 65 74 20   Below is reset 
1f140 62 65 66 6f 72 65 20 61 6e 64 20 61 66 74 65 72  before and after
1f150 0a 20 20 2a 2a 20 65 61 63 68 20 72 65 63 75 72  .  ** each recur
1f160 73 69 6f 6e 2e 20 20 54 68 65 20 62 6f 75 6e 64  sion.  The bound
1f170 61 72 79 20 62 65 74 77 65 65 6e 20 74 68 65 73  ary between thes
1f180 65 20 74 77 6f 20 72 65 67 69 6f 6e 73 20 69 73  e two regions is
1f190 20 64 65 74 65 72 6d 69 6e 65 64 0a 20 20 2a 2a   determined.  **
1f1a0 20 75 73 69 6e 67 20 6f 66 66 73 65 74 6f 66 28   using offsetof(
1f1b0 50 61 72 73 65 2c 6e 56 61 72 29 20 73 6f 20 74  Parse,nVar) so t
1f1c0 68 65 20 6e 56 61 72 20 66 69 65 6c 64 20 6d 75  he nVar field mu
1f1d0 73 74 20 62 65 20 74 68 65 20 66 69 72 73 74 20  st be the first 
1f1e0 66 69 65 6c 64 0a 20 20 2a 2a 20 69 6e 20 74 68  field.  ** in th
1f1f0 65 20 72 65 63 75 72 73 69 76 65 20 72 65 67 69  e recursive regi
1f200 6f 6e 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  on..  **********
1f210 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f220 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f230 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f240 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
1f250 0a 20 20 79 6e 56 61 72 20 6e 56 61 72 3b 20 20  .  ynVar nVar;  
1f260 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1f270 4e 75 6d 62 65 72 20 6f 66 20 27 3f 27 20 76 61  Number of '?' va
1f280 72 69 61 62 6c 65 73 20 73 65 65 6e 20 69 6e 20  riables seen in 
1f290 74 68 65 20 53 51 4c 20 73 6f 20 66 61 72 20 2a  the SQL so far *
1f2a0 2f 0a 20 20 69 6e 74 20 6e 7a 56 61 72 3b 20 20  /.  int nzVar;  
1f2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f2c0 20 4e 75 6d 62 65 72 20 6f 66 20 61 76 61 69 6c   Number of avail
1f2d0 61 62 6c 65 20 73 6c 6f 74 73 20 69 6e 20 61 7a  able slots in az
1f2e0 56 61 72 5b 5d 20 2a 2f 0a 20 20 75 38 20 69 50  Var[] */.  u8 iP
1f2f0 6b 53 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20  kSortOrder;     
1f300 20 20 20 20 20 2f 2a 20 41 53 43 20 6f 72 20 44       /* ASC or D
1f310 45 53 43 20 66 6f 72 20 49 4e 54 45 47 45 52 20  ESC for INTEGER 
1f320 50 52 49 4d 41 52 59 20 4b 45 59 20 2a 2f 0a 20  PRIMARY KEY */. 
1f330 20 75 38 20 65 78 70 6c 61 69 6e 3b 20 20 20 20   u8 explain;    
1f340 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72             /* Tr
1f350 75 65 20 69 66 20 74 68 65 20 45 58 50 4c 41 49  ue if the EXPLAI
1f360 4e 20 66 6c 61 67 20 69 73 20 66 6f 75 6e 64 20  N flag is found 
1f370 6f 6e 20 74 68 65 20 71 75 65 72 79 20 2a 2f 0a  on the query */.
1f380 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
1f390 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
1f3a0 0a 20 20 75 38 20 64 65 63 6c 61 72 65 56 74 61  .  u8 declareVta
1f3b0 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  b;           /* 
1f3c0 54 72 75 65 20 69 66 20 69 6e 73 69 64 65 20 73  True if inside s
1f3d0 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76  qlite3_declare_v
1f3e0 74 61 62 28 29 20 2a 2f 0a 20 20 69 6e 74 20 6e  tab() */.  int n
1f3f0 56 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20  VtabLock;       
1f400 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f410 66 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 73  f virtual tables
1f420 20 74 6f 20 6c 6f 63 6b 20 2a 2f 0a 23 65 6e 64   to lock */.#end
1f430 69 66 0a 20 20 69 6e 74 20 6e 41 6c 69 61 73 3b  if.  int nAlias;
1f440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
1f450 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 6c 69 61  * Number of alia
1f460 73 65 64 20 72 65 73 75 6c 74 20 73 65 74 20 63  sed result set c
1f470 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 69 6e 74 20  olumns */.  int 
1f480 6e 48 65 69 67 68 74 3b 20 20 20 20 20 20 20 20  nHeight;        
1f490 20 20 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73        /* Express
1f4a0 69 6f 6e 20 74 72 65 65 20 68 65 69 67 68 74 20  ion tree height 
1f4b0 6f 66 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73  of current sub-s
1f4c0 65 6c 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66  elect */.#ifndef
1f4d0 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50   SQLITE_OMIT_EXP
1f4e0 4c 41 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65  LAIN.  int iSele
1f4f0 63 74 49 64 3b 20 20 20 20 20 20 20 20 20 20 20  ctId;           
1f500 20 2f 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e   /* ID of curren
1f510 74 20 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50  t select for EXP
1f520 4c 41 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20  LAIN output */. 
1f530 20 69 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74   int iNextSelect
1f540 49 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65  Id;        /* Ne
1f550 78 74 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c  xt available sel
1f560 65 63 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41  ect ID for EXPLA
1f570 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e  IN output */.#en
1f580 64 69 66 0a 20 20 63 68 61 72 20 2a 2a 61 7a 56  dif.  char **azV
1f590 61 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ar;             
1f5a0 2f 2a 20 50 6f 69 6e 74 65 72 73 20 74 6f 20 6e  /* Pointers to n
1f5b0 61 6d 65 73 20 6f 66 20 70 61 72 61 6d 65 74 65  ames of paramete
1f5c0 72 73 20 2a 2f 0a 20 20 56 64 62 65 20 2a 70 52  rs */.  Vdbe *pR
1f5d0 65 70 72 65 70 61 72 65 3b 20 20 20 20 20 20 20  eprepare;       
1f5e0 20 20 2f 2a 20 56 4d 20 62 65 69 6e 67 20 72 65    /* VM being re
1f5f0 70 72 65 70 61 72 65 64 20 28 73 71 6c 69 74 65  prepared (sqlite
1f600 33 52 65 70 72 65 70 61 72 65 28 29 29 20 2a 2f  3Reprepare()) */
1f610 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
1f620 54 61 69 6c 3b 20 20 20 20 20 20 20 20 2f 2a 20  Tail;        /* 
1f630 41 6c 6c 20 53 51 4c 20 74 65 78 74 20 70 61 73  All SQL text pas
1f640 74 20 74 68 65 20 6c 61 73 74 20 73 65 6d 69 63  t the last semic
1f650 6f 6c 6f 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20  olon parsed */. 
1f660 20 54 61 62 6c 65 20 2a 70 4e 65 77 54 61 62 6c   Table *pNewTabl
1f670 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
1f680 74 61 62 6c 65 20 62 65 69 6e 67 20 63 6f 6e 73  table being cons
1f690 74 72 75 63 74 65 64 20 62 79 20 43 52 45 41 54  tructed by CREAT
1f6a0 45 20 54 41 42 4c 45 20 2a 2f 0a 20 20 54 72 69  E TABLE */.  Tri
1f6b0 67 67 65 72 20 2a 70 4e 65 77 54 72 69 67 67 65  gger *pNewTrigge
1f6c0 72 3b 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65  r;     /* Trigge
1f6d0 72 20 75 6e 64 65 72 20 63 6f 6e 73 74 72 75 63  r under construc
1f6e0 74 20 62 79 20 61 20 43 52 45 41 54 45 20 54 52  t by a CREATE TR
1f6f0 49 47 47 45 52 20 2a 2f 0a 20 20 63 6f 6e 73 74  IGGER */.  const
1f700 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f 6e 74   char *zAuthCont
1f710 65 78 74 3b 20 2f 2a 20 54 68 65 20 36 74 68 20  ext; /* The 6th 
1f720 70 61 72 61 6d 65 74 65 72 20 74 6f 20 64 62 2d  parameter to db-
1f730 3e 78 41 75 74 68 20 63 61 6c 6c 62 61 63 6b 73  >xAuth callbacks
1f740 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 73 4e 61 6d   */.  Token sNam
1f750 65 54 6f 6b 65 6e 3b 20 20 20 20 20 20 20 20 20  eToken;         
1f760 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20 75 6e  /* Token with un
1f770 71 75 61 6c 69 66 69 65 64 20 73 63 68 65 6d 61  qualified schema
1f780 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a 2f 0a   object name */.
1f790 20 20 54 6f 6b 65 6e 20 73 4c 61 73 74 54 6f 6b    Token sLastTok
1f7a0 65 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  en;         /* T
1f7b0 68 65 20 6c 61 73 74 20 74 6f 6b 65 6e 20 70 61  he last token pa
1f7c0 72 73 65 64 20 2a 2f 0a 23 69 66 6e 64 65 66 20  rsed */.#ifndef 
1f7d0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
1f7e0 55 41 4c 54 41 42 4c 45 0a 20 20 54 6f 6b 65 6e  UALTABLE.  Token
1f7f0 20 73 41 72 67 3b 20 20 20 20 20 20 20 20 20 20   sArg;          
1f800 20 20 20 20 20 2f 2a 20 43 6f 6d 70 6c 65 74 65       /* Complete
1f810 20 74 65 78 74 20 6f 66 20 61 20 6d 6f 64 75 6c   text of a modul
1f820 65 20 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 20 20  e argument */.  
1f830 54 61 62 6c 65 20 2a 2a 61 70 56 74 61 62 4c 6f  Table **apVtabLo
1f840 63 6b 3b 20 20 20 20 20 20 20 2f 2a 20 50 6f 69  ck;       /* Poi
1f850 6e 74 65 72 20 74 6f 20 76 69 72 74 75 61 6c 20  nter to virtual 
1f860 74 61 62 6c 65 73 20 6e 65 65 64 69 6e 67 20 6c  tables needing l
1f870 6f 63 6b 69 6e 67 20 2a 2f 0a 23 65 6e 64 69 66  ocking */.#endif
1f880 0a 20 20 54 61 62 6c 65 20 2a 70 5a 6f 6d 62 69  .  Table *pZombi
1f890 65 54 61 62 3b 20 20 20 20 20 20 20 20 2f 2a 20  eTab;        /* 
1f8a0 4c 69 73 74 20 6f 66 20 54 61 62 6c 65 20 6f 62  List of Table ob
1f8b0 6a 65 63 74 73 20 74 6f 20 64 65 6c 65 74 65 20  jects to delete 
1f8c0 61 66 74 65 72 20 63 6f 64 65 20 67 65 6e 20 2a  after code gen *
1f8d0 2f 0a 20 20 54 72 69 67 67 65 72 50 72 67 20 2a  /.  TriggerPrg *
1f8e0 70 54 72 69 67 67 65 72 50 72 67 3b 20 20 2f 2a  pTriggerPrg;  /*
1f8f0 20 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20   Linked list of 
1f900 63 6f 64 65 64 20 74 72 69 67 67 65 72 73 20 2a  coded triggers *
1f910 2f 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 3b  /.  With *pWith;
1f920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
1f930 20 43 75 72 72 65 6e 74 20 57 49 54 48 20 63 6c   Current WITH cl
1f940 61 75 73 65 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f  ause, or NULL */
1f950 0a 20 20 57 69 74 68 20 2a 70 57 69 74 68 54 6f  .  With *pWithTo
1f960 46 72 65 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  Free;        /* 
1f970 46 72 65 65 20 74 68 69 73 20 57 49 54 48 20 6f  Free this WITH o
1f980 62 6a 65 63 74 20 61 74 20 74 68 65 20 65 6e 64  bject at the end
1f990 20 6f 66 20 74 68 65 20 70 61 72 73 65 20 2a 2f   of the parse */
1f9a0 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  .};../*.** Retur
1f9b0 6e 20 74 72 75 65 20 69 66 20 63 75 72 72 65 6e  n true if curren
1f9c0 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20 73 71  tly inside an sq
1f9d0 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f 76 74  lite3_declare_vt
1f9e0 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a 23 69  ab() call..*/.#i
1f9f0 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  fdef SQLITE_OMIT
1fa00 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
1fa10 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43 4c 41  #define IN_DECLA
1fa20 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73 65 0a  RE_VTAB 0.#else.
1fa30 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
1fa40 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61 72 73  LARE_VTAB (pPars
1fa50 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62 29 0a  e->declareVtab).
1fa60 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e  #endif../*.** An
1fa70 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
1fa80 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63   following struc
1fa90 74 75 72 65 20 63 61 6e 20 62 65 20 64 65 63 6c  ture can be decl
1faa0 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63 6b 20  ared on a stack 
1fab0 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73  and used.** to s
1fac0 61 76 65 20 74 68 65 20 50 61 72 73 65 2e 7a 41  ave the Parse.zA
1fad0 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c 75 65  uthContext value
1fae0 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can 
1faf0 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61 74 65  be restored late
1fb00 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41 75 74  r..*/.struct Aut
1fb10 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63 6f 6e  hContext {.  con
1fb20 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68 43 6f  st char *zAuthCo
1fb30 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75 74 20  ntext;   /* Put 
1fb40 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41 75 74  saved Parse.zAut
1fb50 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20 2a 2f  hContext here */
1fb60 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65  .  Parse *pParse
1fb70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
1fb80 2a 20 54 68 65 20 50 61 72 73 65 20 73 74 72 75  * The Parse stru
1fb90 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a  cture */.};../*.
1fba0 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c 61 67  ** Bitfield flag
1fbb0 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65 20 69  s for P5 value i
1fbc0 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f 64 65  n various opcode
1fbd0 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  s..**.** Value c
1fbe0 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
1fbf0 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
1fc00 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  )):.**    OPFLAG
1fc10 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 3d 3d  _LENGTHARG    ==
1fc20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c 45 4e   SQLITE_FUNC_LEN
1fc30 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  GTH.**    OPFLAG
1fc40 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20 3d 3d  _TYPEOFARG    ==
1fc50 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50   SQLITE_FUNC_TYP
1fc60 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47  EOF.**    OPFLAG
1fc70 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20 3d 3d  _BULKCSR      ==
1fc80 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41 44 0a   BTREE_BULKLOAD.
1fc90 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53 45 45  **    OPFLAG_SEE
1fca0 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42 54 52  KEQ       == BTR
1fcb0 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20 20 20  EE_SEEK_EQ.**   
1fcc0 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54   OPFLAG_FORDELET
1fcd0 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 46 4f  E    == BTREE_FO
1fce0 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20 4f 50  RDELETE.**    OP
1fcf0 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54 49 4f  FLAG_SAVEPOSITIO
1fd00 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56 45 50  N == BTREE_SAVEP
1fd10 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20 4f 50  OSITION.**    OP
1fd20 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20  FLAG_AUXDELETE  
1fd30 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58 44 45    == BTREE_AUXDE
1fd40 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  LETE.*/.#define 
1fd50 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45 20 20  OPFLAG_NCHANGE  
1fd60 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a 20       0x01    /* 
1fd70 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74 20 74  OP_Insert: Set t
1fd80 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e 43 68  o update db->nCh
1fd90 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20 20 20  ange */.        
1fda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
1fdc0 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50 32 20  Also used in P2 
1fdd0 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50 5f 44  (not P5) of OP_D
1fde0 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  elete */.#define
1fdf0 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20 20 20   OPFLAG_EPHEM   
1fe00 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f 2a        0x01    /*
1fe10 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70 68 65   OP_Column: Ephe
1fe20 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69 73 20  meral output is 
1fe30 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50  ok */.#define OP
1fe40 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44 20 20  FLAG_LASTROWID  
1fe50 20 20 20 30 78 30 32 20 20 20 20 2f 2a 20 53 65     0x02    /* Se
1fe60 74 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e  t to update db->
1fe70 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23 64 65  lastRowid */.#de
1fe80 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53 55 50  fine OPFLAG_ISUP
1fe90 44 41 54 45 20 20 20 20 20 20 30 78 30 34 20 20  DATE      0x04  
1fea0 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49 6e 73    /* This OP_Ins
1feb0 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20 55 50  ert is an sql UP
1fec0 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20  DATE */.#define 
1fed0 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20 20 20  OPFLAG_APPEND   
1fee0 20 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20       0x08    /* 
1fef0 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79 20 74  This is likely t
1ff00 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64 20 2a  o be an append *
1ff10 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
1ff20 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54 20 30  _USESEEKRESULT 0
1ff30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20 74 6f  x10    /* Try to
1ff40 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20 69 6e   avoid a seek in
1ff50 20 42 74 72 65 65 49 6e 73 65 72 74 28 29 20 2a   BtreeInsert() *
1ff60 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
1ff70 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41 54 45  ENABLE_PREUPDATE
1ff80 5f 48 4f 4f 4b 0a 23 64 65 66 69 6e 65 20 4f 50  _HOOK.#define OP
1ff90 46 4c 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20  FLAG_ISNOOP     
1ffa0 20 20 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50     0x40    /* OP
1ffb0 5f 44 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65  _Delete does pre
1ffc0 2d 75 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c  -update-hook onl
1ffd0 79 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 64 65 66  y */.#endif.#def
1ffe0 69 6e 65 20 4f 50 46 4c 41 47 5f 4c 45 4e 47 54  ine OPFLAG_LENGT
1fff0 48 41 52 47 20 20 20 20 20 30 78 34 30 20 20 20  HARG     0x40   
20000 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e   /* OP_Column on
20010 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 65 6e 67  ly used for leng
20020 74 68 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20  th() */.#define 
20030 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47  OPFLAG_TYPEOFARG
20040 20 20 20 20 20 30 78 38 30 20 20 20 20 2f 2a 20       0x80    /* 
20050 4f 50 5f 43 6f 6c 75 6d 6e 20 6f 6e 6c 79 20 75  OP_Column only u
20060 73 65 64 20 66 6f 72 20 74 79 70 65 6f 66 28 29  sed for typeof()
20070 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20080 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
20090 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f 4f   0x01    /* OP_O
200a0 70 65 6e 2a 2a 20 75 73 65 64 20 74 6f 20 6f 70  pen** used to op
200b0 65 6e 20 62 75 6c 6b 20 63 75 72 73 6f 72 20 2a  en bulk cursor *
200c0 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47  /.#define OPFLAG
200d0 5f 53 45 45 4b 45 51 20 20 20 20 20 20 20 20 30  _SEEKEQ        0
200e0 78 30 32 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65  x02    /* OP_Ope
200f0 6e 2a 2a 20 63 75 72 73 6f 72 20 75 73 65 73 20  n** cursor uses 
20100 45 51 20 73 65 65 6b 20 6f 6e 6c 79 20 2a 2f 0a  EQ seek only */.
20110 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 46  #define OPFLAG_F
20120 4f 52 44 45 4c 45 54 45 20 20 20 20 20 30 78 30  ORDELETE     0x0
20130 38 20 20 20 20 2f 2a 20 4f 50 5f 4f 70 65 6e 20  8    /* OP_Open 
20140 73 68 6f 75 6c 64 20 75 73 65 20 42 54 52 45 45  should use BTREE
20150 5f 46 4f 52 44 45 4c 45 54 45 20 2a 2f 0a 23 64  _FORDELETE */.#d
20160 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 32 49  efine OPFLAG_P2I
20170 53 52 45 47 20 20 20 20 20 20 20 30 78 31 30 20  SREG       0x10 
20180 20 20 20 2f 2a 20 50 32 20 74 6f 20 4f 50 5f 4f     /* P2 to OP_O
20190 70 65 6e 2a 2a 20 69 73 20 61 20 72 65 67 69 73  pen** is a regis
201a0 74 65 72 20 6e 75 6d 62 65 72 20 2a 2f 0a 23 64  ter number */.#d
201b0 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 50 45 52  efine OPFLAG_PER
201c0 4d 55 54 45 20 20 20 20 20 20 20 30 78 30 31 20  MUTE       0x01 
201d0 20 20 20 2f 2a 20 4f 50 5f 43 6f 6d 70 61 72 65     /* OP_Compare
201e0 3a 20 75 73 65 20 74 68 65 20 70 65 72 6d 75 74  : use the permut
201f0 61 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ation */.#define
20200 20 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49   OPFLAG_SAVEPOSI
20210 54 49 4f 4e 20 20 30 78 30 32 20 20 20 20 2f 2a  TION  0x02    /*
20220 20 4f 50 5f 44 65 6c 65 74 65 3a 20 6b 65 65 70   OP_Delete: keep
20230 20 63 75 72 73 6f 72 20 70 6f 73 69 74 69 6f 6e   cursor position
20240 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20250 41 47 5f 41 55 58 44 45 4c 45 54 45 20 20 20 20  AG_AUXDELETE    
20260 20 30 78 30 34 20 20 20 20 2f 2a 20 4f 50 5f 44   0x04    /* OP_D
20270 65 6c 65 74 65 3a 20 69 6e 64 65 78 20 69 6e 20  elete: index in 
20280 61 20 44 45 4c 45 54 45 20 6f 70 20 2a 2f 0a 0a  a DELETE op */..
20290 2f 2a 0a 20 2a 20 45 61 63 68 20 74 72 69 67 67  /*. * Each trigg
202a0 65 72 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68  er present in th
202b0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
202c0 61 20 69 73 20 73 74 6f 72 65 64 20 61 73 20 61  a is stored as a
202d0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 0a 20 2a  n instance of. *
202e0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 2e   struct Trigger.
202f0 0a 20 2a 0a 20 2a 20 50 6f 69 6e 74 65 72 73 20  . *. * Pointers 
20300 74 6f 20 69 6e 73 74 61 6e 63 65 73 20 6f 66 20  to instances of 
20310 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20 61  struct Trigger a
20320 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74 77 6f  re stored in two
20330 20 77 61 79 73 2e 0a 20 2a 20 31 2e 20 49 6e 20   ways.. * 1. In 
20340 74 68 65 20 22 74 72 69 67 48 61 73 68 22 20 68  the "trigHash" h
20350 61 73 68 20 74 61 62 6c 65 20 28 70 61 72 74 20  ash table (part 
20360 6f 66 20 74 68 65 20 73 71 6c 69 74 65 33 2a 20  of the sqlite3* 
20370 74 68 61 74 20 72 65 70 72 65 73 65 6e 74 73 20  that represents 
20380 74 68 65 0a 20 2a 20 20 20 20 64 61 74 61 62 61  the. *    databa
20390 73 65 29 2e 20 54 68 69 73 20 61 6c 6c 6f 77 73  se). This allows
203a0 20 54 72 69 67 67 65 72 20 73 74 72 75 63 74 75   Trigger structu
203b0 72 65 73 20 74 6f 20 62 65 20 72 65 74 72 69 65  res to be retrie
203c0 76 65 64 20 62 79 20 6e 61 6d 65 2e 0a 20 2a 20  ved by name.. * 
203d0 32 2e 20 41 6c 6c 20 74 72 69 67 67 65 72 73 20  2. All triggers 
203e0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
203f0 61 20 73 69 6e 67 6c 65 20 74 61 62 6c 65 20 66  a single table f
20400 6f 72 6d 20 61 20 6c 69 6e 6b 65 64 20 6c 69 73  orm a linked lis
20410 74 2c 20 75 73 69 6e 67 20 74 68 65 0a 20 2a 20  t, using the. * 
20420 20 20 20 70 4e 65 78 74 20 6d 65 6d 62 65 72 20     pNext member 
20430 6f 66 20 73 74 72 75 63 74 20 54 72 69 67 67 65  of struct Trigge
20440 72 2e 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20  r. A pointer to 
20450 74 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e  the first elemen
20460 74 20 6f 66 20 74 68 65 0a 20 2a 20 20 20 20 6c  t of the. *    l
20470 69 6e 6b 65 64 20 6c 69 73 74 20 69 73 20 73 74  inked list is st
20480 6f 72 65 64 20 61 73 20 74 68 65 20 22 70 54 72  ored as the "pTr
20490 69 67 67 65 72 22 20 6d 65 6d 62 65 72 20 6f 66  igger" member of
204a0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0a   the associated.
204b0 20 2a 20 20 20 20 73 74 72 75 63 74 20 54 61 62   *    struct Tab
204c0 6c 65 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22 73  le.. *. * The "s
204d0 74 65 70 5f 6c 69 73 74 22 20 6d 65 6d 62 65 72  tep_list" member
204e0 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66   points to the f
204f0 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20  irst element of 
20500 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 0a 20 2a  a linked list. *
20510 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
20520 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 73  SQL statements s
20530 70 65 63 69 66 69 65 64 20 61 73 20 74 68 65 20  pecified as the 
20540 74 72 69 67 67 65 72 20 70 72 6f 67 72 61 6d 2e  trigger program.
20550 0a 20 2a 2f 0a 73 74 72 75 63 74 20 54 72 69 67  . */.struct Trig
20560 67 65 72 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e  ger {.  char *zN
20570 61 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  ame;            
20580 2f 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  /* The name of t
20590 68 65 20 74 72 69 67 67 65 72 20 20 20 20 20 20  he trigger      
205a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
205b0 20 20 2a 2f 0a 20 20 63 68 61 72 20 2a 74 61 62    */.  char *tab
205c0 6c 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  le;            /
205d0 2a 20 54 68 65 20 74 61 62 6c 65 20 6f 72 20 76  * The table or v
205e0 69 65 77 20 74 6f 20 77 68 69 63 68 20 74 68 65  iew to which the
205f0 20 74 72 69 67 67 65 72 20 61 70 70 6c 69 65 73   trigger applies
20600 20 2a 2f 0a 20 20 75 38 20 6f 70 3b 20 20 20 20   */.  u8 op;    
20610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
20620 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
20630 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
20640 5f 49 4e 53 45 52 54 20 20 20 20 20 20 20 20 20  _INSERT         
20650 2a 2f 0a 20 20 75 38 20 74 72 5f 74 6d 3b 20 20  */.  u8 tr_tm;  
20660 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
20670 4f 6e 65 20 6f 66 20 54 52 49 47 47 45 52 5f 42  One of TRIGGER_B
20680 45 46 4f 52 45 2c 20 54 52 49 47 47 45 52 5f 41  EFORE, TRIGGER_A
20690 46 54 45 52 20 2a 2f 0a 20 20 45 78 70 72 20 2a  FTER */.  Expr *
206a0 70 57 68 65 6e 3b 20 20 20 20 20 20 20 20 20 20  pWhen;          
206b0 20 20 2f 2a 20 54 68 65 20 57 48 45 4e 20 63 6c    /* The WHEN cl
206c0 61 75 73 65 20 6f 66 20 74 68 65 20 65 78 70 72  ause of the expr
206d0 65 73 73 69 6f 6e 20 28 6d 61 79 20 62 65 20 4e  ession (may be N
206e0 55 4c 4c 29 20 2a 2f 0a 20 20 49 64 4c 69 73 74  ULL) */.  IdList
206f0 20 2a 70 43 6f 6c 75 6d 6e 73 3b 20 20 20 20 20   *pColumns;     
20700 20 20 2f 2a 20 49 66 20 74 68 69 73 20 69 73 20    /* If this is 
20710 61 6e 20 55 50 44 41 54 45 20 4f 46 20 3c 63 6f  an UPDATE OF <co
20720 6c 75 6d 6e 2d 6c 69 73 74 3e 20 74 72 69 67 67  lumn-list> trigg
20730 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
20740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20750 20 74 68 65 20 3c 63 6f 6c 75 6d 6e 2d 6c 69 73   the <column-lis
20760 74 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65 72  t> is stored her
20770 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
20780 53 63 68 65 6d 61 3b 20 20 20 20 20 20 20 20 2f  Schema;        /
20790 2a 20 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e  * Schema contain
207a0 69 6e 67 20 74 68 65 20 74 72 69 67 67 65 72 20  ing the trigger 
207b0 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70 54 61  */.  Schema *pTa
207c0 62 53 63 68 65 6d 61 3b 20 20 20 20 20 2f 2a 20  bSchema;     /* 
207d0 53 63 68 65 6d 61 20 63 6f 6e 74 61 69 6e 69 6e  Schema containin
207e0 67 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20  g the table */. 
207f0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 74   TriggerStep *st
20800 65 70 5f 6c 69 73 74 3b 20 2f 2a 20 4c 69 6e 6b  ep_list; /* Link
20810 20 6c 69 73 74 20 6f 66 20 74 72 69 67 67 65 72   list of trigger
20820 20 70 72 6f 67 72 61 6d 20 73 74 65 70 73 20 20   program steps  
20830 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
20840 54 72 69 67 67 65 72 20 2a 70 4e 65 78 74 3b 20  Trigger *pNext; 
20850 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20          /* Next 
20860 74 72 69 67 67 65 72 20 61 73 73 6f 63 69 61 74  trigger associat
20870 65 64 20 77 69 74 68 20 74 68 65 20 74 61 62 6c  ed with the tabl
20880 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41  e */.};../*.** A
20890 20 74 72 69 67 67 65 72 20 69 73 20 65 69 74 68   trigger is eith
208a0 65 72 20 61 20 42 45 46 4f 52 45 20 6f 72 20 61  er a BEFORE or a
208b0 6e 20 41 46 54 45 52 20 74 72 69 67 67 65 72 2e  n AFTER trigger.
208c0 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    The following 
208d0 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 74  constants.** det
208e0 65 72 6d 69 6e 65 20 77 68 69 63 68 2e 0a 2a 2a  ermine which..**
208f0 0a 2a 2a 20 49 66 20 74 68 65 72 65 20 61 72 65  .** If there are
20900 20 6d 75 6c 74 69 70 6c 65 20 74 72 69 67 67 65   multiple trigge
20910 72 73 2c 20 79 6f 75 20 6d 69 67 68 74 20 6f 66  rs, you might of
20920 20 73 6f 6d 65 20 42 45 46 4f 52 45 20 61 6e 64   some BEFORE and
20930 20 73 6f 6d 65 20 41 46 54 45 52 2e 0a 2a 2a 20   some AFTER..** 
20940 49 6e 20 74 68 61 74 20 63 61 73 65 73 2c 20 74  In that cases, t
20950 68 65 20 63 6f 6e 73 74 61 6e 74 73 20 62 65 6c  he constants bel
20960 6f 77 20 63 61 6e 20 62 65 20 4f 52 65 64 20 74  ow can be ORed t
20970 6f 67 65 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66  ogether..*/.#def
20980 69 6e 65 20 54 52 49 47 47 45 52 5f 42 45 46 4f  ine TRIGGER_BEFO
20990 52 45 20 20 31 0a 23 64 65 66 69 6e 65 20 54 52  RE  1.#define TR
209a0 49 47 47 45 52 5f 41 46 54 45 52 20 20 20 32 0a  IGGER_AFTER   2.
209b0 0a 2f 2a 0a 20 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*. * An instan
209c0 63 65 20 6f 66 20 73 74 72 75 63 74 20 54 72 69  ce of struct Tri
209d0 67 67 65 72 53 74 65 70 20 69 73 20 75 73 65 64  ggerStep is used
209e0 20 74 6f 20 73 74 6f 72 65 20 61 20 73 69 6e 67   to store a sing
209f0 6c 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  le SQL statement
20a00 0a 20 2a 20 74 68 61 74 20 69 73 20 61 20 70 61  . * that is a pa
20a10 72 74 20 6f 66 20 61 20 74 72 69 67 67 65 72 2d  rt of a trigger-
20a20 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20 2a 20 49  program.. *. * I
20a30 6e 73 74 61 6e 63 65 73 20 6f 66 20 73 74 72 75  nstances of stru
20a40 63 74 20 54 72 69 67 67 65 72 53 74 65 70 20 61  ct TriggerStep a
20a50 72 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 73  re stored in a s
20a60 69 6e 67 6c 79 20 6c 69 6e 6b 65 64 20 6c 69 73  ingly linked lis
20a70 74 20 28 6c 69 6e 6b 65 64 0a 20 2a 20 75 73 69  t (linked. * usi
20a80 6e 67 20 74 68 65 20 22 70 4e 65 78 74 22 20 6d  ng the "pNext" m
20a90 65 6d 62 65 72 29 20 72 65 66 65 72 65 6e 63 65  ember) reference
20aa0 64 20 62 79 20 74 68 65 20 22 73 74 65 70 5f 6c  d by the "step_l
20ab0 69 73 74 22 20 6d 65 6d 62 65 72 20 6f 66 20 74  ist" member of t
20ac0 68 65 0a 20 2a 20 61 73 73 6f 63 69 61 74 65 64  he. * associated
20ad0 20 73 74 72 75 63 74 20 54 72 69 67 67 65 72 20   struct Trigger 
20ae0 69 6e 73 74 61 6e 63 65 2e 20 54 68 65 20 66 69  instance. The fi
20af0 72 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74  rst element of t
20b00 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 69  he linked list i
20b10 73 0a 20 2a 20 74 68 65 20 66 69 72 73 74 20 73  s. * the first s
20b20 74 65 70 20 6f 66 20 74 68 65 20 74 72 69 67 67  tep of the trigg
20b30 65 72 2d 70 72 6f 67 72 61 6d 2e 0a 20 2a 0a 20  er-program.. *. 
20b40 2a 20 54 68 65 20 22 6f 70 22 20 6d 65 6d 62 65  * The "op" membe
20b50 72 20 69 6e 64 69 63 61 74 65 73 20 77 68 65 74  r indicates whet
20b60 68 65 72 20 74 68 69 73 20 69 73 20 61 20 22 44  her this is a "D
20b70 45 4c 45 54 45 22 2c 20 22 49 4e 53 45 52 54 22  ELETE", "INSERT"
20b80 2c 20 22 55 50 44 41 54 45 22 20 6f 72 0a 20 2a  , "UPDATE" or. *
20b90 20 22 53 45 4c 45 43 54 22 20 73 74 61 74 65 6d   "SELECT" statem
20ba0 65 6e 74 2e 20 54 68 65 20 6d 65 61 6e 69 6e 67  ent. The meaning
20bb0 73 20 6f 66 20 74 68 65 20 6f 74 68 65 72 20 6d  s of the other m
20bc0 65 6d 62 65 72 73 20 69 73 20 64 65 74 65 72 6d  embers is determ
20bd0 69 6e 65 64 20 62 79 20 74 68 65 0a 20 2a 20 76  ined by the. * v
20be0 61 6c 75 65 20 6f 66 20 22 6f 70 22 20 61 73 20  alue of "op" as 
20bf0 66 6f 6c 6c 6f 77 73 3a 0a 20 2a 0a 20 2a 20 28  follows:. *. * (
20c00 6f 70 20 3d 3d 20 54 4b 5f 49 4e 53 45 52 54 29  op == TK_INSERT)
20c10 0a 20 2a 20 6f 72 63 6f 6e 66 20 20 20 20 2d 3e  . * orconf    ->
20c20 20 73 74 6f 72 65 73 20 74 68 65 20 4f 4e 20 43   stores the ON C
20c30 4f 4e 46 4c 49 43 54 20 61 6c 67 6f 72 69 74 68  ONFLICT algorith
20c40 6d 0a 20 2a 20 70 53 65 6c 65 63 74 20 20 20 2d  m. * pSelect   -
20c50 3e 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20  > If this is an 
20c60 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20  INSERT INTO ... 
20c70 53 45 4c 45 43 54 20 2e 2e 2e 20 73 74 61 74 65  SELECT ... state
20c80 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a 20 20 20  ment, then. *   
20c90 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 20             this 
20ca0 73 74 6f 72 65 73 20 61 20 70 6f 69 6e 74 65 72  stores a pointer
20cb0 20 74 6f 20 74 68 65 20 53 45 4c 45 43 54 20 73   to the SELECT s
20cc0 74 61 74 65 6d 65 6e 74 2e 20 4f 74 68 65 72 77  tatement. Otherw
20cd0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 7a 54 61  ise NULL.. * zTa
20ce0 72 67 65 74 20 20 20 2d 3e 20 44 65 71 75 6f 74  rget   -> Dequot
20cf0 65 64 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 74  ed name of the t
20d00 61 62 6c 65 20 74 6f 20 69 6e 73 65 72 74 20 69  able to insert i
20d10 6e 74 6f 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73  nto.. * pExprLis
20d20 74 20 2d 3e 20 49 66 20 74 68 69 73 20 69 73 20  t -> If this is 
20d30 61 6e 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 2e  an INSERT INTO .
20d40 2e 2e 20 56 41 4c 55 45 53 20 2e 2e 2e 20 73 74  .. VALUES ... st
20d50 61 74 65 6d 65 6e 74 2c 20 74 68 65 6e 0a 20 2a  atement, then. *
20d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
20d70 69 73 20 73 74 6f 72 65 73 20 76 61 6c 75 65 73  is stores values
20d80 20 74 6f 20 62 65 20 69 6e 73 65 72 74 65 64 2e   to be inserted.
20d90 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e   Otherwise NULL.
20da0 0a 20 2a 20 70 49 64 4c 69 73 74 20 20 20 2d 3e  . * pIdList   ->
20db0 20 49 66 20 74 68 69 73 20 69 73 20 61 6e 20 49   If this is an I
20dc0 4e 53 45 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 28  NSERT INTO ... (
20dd0 3c 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73 3e 29 20  <column-names>) 
20de0 56 41 4c 55 45 53 20 2e 2e 2e 0a 20 2a 20 20 20  VALUES .... *   
20df0 20 20 20 20 20 20 20 20 20 20 20 73 74 61 74 65             state
20e00 6d 65 6e 74 2c 20 74 68 65 6e 20 74 68 69 73 20  ment, then this 
20e10 73 74 6f 72 65 73 20 74 68 65 20 63 6f 6c 75 6d  stores the colum
20e20 6e 2d 6e 61 6d 65 73 20 74 6f 20 62 65 0a 20 2a  n-names to be. *
20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
20e40 73 65 72 74 65 64 20 69 6e 74 6f 2e 0a 20 2a 0a  serted into.. *.
20e50 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 44 45 4c   * (op == TK_DEL
20e60 45 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74 20  ETE). * zTarget 
20e70 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61    -> Dequoted na
20e80 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  me of the table 
20e90 74 6f 20 64 65 6c 65 74 65 20 66 72 6f 6d 2e 0a  to delete from..
20ea0 20 2a 20 70 57 68 65 72 65 20 20 20 20 2d 3e 20   * pWhere    -> 
20eb0 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
20ec0 20 6f 66 20 74 68 65 20 44 45 4c 45 54 45 20 73   of the DELETE s
20ed0 74 61 74 65 6d 65 6e 74 20 69 66 20 6f 6e 65 20  tatement if one 
20ee0 69 73 20 73 70 65 63 69 66 69 65 64 2e 0a 20 2a  is specified.. *
20ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4f 74                Ot
20f00 68 65 72 77 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a  herwise NULL.. *
20f10 0a 20 2a 20 28 6f 70 20 3d 3d 20 54 4b 5f 55 50  . * (op == TK_UP
20f20 44 41 54 45 29 0a 20 2a 20 7a 54 61 72 67 65 74  DATE). * zTarget
20f30 20 20 20 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e     -> Dequoted n
20f40 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
20f50 20 74 6f 20 75 70 64 61 74 65 2e 0a 20 2a 20 70   to update.. * p
20f60 57 68 65 72 65 20 20 20 20 2d 3e 20 54 68 65 20  Where    -> The 
20f70 57 48 45 52 45 20 63 6c 61 75 73 65 20 6f 66 20  WHERE clause of 
20f80 74 68 65 20 55 50 44 41 54 45 20 73 74 61 74 65  the UPDATE state
20f90 6d 65 6e 74 20 69 66 20 6f 6e 65 20 69 73 20 73  ment if one is s
20fa0 70 65 63 69 66 69 65 64 2e 0a 20 2a 20 20 20 20  pecified.. *    
20fb0 20 20 20 20 20 20 20 20 20 20 4f 74 68 65 72 77            Otherw
20fc0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 45 78  ise NULL.. * pEx
20fd0 70 72 4c 69 73 74 20 2d 3e 20 41 20 6c 69 73 74  prList -> A list
20fe0 20 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 73 20   of the columns 
20ff0 74 6f 20 75 70 64 61 74 65 20 61 6e 64 20 74 68  to update and th
21000 65 20 65 78 70 72 65 73 73 69 6f 6e 73 20 74 6f  e expressions to
21010 20 75 70 64 61 74 65 0a 20 2a 20 20 20 20 20 20   update. *      
21020 20 20 20 20 20 20 20 20 74 68 65 6d 20 74 6f 2e          them to.
21030 20 53 65 65 20 73 71 6c 69 74 65 33 55 70 64 61   See sqlite3Upda
21040 74 65 28 29 20 64 6f 63 75 6d 65 6e 74 61 74 69  te() documentati
21050 6f 6e 20 6f 66 20 22 70 43 68 61 6e 67 65 73 22  on of "pChanges"
21060 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
21070 20 61 72 67 75 6d 65 6e 74 2e 0a 20 2a 0a 20 2a   argument.. *. *
21080 2f 0a 73 74 72 75 63 74 20 54 72 69 67 67 65 72  /.struct Trigger
21090 53 74 65 70 20 7b 0a 20 20 75 38 20 6f 70 3b 20  Step {.  u8 op; 
210a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
210b0 20 4f 6e 65 20 6f 66 20 54 4b 5f 44 45 4c 45 54   One of TK_DELET
210c0 45 2c 20 54 4b 5f 55 50 44 41 54 45 2c 20 54 4b  E, TK_UPDATE, TK
210d0 5f 49 4e 53 45 52 54 2c 20 54 4b 5f 53 45 4c 45  _INSERT, TK_SELE
210e0 43 54 20 2a 2f 0a 20 20 75 38 20 6f 72 63 6f 6e  CT */.  u8 orcon
210f0 66 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  f;           /* 
21100 4f 45 5f 52 6f 6c 6c 62 61 63 6b 20 65 74 63 2e  OE_Rollback etc.
21110 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
21120 54 72 69 67 3b 20 20 20 20 20 20 2f 2a 20 54 68  Trig;      /* Th
21130 65 20 74 72 69 67 67 65 72 20 74 68 61 74 20 74  e trigger that t
21140 68 69 73 20 73 74 65 70 20 69 73 20 61 20 70 61  his step is a pa
21150 72 74 20 6f 66 20 2a 2f 0a 20 20 53 65 6c 65 63  rt of */.  Selec
21160 74 20 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20  t *pSelect;     
21170 2f 2a 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d  /* SELECT statem
21180 65 6e 74 20 6f 72 20 52 48 53 20 6f 66 20 49 4e  ent or RHS of IN
21190 53 45 52 54 20 49 4e 54 4f 20 53 45 4c 45 43 54  SERT INTO SELECT
211a0 20 2e 2e 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a   ... */.  char *
211b0 7a 54 61 72 67 65 74 3b 20 20 20 20 20 20 20 2f  zTarget;       /
211c0 2a 20 54 61 72 67 65 74 20 74 61 62 6c 65 20 66  * Target table f
211d0 6f 72 20 44 45 4c 45 54 45 2c 20 55 50 44 41 54  or DELETE, UPDAT
211e0 45 2c 20 49 4e 53 45 52 54 20 2a 2f 0a 20 20 45  E, INSERT */.  E
211f0 78 70 72 20 2a 70 57 68 65 72 65 3b 20 20 20 20  xpr *pWhere;    
21200 20 20 20 20 2f 2a 20 54 68 65 20 57 48 45 52 45      /* The WHERE
21210 20 63 6c 61 75 73 65 20 66 6f 72 20 44 45 4c 45   clause for DELE
21220 54 45 20 6f 72 20 55 50 44 41 54 45 20 73 74 65  TE or UPDATE ste
21230 70 73 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  ps */.  ExprList
21240 20 2a 70 45 78 70 72 4c 69 73 74 3b 20 2f 2a 20   *pExprList; /* 
21250 53 45 54 20 63 6c 61 75 73 65 20 66 6f 72 20 55  SET clause for U
21260 50 44 41 54 45 2e 20 2a 2f 0a 20 20 49 64 4c 69  PDATE. */.  IdLi
21270 73 74 20 2a 70 49 64 4c 69 73 74 3b 20 20 20 20  st *pIdList;    
21280 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 73   /* Column names
21290 20 66 6f 72 20 49 4e 53 45 52 54 20 2a 2f 0a 20   for INSERT */. 
212a0 20 54 72 69 67 67 65 72 53 74 65 70 20 2a 70 4e   TriggerStep *pN
212b0 65 78 74 3b 20 20 2f 2a 20 4e 65 78 74 20 69 6e  ext;  /* Next in
212c0 20 74 68 65 20 6c 69 6e 6b 2d 6c 69 73 74 20 2a   the link-list *
212d0 2f 0a 20 20 54 72 69 67 67 65 72 53 74 65 70 20  /.  TriggerStep 
212e0 2a 70 4c 61 73 74 3b 20 20 2f 2a 20 4c 61 73 74  *pLast;  /* Last
212f0 20 65 6c 65 6d 65 6e 74 20 69 6e 20 6c 69 6e 6b   element in link
21300 2d 6c 69 73 74 2e 20 56 61 6c 69 64 20 66 6f 72  -list. Valid for
21310 20 31 73 74 20 65 6c 65 6d 20 6f 6e 6c 79 20 2a   1st elem only *
21320 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  /.};../*.** The 
21330 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
21340 75 72 65 20 63 6f 6e 74 61 69 6e 73 20 69 6e 66  ure contains inf
21350 6f 72 6d 61 74 69 6f 6e 20 75 73 65 64 20 62 79  ormation used by
21360 20 74 68 65 20 73 71 6c 69 74 65 46 69 78 2e 2e   the sqliteFix..
21370 2e 0a 2a 2a 20 72 6f 75 74 69 6e 65 73 20 61 73  ..** routines as
21380 20 74 68 65 79 20 77 61 6c 6b 20 74 68 65 20 70   they walk the p
21390 61 72 73 65 20 74 72 65 65 20 74 6f 20 6d 61 6b  arse tree to mak
213a0 65 20 64 61 74 61 62 61 73 65 20 72 65 66 65 72  e database refer
213b0 65 6e 63 65 73 0a 2a 2a 20 65 78 70 6c 69 63 69  ences.** explici
213c0 74 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74  t..*/.typedef st
213d0 72 75 63 74 20 44 62 46 69 78 65 72 20 44 62 46  ruct DbFixer DbF
213e0 69 78 65 72 3b 0a 73 74 72 75 63 74 20 44 62 46  ixer;.struct DbF
213f0 69 78 65 72 20 7b 0a 20 20 50 61 72 73 65 20 2a  ixer {.  Parse *
21400 70 50 61 72 73 65 3b 20 20 20 20 20 20 2f 2a 20  pParse;      /* 
21410 54 68 65 20 70 61 72 73 69 6e 67 20 63 6f 6e 74  The parsing cont
21420 65 78 74 2e 20 20 45 72 72 6f 72 20 6d 65 73 73  ext.  Error mess
21430 61 67 65 73 20 77 72 69 74 74 65 6e 20 68 65 72  ages written her
21440 65 20 2a 2f 0a 20 20 53 63 68 65 6d 61 20 2a 70  e */.  Schema *p
21450 53 63 68 65 6d 61 3b 20 20 20 20 2f 2a 20 46 69  Schema;    /* Fi
21460 78 20 69 74 65 6d 73 20 74 6f 20 74 68 69 73 20  x items to this 
21470 73 63 68 65 6d 61 20 2a 2f 0a 20 20 69 6e 74 20  schema */.  int 
21480 62 56 61 72 4f 6e 6c 79 3b 20 20 20 20 20 20 20  bVarOnly;       
21490 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20 76 61 72  /* Check for var
214a0 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73  iable references
214b0 20 6f 6e 6c 79 20 2a 2f 0a 20 20 63 6f 6e 73 74   only */.  const
214c0 20 63 68 61 72 20 2a 7a 44 62 3b 20 20 20 20 2f   char *zDb;    /
214d0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
214e0 6f 62 6a 65 63 74 73 20 61 72 65 20 63 6f 6e 74  objects are cont
214f0 61 69 6e 65 64 20 69 6e 20 74 68 69 73 20 64 61  ained in this da
21500 74 61 62 61 73 65 20 2a 2f 0a 20 20 63 6f 6e 73  tabase */.  cons
21510 74 20 63 68 61 72 20 2a 7a 54 79 70 65 3b 20 20  t char *zType;  
21520 2f 2a 20 54 79 70 65 20 6f 66 20 74 68 65 20 63  /* Type of the c
21530 6f 6e 74 61 69 6e 65 72 20 2d 20 75 73 65 64 20  ontainer - used 
21540 66 6f 72 20 65 72 72 6f 72 20 6d 65 73 73 61 67  for error messag
21550 65 73 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 54 6f  es */.  const To
21560 6b 65 6e 20 2a 70 4e 61 6d 65 3b 20 2f 2a 20 4e  ken *pName; /* N
21570 61 6d 65 20 6f 66 20 74 68 65 20 63 6f 6e 74 61  ame of the conta
21580 69 6e 65 72 20 2d 20 75 73 65 64 20 66 6f 72 20  iner - used for 
21590 65 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 2a  error messages *
215a0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 6f  /.};../*.** An o
215b0 62 6a 65 63 74 65 64 20 75 73 65 64 20 74 6f 20  bjected used to 
215c0 61 63 63 75 6d 75 6c 61 74 65 20 74 68 65 20 74  accumulate the t
215d0 65 78 74 20 6f 66 20 61 20 73 74 72 69 6e 67 20  ext of a string 
215e0 77 68 65 72 65 20 77 65 0a 2a 2a 20 64 6f 20 6e  where we.** do n
215f0 6f 74 20 6e 65 63 65 73 73 61 72 69 6c 79 20 6b  ot necessarily k
21600 6e 6f 77 20 68 6f 77 20 62 69 67 20 74 68 65 20  now how big the 
21610 73 74 72 69 6e 67 20 77 69 6c 6c 20 62 65 20 69  string will be i
21620 6e 20 74 68 65 20 65 6e 64 2e 0a 2a 2f 0a 73 74  n the end..*/.st
21630 72 75 63 74 20 53 74 72 41 63 63 75 6d 20 7b 0a  ruct StrAccum {.
21640 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
21650 20 20 20 20 20 20 20 2f 2a 20 4f 70 74 69 6f 6e         /* Option
21660 61 6c 20 64 61 74 61 62 61 73 65 20 66 6f 72 20  al database for 
21670 6c 6f 6f 6b 61 73 69 64 65 2e 20 20 43 61 6e 20  lookaside.  Can 
21680 62 65 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 68 61  be NULL */.  cha
21690 72 20 2a 7a 42 61 73 65 3b 20 20 20 20 20 20 20  r *zBase;       
216a0 20 20 2f 2a 20 41 20 62 61 73 65 20 61 6c 6c 6f    /* A base allo
216b0 63 61 74 69 6f 6e 2e 20 20 4e 6f 74 20 66 72 6f  cation.  Not fro
216c0 6d 20 6d 61 6c 6c 6f 63 2e 20 2a 2f 0a 20 20 63  m malloc. */.  c
216d0 68 61 72 20 2a 7a 54 65 78 74 3b 20 20 20 20 20  har *zText;     
216e0 20 20 20 20 2f 2a 20 54 68 65 20 73 74 72 69 6e      /* The strin
216f0 67 20 63 6f 6c 6c 65 63 74 65 64 20 73 6f 20 66  g collected so f
21700 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e 43 68  ar */.  u32  nCh
21710 61 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ar;          /* 
21720 4c 65 6e 67 74 68 20 6f 66 20 74 68 65 20 73 74  Length of the st
21730 72 69 6e 67 20 73 6f 20 66 61 72 20 2a 2f 0a 20  ring so far */. 
21740 20 75 33 32 20 20 6e 41 6c 6c 6f 63 3b 20 20 20   u32  nAlloc;   
21750 20 20 20 20 20 20 2f 2a 20 41 6d 6f 75 6e 74 20        /* Amount 
21760 6f 66 20 73 70 61 63 65 20 61 6c 6c 6f 63 61 74  of space allocat
21770 65 64 20 69 6e 20 7a 54 65 78 74 20 2a 2f 0a 20  ed in zText */. 
21780 20 75 33 32 20 20 6d 78 41 6c 6c 6f 63 3b 20 20   u32  mxAlloc;  
21790 20 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d        /* Maximum
217a0 20 61 6c 6c 6f 77 65 64 20 61 6c 6c 6f 63 61 74   allowed allocat
217b0 69 6f 6e 2e 20 20 30 20 66 6f 72 20 6e 6f 20 6d  ion.  0 for no m
217c0 61 6c 6c 6f 63 20 75 73 61 67 65 20 2a 2f 0a 20  alloc usage */. 
217d0 20 75 38 20 20 20 61 63 63 45 72 72 6f 72 3b 20   u8   accError; 
217e0 20 20 20 20 20 20 2f 2a 20 53 54 52 41 43 43 55        /* STRACCU
217f0 4d 5f 4e 4f 4d 45 4d 20 6f 72 20 53 54 52 41 43  M_NOMEM or STRAC
21800 43 55 4d 5f 54 4f 4f 42 49 47 20 2a 2f 0a 20 20  CUM_TOOBIG */.  
21810 75 38 20 20 20 70 72 69 6e 74 66 46 6c 61 67 73  u8   printfFlags
21820 3b 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50  ;    /* SQLITE_P
21830 52 49 4e 54 46 20 66 6c 61 67 73 20 62 65 6c 6f  RINTF flags belo
21840 77 20 2a 2f 0a 7d 3b 0a 23 64 65 66 69 6e 65 20  w */.};.#define 
21850 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d 20 20  STRACCUM_NOMEM  
21860 20 31 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43   1.#define STRAC
21870 43 55 4d 5f 54 4f 4f 42 49 47 20 20 32 0a 23 64  CUM_TOOBIG  2.#d
21880 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
21890 4e 54 46 5f 49 4e 54 45 52 4e 41 4c 20 30 78 30  NTF_INTERNAL 0x0
218a0 31 20 20 2f 2a 20 49 6e 74 65 72 6e 61 6c 2d 75  1  /* Internal-u
218b0 73 65 2d 6f 6e 6c 79 20 63 6f 6e 76 65 72 74 65  se-only converte
218c0 72 73 20 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64  rs allowed */.#d
218d0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49  efine SQLITE_PRI
218e0 4e 54 46 5f 53 51 4c 46 55 4e 43 20 20 30 78 30  NTF_SQLFUNC  0x0
218f0 32 20 20 2f 2a 20 53 51 4c 20 66 75 6e 63 74 69  2  /* SQL functi
21900 6f 6e 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  on arguments to 
21910 56 58 50 72 69 6e 74 66 20 2a 2f 0a 23 64 65 66  VXPrintf */.#def
21920 69 6e 65 20 53 51 4c 49 54 45 5f 50 52 49 4e 54  ine SQLITE_PRINT
21930 46 5f 4d 41 4c 4c 4f 43 45 44 20 30 78 30 34 20  F_MALLOCED 0x04 
21940 20 2f 2a 20 54 72 75 65 20 69 66 20 78 54 65 78   /* True if xTex
21950 74 20 69 73 20 61 6c 6c 6f 63 61 74 65 64 20 73  t is allocated s
21960 70 61 63 65 20 2a 2f 0a 0a 23 64 65 66 69 6e 65  pace */..#define
21970 20 69 73 4d 61 6c 6c 6f 63 65 64 28 58 29 20 20   isMalloced(X)  
21980 28 28 28 58 29 2d 3e 70 72 69 6e 74 66 46 6c 61  (((X)->printfFla
21990 67 73 20 26 20 53 51 4c 49 54 45 5f 50 52 49 4e  gs & SQLITE_PRIN
219a0 54 46 5f 4d 41 4c 4c 4f 43 45 44 29 21 3d 30 29  TF_MALLOCED)!=0)
219b0 0a 0a 0a 2f 2a 0a 2a 2a 20 41 20 70 6f 69 6e 74  .../*.** A point
219c0 65 72 20 74 6f 20 74 68 69 73 20 73 74 72 75 63  er to this struc
219d0 74 75 72 65 20 69 73 20 75 73 65 64 20 74 6f 20  ture is used to 
219e0 63 6f 6d 6d 75 6e 69 63 61 74 65 20 69 6e 66 6f  communicate info
219f0 72 6d 61 74 69 6f 6e 0a 2a 2a 20 66 72 6f 6d 20  rmation.** from 
21a00 73 71 6c 69 74 65 33 49 6e 69 74 20 61 6e 64 20  sqlite3Init and 
21a10 4f 50 5f 50 61 72 73 65 53 63 68 65 6d 61 20 69  OP_ParseSchema i
21a20 6e 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 49  nto the sqlite3I
21a30 6e 69 74 43 61 6c 6c 62 61 63 6b 2e 0a 2a 2f 0a  nitCallback..*/.
21a40 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 7b  typedef struct {
21a50 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20  .  sqlite3 *db; 
21a60 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 61         /* The da
21a70 74 61 62 61 73 65 20 62 65 69 6e 67 20 69 6e 69  tabase being ini
21a80 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 63 68  tialized */.  ch
21a90 61 72 20 2a 2a 70 7a 45 72 72 4d 73 67 3b 20 20  ar **pzErrMsg;  
21aa0 20 20 2f 2a 20 45 72 72 6f 72 20 6d 65 73 73 61    /* Error messa
21ab0 67 65 20 73 74 6f 72 65 64 20 68 65 72 65 20 2a  ge stored here *
21ac0 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
21ad0 20 20 20 20 20 20 20 20 2f 2a 20 30 20 66 6f 72          /* 0 for
21ae0 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20   main database. 
21af0 20 31 20 66 6f 72 20 54 45 4d 50 2c 20 32 2e 2e   1 for TEMP, 2..
21b00 20 66 6f 72 20 41 54 54 41 43 48 65 64 20 2a 2f   for ATTACHed */
21b10 0a 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20  .  int rc;      
21b20 20 20 20 20 20 20 20 2f 2a 20 52 65 73 75 6c 74         /* Result
21b30 20 63 6f 64 65 20 73 74 6f 72 65 64 20 68 65 72   code stored her
21b40 65 20 2a 2f 0a 7d 20 49 6e 69 74 44 61 74 61 3b  e */.} InitData;
21b50 0a 0a 2f 2a 0a 2a 2a 20 53 74 72 75 63 74 75 72  ../*.** Structur
21b60 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 67 6c 6f  e containing glo
21b70 62 61 6c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  bal configuratio
21b80 6e 20 64 61 74 61 20 66 6f 72 20 74 68 65 20 53  n data for the S
21b90 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0a 2a  QLite library..*
21ba0 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
21bb0 75 72 65 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e  ure also contain
21bc0 73 20 73 6f 6d 65 20 73 74 61 74 65 20 69 6e 66  s some state inf
21bd0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
21be0 75 63 74 20 53 71 6c 69 74 65 33 43 6f 6e 66 69  uct Sqlite3Confi
21bf0 67 20 7b 0a 20 20 69 6e 74 20 62 4d 65 6d 73 74  g {.  int bMemst
21c00 61 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  at;             
21c10 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
21c20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d 6f 72 79  to enable memory
21c30 20 73 74 61 74 75 73 20 2a 2f 0a 20 20 69 6e 74   status */.  int
21c40 20 62 43 6f 72 65 4d 75 74 65 78 3b 20 20 20 20   bCoreMutex;    
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21c60 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
21c70 20 63 6f 72 65 20 6d 75 74 65 78 69 6e 67 20 2a   core mutexing *
21c80 2f 0a 20 20 69 6e 74 20 62 46 75 6c 6c 4d 75 74  /.  int bFullMut
21c90 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ex;             
21ca0 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
21cb0 20 65 6e 61 62 6c 65 20 66 75 6c 6c 20 6d 75 74   enable full mut
21cc0 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74 20 62  exing */.  int b
21cd0 4f 70 65 6e 55 72 69 3b 20 20 20 20 20 20 20 20  OpenUri;        
21ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
21cf0 54 72 75 65 20 74 6f 20 69 6e 74 65 72 70 72 65  True to interpre
21d00 74 20 66 69 6c 65 6e 61 6d 65 73 20 61 73 20 55  t filenames as U
21d10 52 49 73 20 2a 2f 0a 20 20 69 6e 74 20 62 55 73  RIs */.  int bUs
21d20 65 43 69 73 3b 20 20 20 20 20 20 20 20 20 20 20  eCis;           
21d30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
21d40 65 20 63 6f 76 65 72 69 6e 67 20 69 6e 64 69 63  e covering indic
21d50 65 73 20 66 6f 72 20 66 75 6c 6c 2d 73 63 61 6e  es for full-scan
21d60 73 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 53 74 72  s */.  int mxStr
21d70 6c 65 6e 3b 20 20 20 20 20 20 20 20 20 20 20 20  len;            
21d80 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 78 69           /* Maxi
21d90 6d 75 6d 20 73 74 72 69 6e 67 20 6c 65 6e 67 74  mum string lengt
21da0 68 20 2a 2f 0a 20 20 69 6e 74 20 6e 65 76 65 72  h */.  int never
21db0 43 6f 72 72 75 70 74 3b 20 20 20 20 20 20 20 20  Corrupt;        
21dc0 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61           /* Data
21dd0 62 61 73 65 20 69 73 20 61 6c 77 61 79 73 20 77  base is always w
21de0 65 6c 6c 2d 66 6f 72 6d 65 64 20 2a 2f 0a 20 20  ell-formed */.  
21df0 69 6e 74 20 73 7a 4c 6f 6f 6b 61 73 69 64 65 3b  int szLookaside;
21e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21e10 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f 6f    /* Default loo
21e20 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 73 69  kaside buffer si
21e30 7a 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 4c 6f 6f  ze */.  int nLoo
21e40 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20 20 20  kaside;         
21e50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65 66            /* Def
21e60 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20 62  ault lookaside b
21e70 75 66 66 65 72 20 63 6f 75 6e 74 20 2a 2f 0a 20  uffer count */. 
21e80 20 69 6e 74 20 6e 53 74 6d 74 53 70 69 6c 6c 3b   int nStmtSpill;
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21ea0 20 20 20 2f 2a 20 53 74 6d 74 2d 6a 6f 75 72 6e     /* Stmt-journ
21eb0 61 6c 20 73 70 69 6c 6c 2d 74 6f 2d 64 69 73 6b  al spill-to-disk
21ec0 20 74 68 72 65 73 68 6f 6c 64 20 2a 2f 0a 20 20   threshold */.  
21ed0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
21ee0 6f 64 73 20 6d 3b 20 20 20 20 20 20 20 20 20 20  ods m;          
21ef0 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
21f00 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
21f10 20 69 6e 74 65 72 66 61 63 65 20 2a 2f 0a 20 20   interface */.  
21f20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65  sqlite3_mutex_me
21f30 74 68 6f 64 73 20 6d 75 74 65 78 3b 20 20 20 20  thods mutex;    
21f40 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 6d    /* Low-level m
21f50 75 74 65 78 20 69 6e 74 65 72 66 61 63 65 20 2a  utex interface *
21f60 2f 0a 20 20 73 71 6c 69 74 65 33 5f 70 63 61 63  /.  sqlite3_pcac
21f70 68 65 5f 6d 65 74 68 6f 64 73 32 20 70 63 61 63  he_methods2 pcac
21f80 68 65 32 3b 20 20 2f 2a 20 4c 6f 77 2d 6c 65 76  he2;  /* Low-lev
21f90 65 6c 20 70 61 67 65 2d 63 61 63 68 65 20 69 6e  el page-cache in
21fa0 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 76 6f 69  terface */.  voi
21fb0 64 20 2a 70 48 65 61 70 3b 20 20 20 20 20 20 20  d *pHeap;       
21fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
21fd0 2a 20 48 65 61 70 20 73 74 6f 72 61 67 65 20 73  * Heap storage s
21fe0 70 61 63 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 48  pace */.  int nH
21ff0 65 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20  eap;            
22000 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
22010 69 7a 65 20 6f 66 20 70 48 65 61 70 5b 5d 20 2a  ize of pHeap[] *
22020 2f 0a 20 20 69 6e 74 20 6d 6e 52 65 71 2c 20 6d  /.  int mnReq, m
22030 78 52 65 71 3b 20 20 20 20 20 20 20 20 20 20 20  xReq;           
22040 20 20 20 20 20 20 2f 2a 20 4d 69 6e 20 61 6e 64        /* Min and
22050 20 6d 61 78 20 68 65 61 70 20 72 65 71 75 65 73   max heap reques
22060 74 73 20 73 69 7a 65 73 20 2a 2f 0a 20 20 73 71  ts sizes */.  sq
22070 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 4d 6d  lite3_int64 szMm
22080 61 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ap;             
22090 2f 2a 20 6d 6d 61 70 28 29 20 73 70 61 63 65 20  /* mmap() space 
220a0 70 65 72 20 6f 70 65 6e 20 66 69 6c 65 20 2a 2f  per open file */
220b0 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  .  sqlite3_int64
220c0 20 6d 78 4d 6d 61 70 3b 20 20 20 20 20 20 20 20   mxMmap;        
220d0 20 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20       /* Maximum 
220e0 76 61 6c 75 65 20 66 6f 72 20 73 7a 4d 6d 61 70  value for szMmap
220f0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 53 63 72   */.  void *pScr
22100 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20 20  atch;           
22110 20 20 20 20 20 20 20 20 2f 2a 20 53 63 72 61 74          /* Scrat
22120 63 68 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69  ch memory */.  i
22130 6e 74 20 73 7a 53 63 72 61 74 63 68 3b 20 20 20  nt szScratch;   
22140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22150 20 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68   /* Size of each
22160 20 73 63 72 61 74 63 68 20 62 75 66 66 65 72 20   scratch buffer 
22170 2a 2f 0a 20 20 69 6e 74 20 6e 53 63 72 61 74 63  */.  int nScratc
22180 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
22190 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
221a0 20 6f 66 20 73 63 72 61 74 63 68 20 62 75 66 66   of scratch buff
221b0 65 72 73 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ers */.  void *p
221c0 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20 20  Page;           
221d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
221e0 67 65 20 63 61 63 68 65 20 6d 65 6d 6f 72 79 20  ge cache memory 
221f0 2a 2f 0a 20 20 69 6e 74 20 73 7a 50 61 67 65 3b  */.  int szPage;
22200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22210 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f         /* Size o
22220 66 20 65 61 63 68 20 70 61 67 65 20 69 6e 20 70  f each page in p
22230 50 61 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20  Page[] */.  int 
22240 6e 50 61 67 65 3b 20 20 20 20 20 20 20 20 20 20  nPage;          
22250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22260 20 4e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   Number of pages
22270 20 69 6e 20 70 50 61 67 65 5b 5d 20 2a 2f 0a 20   in pPage[] */. 
22280 20 69 6e 74 20 6d 78 50 61 72 73 65 72 53 74 61   int mxParserSta
22290 63 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ck;             
222a0 20 20 20 2f 2a 20 6d 61 78 69 6d 75 6d 20 64 65     /* maximum de
222b0 70 74 68 20 6f 66 20 74 68 65 20 70 61 72 73 65  pth of the parse
222c0 72 20 73 74 61 63 6b 20 2a 2f 0a 20 20 69 6e 74  r stack */.  int
222d0 20 73 68 61 72 65 64 43 61 63 68 65 45 6e 61 62   sharedCacheEnab
222e0 6c 65 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f  led;           /
222f0 2a 20 74 72 75 65 20 69 66 20 73 68 61 72 65 64  * true if shared
22300 2d 63 61 63 68 65 20 6d 6f 64 65 20 65 6e 61 62  -cache mode enab
22310 6c 65 64 20 2a 2f 0a 20 20 75 33 32 20 73 7a 50  led */.  u32 szP
22320 6d 61 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ma;             
22330 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61             /* Ma
22340 78 69 6d 75 6d 20 53 6f 72 74 65 72 20 50 4d 41  ximum Sorter PMA
22350 20 73 69 7a 65 20 2a 2f 0a 20 20 2f 2a 20 54 68   size */.  /* Th
22360 65 20 61 62 6f 76 65 20 6d 69 67 68 74 20 62 65  e above might be
22370 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 74 6f 20   initialized to 
22380 6e 6f 6e 2d 7a 65 72 6f 2e 20 20 54 68 65 20 66  non-zero.  The f
22390 6f 6c 6c 6f 77 69 6e 67 20 6e 65 65 64 20 74 6f  ollowing need to
223a0 20 61 6c 77 61 79 73 0a 20 20 2a 2a 20 69 6e 69   always.  ** ini
223b0 74 69 61 6c 6c 79 20 62 65 20 7a 65 72 6f 2c 20  tially be zero, 
223c0 68 6f 77 65 76 65 72 2e 20 2a 2f 0a 20 20 69 6e  however. */.  in
223d0 74 20 69 73 49 6e 69 74 3b 20 20 20 20 20 20 20  t isInit;       
223e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
223f0 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 69 6e  /* True after in
22400 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 68 61 73  itialization has
22410 20 66 69 6e 69 73 68 65 64 20 2a 2f 0a 20 20 69   finished */.  i
22420 6e 74 20 69 6e 50 72 6f 67 72 65 73 73 3b 20 20  nt inProgress;  
22430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22440 20 2f 2a 20 54 72 75 65 20 77 68 69 6c 65 20 69   /* True while i
22450 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20 69 6e  nitialization in
22460 20 70 72 6f 67 72 65 73 73 20 2a 2f 0a 20 20 69   progress */.  i
22470 6e 74 20 69 73 4d 75 74 65 78 49 6e 69 74 3b 20  nt isMutexInit; 
22480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22490 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20 6d   /* True after m
224a0 75 74 65 78 65 73 20 61 72 65 20 69 6e 69 74 69  utexes are initi
224b0 61 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20  alized */.  int 
224c0 69 73 4d 61 6c 6c 6f 63 49 6e 69 74 3b 20 20 20  isMallocInit;   
224d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
224e0 20 54 72 75 65 20 61 66 74 65 72 20 6d 61 6c 6c   True after mall
224f0 6f 63 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  oc is initialize
22500 64 20 2a 2f 0a 20 20 69 6e 74 20 69 73 50 43 61  d */.  int isPCa
22510 63 68 65 49 6e 69 74 3b 20 20 20 20 20 20 20 20  cheInit;        
22520 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
22530 20 61 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73   after malloc is
22540 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a   initialized */.
22550 20 20 69 6e 74 20 6e 52 65 66 49 6e 69 74 4d 75    int nRefInitMu
22560 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20 20  tex;            
22570 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
22580 20 75 73 65 72 73 20 6f 66 20 70 49 6e 69 74 4d   users of pInitM
22590 75 74 65 78 20 2a 2f 0a 20 20 73 71 6c 69 74 65  utex */.  sqlite
225a0 33 5f 6d 75 74 65 78 20 2a 70 49 6e 69 74 4d 75  3_mutex *pInitMu
225b0 74 65 78 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d  tex;        /* M
225c0 75 74 65 78 20 75 73 65 64 20 62 79 20 73 71 6c  utex used by sql
225d0 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
225e0 29 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 4c  ) */.  void (*xL
225f0 6f 67 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 63 6f  og)(void*,int,co
22600 6e 73 74 20 63 68 61 72 2a 29 3b 20 2f 2a 20 46  nst char*); /* F
22610 75 6e 63 74 69 6f 6e 20 66 6f 72 20 6c 6f 67 67  unction for logg
22620 69 6e 67 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ing */.  void *p
22630 4c 6f 67 41 72 67 3b 20 20 20 20 20 20 20 20 20  LogArg;         
22640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22650 20 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20   First argument 
22660 74 6f 20 78 4c 6f 67 28 29 20 2a 2f 0a 23 69 66  to xLog() */.#if
22670 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
22680 45 5f 53 51 4c 4c 4f 47 0a 20 20 76 6f 69 64 28  E_SQLLOG.  void(
22690 2a 78 53 71 6c 6c 6f 67 29 28 76 6f 69 64 2a 2c  *xSqllog)(void*,
226a0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
226b0 68 61 72 2a 2c 20 69 6e 74 29 3b 0a 20 20 76 6f  har*, int);.  vo
226c0 69 64 20 2a 70 53 71 6c 6c 6f 67 41 72 67 3b 0a  id *pSqllogArg;.
226d0 23 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51  #endif.#ifdef SQ
226e0 4c 49 54 45 5f 56 44 42 45 5f 43 4f 56 45 52 41  LITE_VDBE_COVERA
226f0 47 45 0a 20 20 2f 2a 20 54 68 65 20 66 6f 6c 6c  GE.  /* The foll
22700 6f 77 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20 28  owing callback (
22710 69 66 20 6e 6f 74 20 4e 55 4c 4c 29 20 69 73 20  if not NULL) is 
22720 69 6e 76 6f 6b 65 64 20 6f 6e 20 65 76 65 72 79  invoked on every
22730 20 56 44 42 45 20 62 72 61 6e 63 68 0a 20 20 2a   VDBE branch.  *
22740 2a 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 53 65  * operation.  Se
22750 74 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 75  t the callback u
22760 73 69 6e 67 20 53 51 4c 49 54 45 5f 54 45 53 54  sing SQLITE_TEST
22770 43 54 52 4c 5f 56 44 42 45 5f 43 4f 56 45 52 41  CTRL_VDBE_COVERA
22780 47 45 2e 0a 20 20 2a 2f 0a 20 20 76 6f 69 64 20  GE..  */.  void 
22790 28 2a 78 56 64 62 65 42 72 61 6e 63 68 29 28 76  (*xVdbeBranch)(v
227a0 6f 69 64 2a 2c 69 6e 74 20 69 53 72 63 4c 69 6e  oid*,int iSrcLin
227b0 65 2c 75 38 20 65 54 68 69 73 2c 75 38 20 65 4d  e,u8 eThis,u8 eM
227c0 78 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61 63 6b  x);  /* Callback
227d0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 56 64 62   */.  void *pVdb
227e0 65 42 72 61 6e 63 68 41 72 67 3b 20 20 20 20 20  eBranchArg;     
227f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22810 2f 2a 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  /* 1st argument 
22820 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
22830 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55  f SQLITE_OMIT_BU
22840 49 4c 54 49 4e 5f 54 45 53 54 0a 20 20 69 6e 74  ILTIN_TEST.  int
22850 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61 63 6b   (*xTestCallback
22860 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20 20 2f  )(int);        /
22870 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73 71 6c  * Invoked by sql
22880 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29 20 2a  ite3FaultSim() *
22890 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 62  /.#endif.  int b
228a0 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74 3b 20  LocaltimeFault; 
228b0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
228c0 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c 6f 63  True to fail loc
228d0 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73 20 2a  altime() calls *
228e0 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73  /.};../*.** This
228f0 20 6d 61 63 72 6f 20 69 73 20 75 73 65 64 20 69   macro is used i
22900 6e 73 69 64 65 20 6f 66 20 61 73 73 65 72 74 28  nside of assert(
22910 29 20 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20  ) statements to 
22920 69 6e 64 69 63 61 74 65 20 74 68 61 74 0a 2a 2a  indicate that.**
22930 20 74 68 65 20 61 73 73 65 72 74 20 69 73 20 6f   the assert is o
22940 6e 6c 79 20 76 61 6c 69 64 20 6f 6e 20 61 20 77  nly valid on a w
22950 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61 74 61 62  ell-formed datab
22960 61 73 65 2e 20 20 49 6e 73 74 65 61 64 20 6f 66  ase.  Instead of
22970 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 61 73 73 65  :.**.**     asse
22980 72 74 28 20 58 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f  rt( X );.**.** O
22990 6e 65 20 77 72 69 74 65 73 3a 0a 2a 2a 0a 2a 2a  ne writes:.**.**
229a0 20 20 20 20 20 61 73 73 65 72 74 28 20 58 20 7c       assert( X |
229b0 7c 20 43 4f 52 52 55 50 54 5f 44 42 20 29 3b 0a  | CORRUPT_DB );.
229c0 2a 2a 0a 2a 2a 20 43 4f 52 52 55 50 54 5f 44 42  **.** CORRUPT_DB
229d0 20 69 73 20 74 72 75 65 20 64 75 72 69 6e 67 20   is true during 
229e0 6e 6f 72 6d 61 6c 20 6f 70 65 72 61 74 69 6f 6e  normal operation
229f0 2e 20 20 43 4f 52 52 55 50 54 5f 44 42 20 64 6f  .  CORRUPT_DB do
22a00 65 73 20 6e 6f 74 20 69 6e 64 69 63 61 74 65 0a  es not indicate.
22a10 2a 2a 20 74 68 61 74 20 74 68 65 20 64 61 74 61  ** that the data
22a20 62 61 73 65 20 69 73 20 64 65 66 69 6e 69 74 65  base is definite
22a30 6c 79 20 63 6f 72 72 75 70 74 2c 20 6f 6e 6c 79  ly corrupt, only
22a40 20 74 68 61 74 20 69 74 20 6d 69 67 68 74 20 62   that it might b
22a50 65 20 63 6f 72 72 75 70 74 2e 0a 2a 2a 20 46 6f  e corrupt..** Fo
22a60 72 20 6d 6f 73 74 20 74 65 73 74 20 63 61 73 65  r most test case
22a70 73 2c 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73  s, CORRUPT_DB is
22a80 20 73 65 74 20 74 6f 20 66 61 6c 73 65 20 75 73   set to false us
22a90 69 6e 67 20 61 20 73 70 65 63 69 61 6c 0a 2a 2a  ing a special.**
22aa0 20 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f   sqlite3_test_co
22ab0 6e 74 72 6f 6c 28 29 2e 20 20 54 68 69 73 20 65  ntrol().  This e
22ac0 6e 61 62 6c 65 73 20 61 73 73 65 72 74 28 29 20  nables assert() 
22ad0 73 74 61 74 65 6d 65 6e 74 73 20 74 6f 20 70 72  statements to pr
22ae0 6f 76 65 0a 2a 2a 20 74 68 69 6e 67 73 20 74 68  ove.** things th
22af0 61 74 20 61 72 65 20 61 6c 77 61 79 73 20 74 72  at are always tr
22b00 75 65 20 66 6f 72 20 77 65 6c 6c 2d 66 6f 72 6d  ue for well-form
22b10 65 64 20 64 61 74 61 62 61 73 65 73 2e 0a 2a 2f  ed databases..*/
22b20 0a 23 64 65 66 69 6e 65 20 43 4f 52 52 55 50 54  .#define CORRUPT
22b30 5f 44 42 20 20 28 73 71 6c 69 74 65 33 43 6f 6e  _DB  (sqlite3Con
22b40 66 69 67 2e 6e 65 76 65 72 43 6f 72 72 75 70 74  fig.neverCorrupt
22b50 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74  ==0)../*.** Cont
22b60 65 78 74 20 70 6f 69 6e 74 65 72 20 70 61 73 73  ext pointer pass
22b70 65 64 20 64 6f 77 6e 20 74 68 72 6f 75 67 68 20  ed down through 
22b80 74 68 65 20 74 72 65 65 2d 77 61 6c 6b 2e 0a 2a  the tree-walk..*
22b90 2f 0a 73 74 72 75 63 74 20 57 61 6c 6b 65 72 20  /.struct Walker 
22ba0 7b 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72 73  {.  Parse *pPars
22bb0 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
22bd0 20 50 61 72 73 65 72 20 63 6f 6e 74 65 78 74 2e   Parser context.
22be0 20 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 45 78    */.  int (*xEx
22bf0 70 72 43 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b  prCallback)(Walk
22c00 65 72 2a 2c 20 45 78 70 72 2a 29 3b 20 20 20 20  er*, Expr*);    
22c10 20 2f 2a 20 43 61 6c 6c 62 61 63 6b 20 66 6f 72   /* Callback for
22c20 20 65 78 70 72 65 73 73 69 6f 6e 73 20 2a 2f 0a   expressions */.
22c30 20 20 69 6e 74 20 28 2a 78 53 65 6c 65 63 74 43    int (*xSelectC
22c40 61 6c 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a  allback)(Walker*
22c50 2c 53 65 6c 65 63 74 2a 29 3b 20 20 2f 2a 20 43  ,Select*);  /* C
22c60 61 6c 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45  allback for SELE
22c70 43 54 73 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a  CTs */.  void (*
22c80 78 53 65 6c 65 63 74 43 61 6c 6c 62 61 63 6b 32  xSelectCallback2
22c90 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65 63 74  )(Walker*,Select
22ca0 2a 29 3b 2f 2a 20 53 65 63 6f 6e 64 20 63 61 6c  *);/* Second cal
22cb0 6c 62 61 63 6b 20 66 6f 72 20 53 45 4c 45 43 54  lback for SELECT
22cc0 73 20 2a 2f 0a 20 20 69 6e 74 20 77 61 6c 6b 65  s */.  int walke
22cd0 72 44 65 70 74 68 3b 20 20 20 20 20 20 20 20 20  rDepth;         
22ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22cf0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 75   /* Number of su
22d00 62 71 75 65 72 69 65 73 20 2a 2f 0a 20 20 75 38  bqueries */.  u8
22d10 20 65 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20   eCode;         
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 20 20 20 20 20 20 20 20 2f 2a 20 41 20 73 6d 61          /* A sma
22d40 6c 6c 20 70 72 6f 63 65 73 73 69 6e 67 20 63 6f  ll processing co
22d50 64 65 20 2a 2f 0a 20 20 75 6e 69 6f 6e 20 7b 20  de */.  union { 
22d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d80 20 20 2f 2a 20 45 78 74 72 61 20 64 61 74 61 20    /* Extra data 
22d90 66 6f 72 20 63 61 6c 6c 62 61 63 6b 20 2a 2f 0a  for callback */.
22da0 20 20 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20      NameContext 
22db0 2a 70 4e 43 3b 20 20 20 20 20 20 20 20 20 20 20  *pNC;           
22dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22dd0 2a 20 4e 61 6d 69 6e 67 20 63 6f 6e 74 65 78 74  * Naming context
22de0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6e 3b 20 20   */.    int n;  
22df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e10 20 20 20 2f 2a 20 41 20 63 6f 75 6e 74 65 72 20     /* A counter 
22e20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43 75 72 3b  */.    int iCur;
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e50 20 20 2f 2a 20 41 20 63 75 72 73 6f 72 20 6e 75    /* A cursor nu
22e60 6d 62 65 72 20 2a 2f 0a 20 20 20 20 53 72 63 4c  mber */.    SrcL
22e70 69 73 74 20 2a 70 53 72 63 4c 69 73 74 3b 20 20  ist *pSrcList;  
22e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e90 20 20 20 20 20 20 20 2f 2a 20 46 52 4f 4d 20 63         /* FROM c
22ea0 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 73 74 72  lause */.    str
22eb0 75 63 74 20 53 72 63 43 6f 75 6e 74 20 2a 70 53  uct SrcCount *pS
22ec0 72 63 43 6f 75 6e 74 3b 20 20 20 20 20 20 20 20  rcCount;        
22ed0 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 75 6e 74          /* Count
22ee0 69 6e 67 20 63 6f 6c 75 6d 6e 20 72 65 66 65 72  ing column refer
22ef0 65 6e 63 65 73 20 2a 2f 0a 20 20 20 20 73 74 72  ences */.    str
22f00 75 63 74 20 43 43 75 72 48 69 6e 74 20 2a 70 43  uct CCurHint *pC
22f10 43 75 72 48 69 6e 74 3b 20 20 20 20 20 20 20 20  CurHint;        
22f20 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65 64 20          /* Used 
22f30 62 79 20 63 6f 64 65 43 75 72 73 6f 72 48 69 6e  by codeCursorHin
22f40 74 28 29 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a  t() */.    int *
22f50 61 69 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20  aiCol;          
22f60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f70 20 20 20 20 20 20 2f 2a 20 61 72 72 61 79 20 6f        /* array o
22f80 66 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 65 73  f column indexes
22f90 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20 49   */.    struct I
22fa0 64 78 43 6f 76 65 72 20 2a 70 49 64 78 43 6f 76  dxCover *pIdxCov
22fb0 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  er;             
22fc0 20 20 20 2f 2a 20 43 68 65 63 6b 20 66 6f 72 20     /* Check for 
22fd0 69 6e 64 65 78 20 63 6f 76 65 72 61 67 65 20 2a  index coverage *
22fe0 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f 2a 20  /.  } u;.};../* 
22ff0 46 6f 72 77 61 72 64 20 64 65 63 6c 61 72 61 74  Forward declarat
23000 69 6f 6e 73 20 2a 2f 0a 69 6e 74 20 73 71 6c 69  ions */.int sqli
23010 74 65 33 57 61 6c 6b 45 78 70 72 28 57 61 6c 6b  te3WalkExpr(Walk
23020 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69 6e 74  er*, Expr*);.int
23030 20 73 71 6c 69 74 65 33 57 61 6c 6b 45 78 70 72   sqlite3WalkExpr
23040 4c 69 73 74 28 57 61 6c 6b 65 72 2a 2c 20 45 78  List(Walker*, Ex
23050 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71  prList*);.int sq
23060 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 28  lite3WalkSelect(
23070 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a  Walker*, Select*
23080 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
23090 6c 6b 53 65 6c 65 63 74 45 78 70 72 28 57 61 6c  lkSelectExpr(Wal
230a0 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a  ker*, Select*);.
230b0 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b 53  int sqlite3WalkS
230c0 65 6c 65 63 74 46 72 6f 6d 28 57 61 6c 6b 65 72  electFrom(Walker
230d0 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74  *, Select*);.int
230e0 20 73 71 6c 69 74 65 33 45 78 70 72 57 61 6c 6b   sqlite3ExprWalk
230f0 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Noop(Walker*, Ex
23100 70 72 2a 29 3b 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  pr*);../*.** Ret
23110 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 74 68  urn code from th
23120 65 20 70 61 72 73 65 2d 74 72 65 65 20 77 61 6c  e parse-tree wal
23130 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65 73 20  king primitives 
23140 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63 61 6c  and their.** cal
23150 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65 66 69  lbacks..*/.#defi
23160 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75 65 20  ne WRC_Continue 
23170 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74 69 6e     0   /* Contin
23180 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63 68 69  ue down into chi
23190 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ldren */.#define
231a0 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20 20 20   WRC_Prune      
231b0 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63 68 69   1   /* Omit chi
231c0 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74 69 6e  ldren but contin
231d0 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62 6c 69  ue walking sibli
231e0 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  ngs */.#define W
231f0 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20 20 32  RC_Abort       2
23200 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20 74 68     /* Abandon th
23210 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f 0a 0a  e tree walk */..
23220 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63  /*.** An instanc
23230 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63 74  e of this struct
23240 75 72 65 20 72 65 70 72 65 73 65 6e 74 73 20 61  ure represents a
23250 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72 20 6d   set of one or m
23260 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63 6f 6d  ore CTEs.** (com
23270 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72 65 73  mon table expres
23280 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64 20 62  sions) created b
23290 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54 48 20  y a single WITH 
232a0 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72 75 63  clause..*/.struc
232b0 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74 20 6e  t With {.  int n
232c0 43 74 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  Cte;            
232d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
232e0 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69 6e 20  mber of CTEs in 
232f0 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 20  the WITH clause 
23300 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75 74 65  */.  With *pOute
23310 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  r;              
23320 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 69       /* Containi
23330 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65 2c 20  ng WITH clause, 
23340 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73 74 72  or NULL */.  str
23350 75 63 74 20 43 74 65 20 7b 20 20 20 20 20 20 20  uct Cte {       
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23370 46 6f 72 20 65 61 63 68 20 43 54 45 20 69 6e 20  For each CTE in 
23380 74 68 65 20 57 49 54 48 20 63 6c 61 75 73 65 2e  the WITH clause.
23390 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20  ... */.    char 
233a0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20 20  *zName;         
233b0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
233c0 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45 20 2a  me of this CTE *
233d0 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a  /.    ExprList *
233e0 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  pCols;          
233f0 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66        /* List of
23400 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75 6d 6e   explicit column
23410 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c 4c 20   names, or NULL 
23420 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20 2a 70  */.    Select *p
23430 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20 20 20  Select;         
23440 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 64 65         /* The de
23450 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68 69 73  finition of this
23460 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f 6e 73   CTE */.    cons
23470 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72 72 3b  t char *zCteErr;
23480 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45              /* E
23490 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72  rror message for
234a0 20 63 69 72 63 75 6c 61 72 20 72 65 66 65 72 65   circular refere
234b0 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b 31 5d  nces */.  } a[1]
234c0 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53 51 4c  ;.};..#ifdef SQL
234d0 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a 2a 20  ITE_DEBUG./*.** 
234e0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
234f0 68 65 20 54 72 65 65 56 69 65 77 20 6f 62 6a 65  he TreeView obje
23500 63 74 20 69 73 20 75 73 65 64 20 66 6f 72 20 70  ct is used for p
23510 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f 6e 74  rinting the cont
23520 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61 20 73  ent of.** data s
23530 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73 71 6c  tructures on sql
23540 69 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28  ite3DebugPrintf(
23550 29 20 75 73 69 6e 67 20 61 20 74 72 65 65 2d 6c  ) using a tree-l
23560 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73 74 72  ike view..*/.str
23570 75 63 74 20 54 72 65 65 56 69 65 77 20 7b 0a 20  uct TreeView {. 
23580 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20 20   int iLevel;    
23590 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
235a0 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65 20 74  h level of the t
235b0 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20 2a 2f  ree we are on */
235c0 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31 30 30  .  u8  bLine[100
235d0 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 44 72  ];         /* Dr
235e0 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e 20 63  aw vertical in c
235f0 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69 6e 65  olumn i if bLine
23600 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f 0a 7d  [i] is true */.}
23610 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
23620 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f 2a 0a  TE_DEBUG */../*.
23630 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49 6e 20  ** Assuming zIn 
23640 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20 66 69  points to the fi
23650 72 73 74 20 62 79 74 65 20 6f 66 20 61 20 55 54  rst byte of a UT
23660 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c 0a 2a  F-8 character,.*
23670 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20 74 6f  * advance zIn to
23680 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20 66 69   point to the fi
23690 72 73 74 20 62 79 74 65 20 6f 66 20 74 68 65 20  rst byte of the 
236a0 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61 72 61  next UTF-8 chara
236b0 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  cter..*/.#define
236c0 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55 54 46   SQLITE_SKIP_UTF
236d0 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20 20 20  8(zIn) {        
236e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
236f0 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e 2b 2b  \.  if( (*(zIn++
23700 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20 20 20  ))>=0xc0 ){     
23710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23720 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20 20 77           \.    w
23730 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20 30 78  hile( (*zIn & 0x
23740 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a 49 6e  c0)==0x80 ){ zIn
23750 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20 20 20  ++; }           
23760 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20 20 20    \.  }         
23770 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23790 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d 0a 0a             \.}..
237a0 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45  /*.** The SQLITE
237b0 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73 20 61  _*_BKPT macros a
237c0 72 65 20 73 75 62 73 74 69 74 75 74 65 73 20 66  re substitutes f
237d0 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63 6f 64  or the error cod
237e0 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65 20 73  es with.** the s
237f0 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77 69 74  ame name but wit
23800 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54 20 73  hout the _BKPT s
23810 75 66 66 69 78 2e 20 20 54 68 65 73 65 20 6d 61  uffix.  These ma
23820 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a 20 72  cros invoke.** r
23830 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72 65 70  outines that rep
23840 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e 75 6d  ort the line-num
23850 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ber on which the
23860 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61 74 65   error originate
23870 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c 69 74  d.** using sqlit
23880 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65 20 72  e3_log().  The r
23890 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70 72 6f  outines also pro
238a0 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69 65 6e  vide a convenien
238b0 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20 73 65  t place.** to se
238c0 74 20 61 20 64 65 62 75 67 67 65 72 20 62 72 65  t a debugger bre
238d0 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e 74 20  akpoint..*/.int 
238e0 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 45 72  sqlite3CorruptEr
238f0 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71  ror(int);.int sq
23900 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72  lite3MisuseError
23910 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74  (int);.int sqlit
23920 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f 72 28  e3CantopenError(
23930 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20 53 51  int);.#define SQ
23940 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42 4b 50  LITE_CORRUPT_BKP
23950 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  T sqlite3Corrupt
23960 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
23970 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
23980 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c 69 74  ISUSE_BKPT sqlit
23990 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28 5f 5f  e3MisuseError(__
239a0 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e 65 20  LINE__).#define 
239b0 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 5f  SQLITE_CANTOPEN_
239c0 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61 6e 74  BKPT sqlite3Cant
239d0 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49 4e 45  openError(__LINE
239e0 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c 49 54  __).#ifdef SQLIT
239f0 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20 73 71  E_DEBUG.  int sq
23a00 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72 28  lite3NomemError(
23a10 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
23a20 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
23a30 6f 72 28 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e  or(int);.# defin
23a40 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
23a50 4b 50 54 20 73 71 6c 69 74 65 33 4e 6f 6d 65 6d  KPT sqlite3Nomem
23a60 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a  Error(__LINE__).
23a70 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
23a80 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
23a90 20 73 71 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d   sqlite3Ioerrnom
23aa0 65 6d 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  emError(__LINE__
23ab0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
23ac0 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b   SQLITE_NOMEM_BK
23ad0 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 0a  PT SQLITE_NOMEM.
23ae0 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
23af0 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50 54  IOERR_NOMEM_BKPT
23b00 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e 4f   SQLITE_IOERR_NO
23b10 4d 45 4d 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  MEM.#endif../*.*
23b20 2a 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20  * FTS3 and FTS4 
23b30 62 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72  both require vir
23b40 74 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f  tual table suppo
23b50 72 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65  rt.*/.#if define
23b60 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49  d(SQLITE_OMIT_VI
23b70 52 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e  RTUALTABLE).# un
23b80 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
23b90 45 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53  E_FTS3.# undef S
23ba0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53  QLITE_ENABLE_FTS
23bb0 34 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  4.#endif../*.** 
23bc0 46 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61  FTS4 is really a
23bd0 6e 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20  n extension for 
23be0 46 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61  FTS3.  It is ena
23bf0 62 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a  bled using the.*
23c00 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  * SQLITE_ENABLE_
23c10 46 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74  FTS3 macro.  But
23c20 20 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73   to avoid confus
23c30 69 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c  ion we also call
23c40 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45  .** the SQLITE_E
23c50 4e 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f  NABLE_FTS4 macro
23c60 20 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20   to serve as an 
23c70 61 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45  alias for SQLITE
23c80 5f 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f  _ENABLE_FTS3..*/
23c90 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
23ca0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29  ITE_ENABLE_FTS4)
23cb0 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
23cc0 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29  ITE_ENABLE_FTS3)
23cd0 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
23ce0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23  _ENABLE_FTS3 1.#
23cf0 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
23d00 20 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20   ctype.h header 
23d10 69 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f  is needed for no
23d20 6e 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e  n-ASCII systems.
23d30 20 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20    It is also.** 
23d40 6e 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77  needed by FTS3 w
23d50 68 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c  hen FTS3 is incl
23d60 75 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c  uded in the amal
23d70 67 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66  gamation..*/.#if
23d80 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23d90 5f 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20  _ASCII) || \.   
23da0 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   (defined(SQLITE
23db0 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26  _ENABLE_FTS3) &&
23dc0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
23dd0 41 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23  AMALGAMATION)).#
23de0 20 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e   include <ctype.
23df0 68 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  h>.#endif../*.**
23e00 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d   The following m
23e10 61 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20  acros mimic the 
23e20 73 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79  standard library
23e30 20 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70   functions toupp
23e40 65 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65  er(),.** isspace
23e50 28 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69  (), isalnum(), i
23e60 73 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78  sdigit() and isx
23e70 64 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74  digit(), respect
23e80 69 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71  ively. The.** sq
23e90 6c 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e  lite versions on
23ea0 6c 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49  ly work for ASCI
23eb0 49 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65  I characters, re
23ec0 67 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61  gardless of loca
23ed0 6c 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  le..*/.#ifdef SQ
23ee0 4c 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66  LITE_ASCII.# def
23ef0 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70  ine sqlite3Toupp
23f00 65 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71  er(x)  ((x)&~(sq
23f10 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
23f20 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
23f30 5d 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e  ]&0x20)).# defin
23f40 65 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65  e sqlite3Isspace
23f50 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
23f60 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
23f70 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29   char)(x)]&0x01)
23f80 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
23f90 33 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73  3Isalnum(x)   (s
23fa0 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
23fb0 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
23fc0 29 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e  )]&0x06).# defin
23fd0 65 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61  e sqlite3Isalpha
23fe0 28 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74  (x)   (sqlite3Ct
23ff0 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
24000 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29   char)(x)]&0x02)
24010 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
24020 33 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73  3Isdigit(x)   (s
24030 71 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28  qlite3CtypeMap[(
24040 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24050 29 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e  )]&0x04).# defin
24060 65 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  e sqlite3Isxdigi
24070 74 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74  t(x)  (sqlite3Ct
24080 79 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64  ypeMap[(unsigned
24090 20 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29   char)(x)]&0x08)
240a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
240b0 33 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73  3Tolower(x)   (s
240c0 71 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77  qlite3UpperToLow
240d0 65 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61  er[(unsigned cha
240e0 72 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65  r)(x)]).# define
240f0 20 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28   sqlite3Isquote(
24100 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
24110 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
24120 63 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a  char)(x)]&0x80).
24130 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73  #else.# define s
24140 71 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29  qlite3Toupper(x)
24150 20 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69     toupper((unsi
24160 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23  gned char)(x)).#
24170 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49   define sqlite3I
24180 73 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70  sspace(x)   issp
24190 61 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68  ace((unsigned ch
241a0 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65  ar)(x)).# define
241b0 20 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28   sqlite3Isalnum(
241c0 78 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e  x)   isalnum((un
241d0 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29  signed char)(x))
241e0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
241f0 33 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73  3Isalpha(x)   is
24200 61 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20  alpha((unsigned 
24210 63 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69  char)(x)).# defi
24220 6e 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69  ne sqlite3Isdigi
24230 74 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28  t(x)   isdigit((
24240 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78  unsigned char)(x
24250 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
24260 74 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20  te3Isxdigit(x)  
24270 69 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e  isxdigit((unsign
24280 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64  ed char)(x)).# d
24290 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c  efine sqlite3Tol
242a0 6f 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65  ower(x)   tolowe
242b0 72 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r((unsigned char
242c0 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73  )(x)).# define s
242d0 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29  qlite3Isquote(x)
242e0 20 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78     ((x)=='"'||(x
242f0 29 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b  )=='\''||(x)=='[
24300 27 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e  '||(x)=='`').#en
24310 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  dif.#ifndef SQLI
24320 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
24330 50 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20  PTION_DIAGS.int 
24340 73 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28  sqlite3IsIdChar(
24350 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  u8);.#endif../*.
24360 2a 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63  ** Internal func
24370 74 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a  tion prototypes.
24380 2a 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74  */.int sqlite3St
24390 72 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72  rICmp(const char
243a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
243b0 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65  int sqlite3Strle
243c0 6e 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29  n30(const char*)
243d0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43  ;.char *sqlite3C
243e0 6f 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e  olumnType(Column
243f0 2a 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e  *,char*);.#defin
24400 65 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  e sqlite3StrNICm
24410 70 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63  p sqlite3_strnic
24420 6d 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d  mp..int sqlite3M
24430 61 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b  allocInit(void);
24440 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c  .void sqlite3Mal
24450 6c 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f  locEnd(void);.vo
24460 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  id *sqlite3Mallo
24470 63 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  c(u64);.void *sq
24480 6c 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28  lite3MallocZero(
24490 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
244a0 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
244b0 73 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a  sqlite3*, u64);.
244c0 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d  void *sqlite3DbM
244d0 61 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33  allocRaw(sqlite3
244e0 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73  *, u64);.void *s
244f0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
24500 77 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36  wNN(sqlite3*, u6
24510 34 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  4);.char *sqlite
24520 33 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65  3DbStrDup(sqlite
24530 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
24540 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62  .char *sqlite3Db
24550 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a  StrNDup(sqlite3*
24560 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36  ,const char*, u6
24570 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  4);.void *sqlite
24580 33 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20  3Realloc(void*, 
24590 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69  u64);.void *sqli
245a0 74 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72  te3DbReallocOrFr
245b0 65 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  ee(sqlite3 *, vo
245c0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
245d0 20 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c   *sqlite3DbReall
245e0 6f 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f  oc(sqlite3 *, vo
245f0 69 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64  id *, u64);.void
24600 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73   sqlite3DbFree(s
24610 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b  qlite3*, void*);
24620 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c  .int sqlite3Mall
24630 6f 63 53 69 7a 65 28 76 6f 69 64 2a 29 3b 0a 69  ocSize(void*);.i
24640 6e 74 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c  nt sqlite3DbMall
24650 6f 63 53 69 7a 65 28 73 71 6c 69 74 65 33 2a 2c  ocSize(sqlite3*,
24660 20 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a 73   void*);.void *s
24670 71 6c 69 74 65 33 53 63 72 61 74 63 68 4d 61 6c  qlite3ScratchMal
24680 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73  loc(int);.void s
24690 71 6c 69 74 65 33 53 63 72 61 74 63 68 46 72 65  qlite3ScratchFre
246a0 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20 2a  e(void*);.void *
246b0 73 71 6c 69 74 65 33 50 61 67 65 4d 61 6c 6c 6f  sqlite3PageMallo
246c0 63 28 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  c(int);.void sql
246d0 69 74 65 33 50 61 67 65 46 72 65 65 28 76 6f 69  ite3PageFree(voi
246e0 64 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  d*);.void sqlite
246f0 33 4d 65 6d 53 65 74 44 65 66 61 75 6c 74 28 76  3MemSetDefault(v
24700 6f 69 64 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  oid);.#ifndef SQ
24710 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49  LITE_OMIT_BUILTI
24720 4e 5f 54 45 53 54 0a 76 6f 69 64 20 73 71 6c 69  N_TEST.void sqli
24730 74 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48  te3BenignMallocH
24740 6f 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f  ooks(void (*)(vo
24750 69 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f  id), void (*)(vo
24760 69 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74  id));.#endif.int
24770 20 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72   sqlite3HeapNear
24780 6c 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f  lyFull(void);../
24790 2a 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20  *.** On systems 
247a0 77 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b  with ample stack
247b0 20 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20   space and that 
247c0 73 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29  support alloca()
247d0 2c 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66  , make.** use of
247e0 20 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74   alloca() to obt
247f0 61 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61  ain space for la
24800 72 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62  rge automatic ob
24810 6a 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75  jects.  By defau
24820 6c 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70  lt,.** obtain sp
24830 61 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28  ace from malloc(
24840 29 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c  )..**.** The all
24850 6f 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65  oca() routine ne
24860 76 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c  ver returns NULL
24870 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75  .  This will cau
24880 73 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a  se code paths.**
24890 20 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20   that deal with 
248a0 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f  sqlite3StackAllo
248b0 63 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20  c() failures to 
248c0 62 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a  be unreachable..
248d0 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  */.#ifdef SQLITE
248e0 5f 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65  _USE_ALLOCA.# de
248f0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
24900 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
24910 20 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66   alloca(N).# def
24920 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
24930 41 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20  AllocZero(D,N)  
24940 6d 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29  memset(alloca(N)
24950 2c 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65  , 0, N).# define
24960 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
24970 65 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64  e(D,P).#else.# d
24980 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61  efine sqlite3Sta
24990 63 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20  ckAllocRaw(D,N) 
249a0 20 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f    sqlite3DbMallo
249b0 63 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69  cRaw(D,N).# defi
249c0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
249d0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73  llocZero(D,N)  s
249e0 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65  qlite3DbMallocZe
249f0 72 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65  ro(D,N).# define
24a00 20 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65   sqlite3StackFre
24a10 65 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c  e(D,P)       sql
24a20 69 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a  ite3DbFree(D,P).
24a30 23 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f  #endif../* Do no
24a40 74 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d  t allow both MEM
24a50 53 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33  SYS5 and MEMSYS3
24a60 20 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74   to be defined t
24a70 6f 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65  ogether.  If the
24a80 79 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c  y.** are, disabl
24a90 65 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66  e MEMSYS3.*/.#if
24aa0 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
24ab0 45 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20  E_MEMSYS5.const 
24ac0 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
24ad0 6f 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47  ods *sqlite3MemG
24ae0 65 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b  etMemsys5(void);
24af0 0a 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45  .#undef SQLITE_E
24b00 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65  NABLE_MEMSYS3.#e
24b10 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
24b20 54 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53  TE_ENABLE_MEMSYS
24b30 33 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f  3.const sqlite3_
24b40 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c  mem_methods *sql
24b50 69 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73  ite3MemGetMemsys
24b60 33 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a  3(void);.#endif.
24b70 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
24b80 5f 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71  _MUTEX_OMIT.  sq
24b90 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
24ba0 6f 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74  ods const *sqlit
24bb0 65 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76  e3DefaultMutex(v
24bc0 6f 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f  oid);.  sqlite3_
24bd0 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f  mutex_methods co
24be0 6e 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70  nst *sqlite3Noop
24bf0 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73  Mutex(void);.  s
24c00 71 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71  qlite3_mutex *sq
24c10 6c 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28  lite3MutexAlloc(
24c20 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  int);.  int sqli
24c30 74 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69  te3MutexInit(voi
24c40 64 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  d);.  int sqlite
24c50 33 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b  3MutexEnd(void);
24c60 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
24c70 69 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45  ined(SQLITE_MUTE
24c80 58 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69  X_OMIT) && !defi
24c90 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
24ca0 5f 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71  _NOOP).  void sq
24cb0 6c 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69  lite3MemoryBarri
24cc0 65 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a  er(void);.#else.
24cd0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24ce0 4d 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a  MemoryBarrier().
24cf0 23 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f  #endif..sqlite3_
24d00 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61  int64 sqlite3Sta
24d10 74 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76  tusValue(int);.v
24d20 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
24d30 73 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  sUp(int, int);.v
24d40 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75  oid sqlite3Statu
24d50 73 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b  sDown(int, int);
24d60 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
24d70 74 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74  tusHighwater(int
24d80 2c 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65  , int);../* Acce
24d90 73 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73  ss to mutexes us
24da0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74  ed by sqlite3_st
24db0 61 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65  atus() */.sqlite
24dc0 33 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33  3_mutex *sqlite3
24dd0 50 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69  Pcache1Mutex(voi
24de0 64 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65  d);.sqlite3_mute
24df0 78 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  x *sqlite3Malloc
24e00 4d 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69  Mutex(void);..#i
24e10 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
24e20 54 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54  T_FLOATING_POINT
24e30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73  .  int sqlite3Is
24e40 4e 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c  NaN(double);.#el
24e50 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  se.# define sqli
24e60 74 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23  te3IsNaN(X)  0.#
24e70 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
24e80 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
24e90 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
24ea0 75 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d  ure holds inform
24eb0 61 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a  ation about SQL.
24ec0 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67  ** functions arg
24ed0 75 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20  uments that are 
24ee0 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74  the parameters t
24ef0 6f 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66  o the printf() f
24f00 75 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75  unction..*/.stru
24f10 63 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e  ct PrintfArgumen
24f20 74 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b  ts {.  int nArg;
24f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24f40 2f 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20  /* Total number 
24f50 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a  of arguments */.
24f60 20 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20    int nUsed;    
24f70 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
24f80 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74  mber of argument
24f90 73 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f  s used so far */
24fa0 0a 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  .  sqlite3_value
24fb0 20 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54   **apArg;   /* T
24fc0 68 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75  he argument valu
24fd0 65 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73  es */.};..void s
24fe0 71 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53  qlite3VXPrintf(S
24ff0 74 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20  trAccum*, const 
25000 63 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b  char*, va_list);
25010 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72  .void sqlite3XPr
25020 69 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20  intf(StrAccum*, 
25030 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
25040 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25050 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a  MPrintf(sqlite3*
25060 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e  ,const char*, ..
25070 2e 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  .);.char *sqlite
25080 33 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65  3VMPrintf(sqlite
25090 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20  3*,const char*, 
250a0 76 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65  va_list);.#if de
250b0 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
250c0 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53  UG) || defined(S
250d0 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52  QLITE_HAVE_OS_TR
250e0 41 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  ACE).  void sqli
250f0 74 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63  te3DebugPrintf(c
25100 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
25110 3b 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ;.#endif.#if def
25120 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54  ined(SQLITE_TEST
25130 29 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  ).  void *sqlite
25140 33 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63  3TestTextToPtr(c
25150 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e  onst char*);.#en
25160 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
25170 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20  (SQLITE_DEBUG). 
25180 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65   void sqlite3Tre
25190 65 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69  eViewExpr(TreeVi
251a0 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a  ew*, const Expr*
251b0 2c 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71  , u8);.  void sq
251c0 6c 69 74 65 33 54 72 65 65 56 69 65 77 42 61 72  lite3TreeViewBar
251d0 65 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69  eExprList(TreeVi
251e0 65 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c  ew*, const ExprL
251f0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
25200 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
25210 65 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69  e3TreeViewExprLi
25220 73 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f  st(TreeView*, co
25230 6e 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75  nst ExprList*, u
25240 38 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  8, const char*);
25250 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54  .  void sqlite3T
25260 72 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72  reeViewSelect(Tr
25270 65 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53  eeView*, const S
25280 65 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76  elect*, u8);.  v
25290 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56  oid sqlite3TreeV
252a0 69 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77  iewWith(TreeView
252b0 2a 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20  *, const With*, 
252c0 75 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f  u8);.#endif...vo
252d0 69 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72  id sqlite3SetStr
252e0 69 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c  ing(char **, sql
252f0 69 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61  ite3*, const cha
25300 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
25310 33 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a  3ErrorMsg(Parse*
25320 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e  , const char*, .
25330 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  ..);.void sqlite
25340 33 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b  3Dequote(char*);
25350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b  .void sqlite3Tok
25360 65 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68  enInit(Token*,ch
25370 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ar*);.int sqlite
25380 33 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e  3KeywordCode(con
25390 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72  st unsigned char
253a0 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  *, int);.int sql
253b0 69 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61  ite3RunParser(Pa
253c0 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
253d0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69  *, char **);.voi
253e0 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43  d sqlite3FinishC
253f0 6f 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69  oding(Parse*);.i
25400 6e 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d  nt sqlite3GetTem
25410 70 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f  pReg(Parse*);.vo
25420 69 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73  id sqlite3Releas
25430 65 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c  eTempReg(Parse*,
25440 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
25450 33 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61  3GetTempRange(Pa
25460 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20  rse*,int);.void 
25470 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65  sqlite3ReleaseTe
25480 6d 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69  mpRange(Parse*,i
25490 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  nt,int);.void sq
254a0 6c 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65  lite3ClearTempRe
254b0 67 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a  gCache(Parse*);.
254c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
254d0 42 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e  BUG.int sqlite3N
254e0 6f 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61  oTempsInRange(Pa
254f0 72 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23  rse*,int,int);.#
25500 65 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69  endif.Expr *sqli
25510 74 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c  te3ExprAlloc(sql
25520 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20  ite3*,int,const 
25530 54 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70  Token*,int);.Exp
25540 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73  r *sqlite3Expr(s
25550 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73  qlite3*,int,cons
25560 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73  t char*);.void s
25570 71 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68  qlite3ExprAttach
25580 53 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33  Subtrees(sqlite3
25590 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78  *,Expr*,Expr*,Ex
255a0 70 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  pr*);.Expr *sqli
255b0 74 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c  te3PExpr(Parse*,
255c0 20 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70   int, Expr*, Exp
255d0 72 2a 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a  r*, const Token*
255e0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
255f0 45 78 70 72 41 64 64 53 65 6c 65 63 74 28 50 61  ExprAddSelect(Pa
25600 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65 6c  rse*, Expr*, Sel
25610 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c  ect*);.Expr *sql
25620 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c 69  ite3ExprAnd(sqli
25630 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  te3*,Expr*, Expr
25640 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  *);.Expr *sqlite
25650 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50 61  3ExprFunction(Pa
25660 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20  rse*,ExprList*, 
25670 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
25680 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e 56  lite3ExprAssignV
25690 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a 2c  arNumber(Parse*,
256a0 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71   Expr*);.void sq
256b0 6c 69 74 65 33 45 78 70 72 44 65 6c 65 74 65 28  lite3ExprDelete(
256c0 73 71 6c 69 74 65 33 2a 2c 20 45 78 70 72 2a 29  sqlite3*, Expr*)
256d0 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
256e0 74 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e  te3ExprListAppen
256f0 64 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  d(Parse*,ExprLis
25700 74 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  t*,Expr*);.void 
25710 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53  sqlite3ExprListS
25720 65 74 53 6f 72 74 4f 72 64 65 72 28 45 78 70 72  etSortOrder(Expr
25730 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  List*,int);.void
25740 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
25750 53 65 74 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45  SetName(Parse*,E
25760 78 70 72 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c  xprList*,Token*,
25770 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
25780 65 33 45 78 70 72 4c 69 73 74 53 65 74 53 70 61  e3ExprListSetSpa
25790 6e 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  n(Parse*,ExprLis
257a0 74 2a 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76  t*,ExprSpan*);.v
257b0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 4c  oid sqlite3ExprL
257c0 69 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65  istDelete(sqlite
257d0 33 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  3*, ExprList*);.
257e0 75 33 32 20 73 71 6c 69 74 65 33 45 78 70 72 4c  u32 sqlite3ExprL
257f0 69 73 74 46 6c 61 67 73 28 63 6f 6e 73 74 20 45  istFlags(const E
25800 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73  xprList*);.int s
25810 71 6c 69 74 65 33 49 6e 69 74 28 73 71 6c 69 74  qlite3Init(sqlit
25820 65 33 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e  e3*, char**);.in
25830 74 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c  t sqlite3InitCal
25840 6c 62 61 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74  lback(void*, int
25850 2c 20 63 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a  , char**, char**
25860 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
25870 72 61 67 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b  ragma(Parse*,Tok
25880 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  en*,Token*,Token
25890 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
258a0 69 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65  ite3ResetAllSche
258b0 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28  masOfConnection(
258c0 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64 20  sqlite3*);.void 
258d0 73 71 6c 69 74 65 33 52 65 73 65 74 4f 6e 65 53  sqlite3ResetOneS
258e0 63 68 65 6d 61 28 73 71 6c 69 74 65 33 2a 2c 69  chema(sqlite3*,i
258f0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
25900 33 43 6f 6c 6c 61 70 73 65 44 61 74 61 62 61 73  3CollapseDatabas
25910 65 41 72 72 61 79 28 73 71 6c 69 74 65 33 2a 29  eArray(sqlite3*)
25920 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
25930 6d 6d 69 74 49 6e 74 65 72 6e 61 6c 43 68 61 6e  mmitInternalChan
25940 67 65 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ges(sqlite3*);.v
25950 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74  oid sqlite3Delet
25960 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 73 71 6c  eColumnNames(sql
25970 69 74 65 33 2a 2c 54 61 62 6c 65 2a 29 3b 0a 69  ite3*,Table*);.i
25980 6e 74 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  nt sqlite3Column
25990 73 46 72 6f 6d 45 78 70 72 4c 69 73 74 28 50 61  sFromExprList(Pa
259a0 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  rse*,ExprList*,i
259b0 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a 29 3b 0a 76  16*,Column**);.v
259c0 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
259d0 74 41 64 64 43 6f 6c 75 6d 6e 54 79 70 65 41 6e  tAddColumnTypeAn
259e0 64 43 6f 6c 6c 61 74 69 6f 6e 28 50 61 72 73 65  dCollation(Parse
259f0 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c 65 63 74 2a  *,Table*,Select*
25a00 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65  );.Table *sqlite
25a10 33 52 65 73 75 6c 74 53 65 74 4f 66 53 65 6c 65  3ResultSetOfSele
25a20 63 74 28 50 61 72 73 65 2a 2c 53 65 6c 65 63 74  ct(Parse*,Select
25a30 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
25a40 4f 70 65 6e 4d 61 73 74 65 72 54 61 62 6c 65 28  OpenMasterTable(
25a50 50 61 72 73 65 20 2a 2c 20 69 6e 74 29 3b 0a 49  Parse *, int);.I
25a60 6e 64 65 78 20 2a 73 71 6c 69 74 65 33 50 72 69  ndex *sqlite3Pri
25a70 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 54 61 62  maryKeyIndex(Tab
25a80 6c 65 2a 29 3b 0a 69 31 36 20 73 71 6c 69 74 65  le*);.i16 sqlite
25a90 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64 65 78 28 49  3ColumnOfIndex(I
25aa0 6e 64 65 78 2a 2c 20 69 31 36 29 3b 0a 76 6f 69  ndex*, i16);.voi
25ab0 64 20 73 71 6c 69 74 65 33 53 74 61 72 74 54 61  d sqlite3StartTa
25ac0 62 6c 65 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e  ble(Parse*,Token
25ad0 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74  *,Token*,int,int
25ae0 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 69 66 20 53  ,int,int);.#if S
25af0 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
25b00 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a 20 20 76 6f  DEN_COLUMNS.  vo
25b10 69 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e  id sqlite3Column
25b20 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e 61  PropertiesFromNa
25b30 6d 65 28 54 61 62 6c 65 2a 2c 20 43 6f 6c 75 6d  me(Table*, Colum
25b40 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66  n*);.#else.# def
25b50 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d  ine sqlite3Colum
25b60 6e 50 72 6f 70 65 72 74 69 65 73 46 72 6f 6d 4e  nPropertiesFromN
25b70 61 6d 65 28 54 2c 43 29 20 2f 2a 20 6e 6f 2d 6f  ame(T,C) /* no-o
25b80 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 76 6f 69 64  p */.#endif.void
25b90 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 75 6d   sqlite3AddColum
25ba0 6e 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c  n(Parse*,Token*,
25bb0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
25bc0 6c 69 74 65 33 41 64 64 4e 6f 74 4e 75 6c 6c 28  lite3AddNotNull(
25bd0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
25be0 69 64 20 73 71 6c 69 74 65 33 41 64 64 50 72 69  id sqlite3AddPri
25bf0 6d 61 72 79 4b 65 79 28 50 61 72 73 65 2a 2c 20  maryKey(Parse*, 
25c00 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20  ExprList*, int, 
25c10 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
25c20 73 71 6c 69 74 65 33 41 64 64 43 68 65 63 6b 43  sqlite3AddCheckC
25c30 6f 6e 73 74 72 61 69 6e 74 28 50 61 72 73 65 2a  onstraint(Parse*
25c40 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  , Expr*);.void s
25c50 71 6c 69 74 65 33 41 64 64 44 65 66 61 75 6c 74  qlite3AddDefault
25c60 56 61 6c 75 65 28 50 61 72 73 65 2a 2c 45 78 70  Value(Parse*,Exp
25c70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  rSpan*);.void sq
25c80 6c 69 74 65 33 41 64 64 43 6f 6c 6c 61 74 65 54  lite3AddCollateT
25c90 79 70 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65  ype(Parse*, Toke
25ca0 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  n*);.void sqlite
25cb0 33 45 6e 64 54 61 62 6c 65 28 50 61 72 73 65 2a  3EndTable(Parse*
25cc0 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 75  ,Token*,Token*,u
25cd0 38 2c 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  8,Select*);.int 
25ce0 73 71 6c 69 74 65 33 50 61 72 73 65 55 72 69 28  sqlite3ParseUri(
25cf0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
25d00 74 20 63 68 61 72 2a 2c 75 6e 73 69 67 6e 65 64  t char*,unsigned
25d10 20 69 6e 74 2a 2c 0a 20 20 20 20 20 20 20 20 20   int*,.         
25d20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
25d30 65 33 5f 76 66 73 2a 2a 2c 63 68 61 72 2a 2a 2c  e3_vfs**,char**,
25d40 63 68 61 72 20 2a 2a 29 3b 0a 42 74 72 65 65 20  char **);.Btree 
25d50 2a 73 71 6c 69 74 65 33 44 62 4e 61 6d 65 54 6f  *sqlite3DbNameTo
25d60 42 74 72 65 65 28 73 71 6c 69 74 65 33 2a 2c 63  Btree(sqlite3*,c
25d70 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74  onst char*);.int
25d80 20 73 71 6c 69 74 65 33 43 6f 64 65 4f 6e 63 65   sqlite3CodeOnce
25d90 28 50 61 72 73 65 20 2a 29 3b 0a 0a 23 69 66 64  (Parse *);..#ifd
25da0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
25db0 55 49 4c 54 49 4e 5f 54 45 53 54 0a 23 20 64 65  UILTIN_TEST.# de
25dc0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c  fine sqlite3Faul
25dd0 74 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f  tSim(X) SQLITE_O
25de0 4b 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71  K.#else.  int sq
25df0 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e  lite3FaultSim(in
25e00 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76  t);.#endif..Bitv
25e10 65 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65  ec *sqlite3Bitve
25e20 63 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e  cCreate(u32);.in
25e30 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54  t sqlite3BitvecT
25e40 65 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  est(Bitvec*, u32
25e50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69  );.int sqlite3Bi
25e60 74 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28  tvecTestNotNull(
25e70 42 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69  Bitvec*, u32);.i
25e80 6e 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63  nt sqlite3Bitvec
25e90 53 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32  Set(Bitvec*, u32
25ea0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  );.void sqlite3B
25eb0 69 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65  itvecClear(Bitve
25ec0 63 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b  c*, u32, void*);
25ed0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74  .void sqlite3Bit
25ee0 76 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65  vecDestroy(Bitve
25ef0 63 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33  c*);.u32 sqlite3
25f00 42 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65  BitvecSize(Bitve
25f10 63 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  c*);.#ifndef SQL
25f20 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c 54 49 4e  ITE_OMIT_BUILTIN
25f30 5f 54 45 53 54 0a 69 6e 74 20 73 71 6c 69 74 65  _TEST.int sqlite
25f40 33 42 69 74 76 65 63 42 75 69 6c 74 69 6e 54 65  3BitvecBuiltinTe
25f50 73 74 28 69 6e 74 2c 69 6e 74 2a 29 3b 0a 23 65  st(int,int*);.#e
25f60 6e 64 69 66 0a 0a 52 6f 77 53 65 74 20 2a 73 71  ndif..RowSet *sq
25f70 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 69 74 28  lite3RowSetInit(
25f80 73 71 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 2c  sqlite3*, void*,
25f90 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 29 3b 0a   unsigned int);.
25fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f 77 53  void sqlite3RowS
25fb0 65 74 43 6c 65 61 72 28 52 6f 77 53 65 74 2a 29  etClear(RowSet*)
25fc0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 6f  ;.void sqlite3Ro
25fd0 77 53 65 74 49 6e 73 65 72 74 28 52 6f 77 53 65  wSetInsert(RowSe
25fe0 74 2a 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73 71  t*, i64);.int sq
25ff0 6c 69 74 65 33 52 6f 77 53 65 74 54 65 73 74 28  lite3RowSetTest(
26000 52 6f 77 53 65 74 2a 2c 20 69 6e 74 20 69 42 61  RowSet*, int iBa
26010 74 63 68 2c 20 69 36 34 29 3b 0a 69 6e 74 20 73  tch, i64);.int s
26020 71 6c 69 74 65 33 52 6f 77 53 65 74 4e 65 78 74  qlite3RowSetNext
26030 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 2a 29 3b  (RowSet*, i64*);
26040 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72  ..void sqlite3Cr
26050 65 61 74 65 56 69 65 77 28 50 61 72 73 65 2a 2c  eateView(Parse*,
26060 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Token*,Token*,To
26070 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53  ken*,ExprList*,S
26080 65 6c 65 63 74 2a 2c 69 6e 74 2c 69 6e 74 29 3b  elect*,int,int);
26090 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ..#if !defined(S
260a0 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45 57 29  QLITE_OMIT_VIEW)
260b0 20 7c 7c 20 21 64 65 66 69 6e 65 64 28 53 51 4c   || !defined(SQL
260c0 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
260d0 54 41 42 4c 45 29 0a 20 20 69 6e 74 20 73 71 6c  TABLE).  int sql
260e0 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75 6d  ite3ViewGetColum
260f0 6e 4e 61 6d 65 73 28 50 61 72 73 65 2a 2c 54 61  nNames(Parse*,Ta
26100 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  ble*);.#else.# d
26110 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 69 65  efine sqlite3Vie
26120 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
26130 41 2c 42 29 20 30 0a 23 65 6e 64 69 66 0a 0a 23  A,B) 0.#endif..#
26140 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  if SQLITE_MAX_AT
26150 54 41 43 48 45 44 3e 33 30 0a 20 20 69 6e 74 20  TACHED>30.  int 
26160 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
26170 5a 65 72 6f 28 79 44 62 4d 61 73 6b 29 3b 0a 23  Zero(yDbMask);.#
26180 65 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74  endif.void sqlit
26190 65 33 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73  e3DropTable(Pars
261a0 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e  e*, SrcList*, in
261b0 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
261c0 6c 69 74 65 33 43 6f 64 65 44 72 6f 70 54 61 62  lite3CodeDropTab
261d0 6c 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  le(Parse*, Table
261e0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
261f0 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65  id sqlite3Delete
26200 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 20  Table(sqlite3*, 
26210 54 61 62 6c 65 2a 29 3b 0a 23 69 66 6e 64 65 66  Table*);.#ifndef
26220 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
26230 4f 49 4e 43 52 45 4d 45 4e 54 0a 20 20 76 6f 69  OINCREMENT.  voi
26240 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  d sqlite3Autoinc
26250 72 65 6d 65 6e 74 42 65 67 69 6e 28 50 61 72 73  rementBegin(Pars
26260 65 20 2a 70 50 61 72 73 65 29 3b 0a 20 20 76 6f  e *pParse);.  vo
26270 69 64 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e  id sqlite3Autoin
26280 63 72 65 6d 65 6e 74 45 6e 64 28 50 61 72 73 65  crementEnd(Parse
26290 20 2a 70 50 61 72 73 65 29 3b 0a 23 65 6c 73 65   *pParse);.#else
262a0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
262b0 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
262c0 67 69 6e 28 58 29 0a 23 20 64 65 66 69 6e 65 20  gin(X).# define 
262d0 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63 72 65  sqlite3Autoincre
262e0 6d 65 6e 74 45 6e 64 28 58 29 0a 23 65 6e 64 69  mentEnd(X).#endi
262f0 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 49 6e  f.void sqlite3In
26300 73 65 72 74 28 50 61 72 73 65 2a 2c 20 53 72 63  sert(Parse*, Src
26310 4c 69 73 74 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  List*, Select*, 
26320 49 64 4c 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76  IdList*, int);.v
26330 6f 69 64 20 2a 73 71 6c 69 74 65 33 41 72 72 61  oid *sqlite3Arra
26340 79 41 6c 6c 6f 63 61 74 65 28 73 71 6c 69 74 65  yAllocate(sqlite
26350 33 2a 2c 76 6f 69 64 2a 2c 69 6e 74 2c 69 6e 74  3*,void*,int,int
26360 2a 2c 69 6e 74 2a 29 3b 0a 49 64 4c 69 73 74 20  *,int*);.IdList 
26370 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74 41 70  *sqlite3IdListAp
26380 70 65 6e 64 28 73 71 6c 69 74 65 33 2a 2c 20 49  pend(sqlite3*, I
26390 64 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 29 3b  dList*, Token*);
263a0 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 64 4c 69  .int sqlite3IdLi
263b0 73 74 49 6e 64 65 78 28 49 64 4c 69 73 74 2a 2c  stIndex(IdList*,
263c0 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 53 72  const char*);.Sr
263d0 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72  cList *sqlite3Sr
263e0 63 4c 69 73 74 45 6e 6c 61 72 67 65 28 73 71 6c  cListEnlarge(sql
263f0 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c  ite3*, SrcList*,
26400 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 53 72 63 4c   int, int);.SrcL
26410 69 73 74 20 2a 73 71 6c 69 74 65 33 53 72 63 4c  ist *sqlite3SrcL
26420 69 73 74 41 70 70 65 6e 64 28 73 71 6c 69 74 65  istAppend(sqlite
26430 33 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f  3*, SrcList*, To
26440 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 53  ken*, Token*);.S
26450 72 63 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 53  rcList *sqlite3S
26460 72 63 4c 69 73 74 41 70 70 65 6e 64 46 72 6f 6d  rcListAppendFrom
26470 54 65 72 6d 28 50 61 72 73 65 2a 2c 20 53 72 63  Term(Parse*, Src
26480 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  List*, Token*, T
26490 6f 6b 65 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20  oken*,.         
264a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
264b0 20 20 20 20 20 20 20 20 20 20 20 20 20 54 6f 6b               Tok
264c0 65 6e 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 45 78  en*, Select*, Ex
264d0 70 72 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76  pr*, IdList*);.v
264e0 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69  oid sqlite3SrcLi
264f0 73 74 49 6e 64 65 78 65 64 42 79 28 50 61 72 73  stIndexedBy(Pars
26500 65 20 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20  e *, SrcList *, 
26510 54 6f 6b 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73  Token *);.void s
26520 71 6c 69 74 65 33 53 72 63 4c 69 73 74 46 75 6e  qlite3SrcListFun
26530 63 41 72 67 73 28 50 61 72 73 65 2a 2c 20 53 72  cArgs(Parse*, Sr
26540 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c 69 73 74  cList*, ExprList
26550 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
26560 6e 64 65 78 65 64 42 79 4c 6f 6f 6b 75 70 28 50  ndexedByLookup(P
26570 61 72 73 65 20 2a 2c 20 73 74 72 75 63 74 20 53  arse *, struct S
26580 72 63 4c 69 73 74 5f 69 74 65 6d 20 2a 29 3b 0a  rcList_item *);.
26590 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72 63 4c  void sqlite3SrcL
265a0 69 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65  istShiftJoinType
265b0 28 53 72 63 4c 69 73 74 2a 29 3b 0a 76 6f 69 64  (SrcList*);.void
265c0 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41   sqlite3SrcListA
265d0 73 73 69 67 6e 43 75 72 73 6f 72 73 28 50 61 72  ssignCursors(Par
265e0 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a  se*, SrcList*);.
265f0 76 6f 69 64 20 73 71 6c 69 74 65 33 49 64 4c 69  void sqlite3IdLi
26600 73 74 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33  stDelete(sqlite3
26610 2a 2c 20 49 64 4c 69 73 74 2a 29 3b 0a 76 6f 69  *, IdList*);.voi
26620 64 20 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74  d sqlite3SrcList
26630 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
26640 20 53 72 63 4c 69 73 74 2a 29 3b 0a 49 6e 64 65   SrcList*);.Inde
26650 78 20 2a 73 71 6c 69 74 65 33 41 6c 6c 6f 63 61  x *sqlite3Alloca
26660 74 65 49 6e 64 65 78 4f 62 6a 65 63 74 28 73 71  teIndexObject(sq
26670 6c 69 74 65 33 2a 2c 69 31 36 2c 69 6e 74 2c 63  lite3*,i16,int,c
26680 68 61 72 2a 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har**);.void sql
26690 69 74 65 33 43 72 65 61 74 65 49 6e 64 65 78 28  ite3CreateIndex(
266a0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f  Parse*,Token*,To
266b0 6b 65 6e 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ken*,SrcList*,Ex
266c0 70 72 4c 69 73 74 2a 2c 69 6e 74 2c 54 6f 6b 65  prList*,int,Toke
266d0 6e 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  n*,.            
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 45 78                Ex
266f0 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75  pr*, int, int, u
26700 38 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  8);.void sqlite3
26710 44 72 6f 70 49 6e 64 65 78 28 50 61 72 73 65 2a  DropIndex(Parse*
26720 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69 6e 74 29  , SrcList*, int)
26730 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 65 6c  ;.int sqlite3Sel
26740 65 63 74 28 50 61 72 73 65 2a 2c 20 53 65 6c 65  ect(Parse*, Sele
26750 63 74 2a 2c 20 53 65 6c 65 63 74 44 65 73 74 2a  ct*, SelectDest*
26760 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69 74  );.Select *sqlit
26770 65 33 53 65 6c 65 63 74 4e 65 77 28 50 61 72 73  e3SelectNew(Pars
26780 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 53 72 63  e*,ExprList*,Src
26790 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78 70 72  List*,Expr*,Expr
267a0 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20  List*,.         
267b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
267c0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
267d0 75 33 32 2c 45 78 70 72 2a 2c 45 78 70 72 2a 29  u32,Expr*,Expr*)
267e0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
267f0 6c 65 63 74 44 65 6c 65 74 65 28 73 71 6c 69 74  lectDelete(sqlit
26800 65 33 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 54  e3*, Select*);.T
26810 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 53 72 63  able *sqlite3Src
26820 4c 69 73 74 4c 6f 6f 6b 75 70 28 50 61 72 73 65  ListLookup(Parse
26830 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b 0a 69 6e  *, SrcList*);.in
26840 74 20 73 71 6c 69 74 65 33 49 73 52 65 61 64 4f  t sqlite3IsReadO
26850 6e 6c 79 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  nly(Parse*, Tabl
26860 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e*, int);.void s
26870 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28  qlite3OpenTable(
26880 50 61 72 73 65 2a 2c 20 69 6e 74 20 69 43 75 72  Parse*, int iCur
26890 2c 20 69 6e 74 20 69 44 62 2c 20 54 61 62 6c 65  , int iDb, Table
268a0 2a 2c 20 69 6e 74 29 3b 0a 23 69 66 20 64 65 66  *, int);.#if def
268b0 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
268c0 4c 45 5f 55 50 44 41 54 45 5f 44 45 4c 45 54 45  LE_UPDATE_DELETE
268d0 5f 4c 49 4d 49 54 29 20 26 26 20 21 64 65 66 69  _LIMIT) && !defi
268e0 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
268f0 53 55 42 51 55 45 52 59 29 0a 45 78 70 72 20 2a  SUBQUERY).Expr *
26900 73 71 6c 69 74 65 33 4c 69 6d 69 74 57 68 65 72  sqlite3LimitWher
26910 65 28 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74  e(Parse*,SrcList
26920 2a 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  *,Expr*,ExprList
26930 2a 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 63 68  *,Expr*,Expr*,ch
26940 61 72 2a 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69  ar*);.#endif.voi
26950 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 46  d sqlite3DeleteF
26960 72 6f 6d 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  rom(Parse*, SrcL
26970 69 73 74 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  ist*, Expr*);.vo
26980 69 64 20 73 71 6c 69 74 65 33 55 70 64 61 74 65  id sqlite3Update
26990 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74  (Parse*, SrcList
269a0 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  *, ExprList*, Ex
269b0 70 72 2a 2c 20 69 6e 74 29 3b 0a 57 68 65 72 65  pr*, int);.Where
269c0 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 57 68 65  Info *sqlite3Whe
269d0 72 65 42 65 67 69 6e 28 50 61 72 73 65 2a 2c 53  reBegin(Parse*,S
269e0 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c 45 78  rcList*,Expr*,Ex
269f0 70 72 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74  prList*,ExprList
26a00 2a 2c 75 31 36 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,u16,int);.void
26a10 20 73 71 6c 69 74 65 33 57 68 65 72 65 45 6e 64   sqlite3WhereEnd
26a20 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 4c 6f  (WhereInfo*);.Lo
26a30 67 45 73 74 20 73 71 6c 69 74 65 33 57 68 65 72  gEst sqlite3Wher
26a40 65 4f 75 74 70 75 74 52 6f 77 43 6f 75 6e 74 28  eOutputRowCount(
26a50 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
26a60 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 44   sqlite3WhereIsD
26a70 69 73 74 69 6e 63 74 28 57 68 65 72 65 49 6e 66  istinct(WhereInf
26a80 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
26a90 57 68 65 72 65 49 73 4f 72 64 65 72 65 64 28 57  WhereIsOrdered(W
26aa0 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20  hereInfo*);.int 
26ab0 73 71 6c 69 74 65 33 57 68 65 72 65 4f 72 64 65  sqlite3WhereOrde
26ac0 72 65 64 49 6e 6e 65 72 4c 6f 6f 70 28 57 68 65  redInnerLoop(Whe
26ad0 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71  reInfo*);.int sq
26ae0 6c 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74  lite3WhereIsSort
26af0 65 64 28 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a  ed(WhereInfo*);.
26b00 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65 72 65  int sqlite3Where
26b10 43 6f 6e 74 69 6e 75 65 4c 61 62 65 6c 28 57 68  ContinueLabel(Wh
26b20 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
26b30 71 6c 69 74 65 33 57 68 65 72 65 42 72 65 61 6b  qlite3WhereBreak
26b40 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
26b50 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
26b60 65 72 65 4f 6b 4f 6e 65 50 61 73 73 28 57 68 65  ereOkOnePass(Whe
26b70 72 65 49 6e 66 6f 2a 2c 20 69 6e 74 2a 29 3b 0a  reInfo*, int*);.
26b80 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53 5f  #define ONEPASS_
26b90 4f 46 46 20 20 20 20 20 20 30 20 20 20 20 20 20  OFF      0      
26ba0 20 20 2f 2a 20 55 73 65 20 6f 66 20 4f 4e 45 50    /* Use of ONEP
26bb0 41 53 53 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20  ASS not allowed 
26bc0 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41  */.#define ONEPA
26bd0 53 53 5f 53 49 4e 47 4c 45 20 20 20 31 20 20 20  SS_SINGLE   1   
26be0 20 20 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20       /* ONEPASS 
26bf0 76 61 6c 69 64 20 66 6f 72 20 61 20 73 69 6e 67  valid for a sing
26c00 6c 65 20 72 6f 77 20 75 70 64 61 74 65 20 2a 2f  le row update */
26c10 0a 23 64 65 66 69 6e 65 20 4f 4e 45 50 41 53 53  .#define ONEPASS
26c20 5f 4d 55 4c 54 49 20 20 20 20 32 20 20 20 20 20  _MULTI    2     
26c30 20 20 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69 73     /* ONEPASS is
26c40 20 76 61 6c 69 64 20 66 6f 72 20 6d 75 6c 74 69   valid for multi
26c50 70 6c 65 20 72 6f 77 73 20 2a 2f 0a 76 6f 69 64  ple rows */.void
26c60 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
26c70 4c 6f 61 64 49 6e 64 65 78 43 6f 6c 75 6d 6e 28  LoadIndexColumn(
26c80 50 61 72 73 65 2a 2c 20 49 6e 64 65 78 2a 2c 20  Parse*, Index*, 
26c90 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
26ca0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43  int sqlite3ExprC
26cb0 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 28 50 61 72  odeGetColumn(Par
26cc0 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74  se*, Table*, int
26cd0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38 29 3b  , int, int, u8);
26ce0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26cf0 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 54 6f  rCodeGetColumnTo
26d00 52 65 67 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  Reg(Parse*, Tabl
26d10 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
26d20 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
26d30 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d  ExprCodeGetColum
26d40 6e 4f 66 54 61 62 6c 65 28 56 64 62 65 2a 2c 20  nOfTable(Vdbe*, 
26d50 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Table*, int, int
26d60 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26d70 69 74 65 33 45 78 70 72 43 6f 64 65 4d 6f 76 65  ite3ExprCodeMove
26d80 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
26d90 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t, int);.void sq
26da0 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 53 74  lite3ExprCacheSt
26db0 6f 72 65 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c  ore(Parse*, int,
26dc0 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
26dd0 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
26de0 65 50 75 73 68 28 50 61 72 73 65 2a 29 3b 0a 76  ePush(Parse*);.v
26df0 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 43  oid sqlite3ExprC
26e00 61 63 68 65 50 6f 70 28 50 61 72 73 65 2a 29 3b  achePop(Parse*);
26e10 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
26e20 72 43 61 63 68 65 52 65 6d 6f 76 65 28 50 61 72  rCacheRemove(Par
26e30 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  se*, int, int);.
26e40 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
26e50 43 61 63 68 65 43 6c 65 61 72 28 50 61 72 73 65  CacheClear(Parse
26e60 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26e70 45 78 70 72 43 61 63 68 65 41 66 66 69 6e 69 74  ExprCacheAffinit
26e80 79 43 68 61 6e 67 65 28 50 61 72 73 65 2a 2c 20  yChange(Parse*, 
26e90 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
26ea0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 28  sqlite3ExprCode(
26eb0 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Parse*, Expr*, i
26ec0 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
26ed0 33 45 78 70 72 43 6f 64 65 43 6f 70 79 28 50 61  3ExprCodeCopy(Pa
26ee0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
26ef0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26f00 78 70 72 43 6f 64 65 46 61 63 74 6f 72 61 62 6c  xprCodeFactorabl
26f10 65 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  e(Parse*, Expr*,
26f20 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69   int);.void sqli
26f30 74 65 33 45 78 70 72 43 6f 64 65 41 74 49 6e 69  te3ExprCodeAtIni
26f40 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  t(Parse*, Expr*,
26f50 20 69 6e 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73   int, u8);.int s
26f60 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54 65  qlite3ExprCodeTe
26f70 6d 70 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  mp(Parse*, Expr*
26f80 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  , int*);.int sql
26f90 69 74 65 33 45 78 70 72 43 6f 64 65 54 61 72 67  ite3ExprCodeTarg
26fa0 65 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  et(Parse*, Expr*
26fb0 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
26fc0 69 74 65 33 45 78 70 72 43 6f 64 65 41 6e 64 43  ite3ExprCodeAndC
26fd0 61 63 68 65 28 50 61 72 73 65 2a 2c 20 45 78 70  ache(Parse*, Exp
26fe0 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  r*, int);.int sq
26ff0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 45 78 70  lite3ExprCodeExp
27000 72 4c 69 73 74 28 50 61 72 73 65 2a 2c 20 45 78  rList(Parse*, Ex
27010 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  prList*, int, in
27020 74 2c 20 75 38 29 3b 0a 23 64 65 66 69 6e 65 20  t, u8);.#define 
27030 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44 55 50 20  SQLITE_ECEL_DUP 
27040 20 20 20 20 20 30 78 30 31 20 20 2f 2a 20 44 65       0x01  /* De
27050 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c 6f 77 20  ep, not shallow 
27060 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65 66 69 6e  copies */.#defin
27070 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 46 41  e SQLITE_ECEL_FA
27080 43 54 4f 52 20 20 20 30 78 30 32 20 20 2f 2a 20  CTOR   0x02  /* 
27090 46 61 63 74 6f 72 20 6f 75 74 20 63 6f 6e 73 74  Factor out const
270a0 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a 23 64 65  ant terms */.#de
270b0 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
270c0 5f 52 45 46 20 20 20 20 20 20 30 78 30 34 20 20  _REF      0x04  
270d0 2f 2a 20 55 73 65 20 45 78 70 72 4c 69 73 74 2e  /* Use ExprList.
270e0 75 2e 78 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20  u.x.iOrderByCol 
270f0 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  */.void sqlite3E
27100 78 70 72 49 66 54 72 75 65 28 50 61 72 73 65 2a  xprIfTrue(Parse*
27110 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e  , Expr*, int, in
27120 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27130 45 78 70 72 49 66 46 61 6c 73 65 28 50 61 72 73  ExprIfFalse(Pars
27140 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20  e*, Expr*, int, 
27150 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27160 65 33 45 78 70 72 49 66 46 61 6c 73 65 44 75 70  e3ExprIfFalseDup
27170 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20  (Parse*, Expr*, 
27180 69 6e 74 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65  int, int);.Table
27190 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62   *sqlite3FindTab
271a0 6c 65 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73  le(sqlite3*,cons
271b0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
271c0 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c  har*);.#define L
271d0 4f 43 41 54 45 5f 56 49 45 57 20 20 20 20 30 78  OCATE_VIEW    0x
271e0 30 31 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41 54  01.#define LOCAT
271f0 45 5f 4e 4f 45 52 52 20 20 20 30 78 30 32 0a 54  E_NOERR   0x02.T
27200 61 62 6c 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63  able *sqlite3Loc
27210 61 74 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ateTable(Parse*,
27220 75 33 32 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20  u32 flags,const 
27230 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
27240 72 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69  r*);.Table *sqli
27250 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 49 74  te3LocateTableIt
27260 65 6d 28 50 61 72 73 65 2a 2c 75 33 32 20 66 6c  em(Parse*,u32 fl
27270 61 67 73 2c 73 74 72 75 63 74 20 53 72 63 4c 69  ags,struct SrcLi
27280 73 74 5f 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65  st_item *);.Inde
27290 78 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 49 6e  x *sqlite3FindIn
272a0 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e  dex(sqlite3*,con
272b0 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20  st char*, const 
272c0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
272d0 69 74 65 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c  ite3UnlinkAndDel
272e0 65 74 65 54 61 62 6c 65 28 73 71 6c 69 74 65 33  eteTable(sqlite3
272f0 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72  *,int,const char
27300 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
27310 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49  UnlinkAndDeleteI
27320 6e 64 65 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e  ndex(sqlite3*,in
27330 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  t,const char*);.
27340 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 63 75  void sqlite3Vacu
27350 75 6d 28 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20  um(Parse*);.int 
27360 73 71 6c 69 74 65 33 52 75 6e 56 61 63 75 75 6d  sqlite3RunVacuum
27370 28 63 68 61 72 2a 2a 2c 20 73 71 6c 69 74 65 33  (char**, sqlite3
27380 2a 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  *);.char *sqlite
27390 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 73  3NameFromToken(s
273a0 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65 6e 2a 29  qlite3*, Token*)
273b0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
273c0 72 43 6f 6d 70 61 72 65 28 45 78 70 72 2a 2c 20  rCompare(Expr*, 
273d0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
273e0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
273f0 43 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74  Compare(ExprList
27400 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e  *, ExprList*, in
27410 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  t);.int sqlite3E
27420 78 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 45  xprImpliesExpr(E
27430 78 70 72 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  xpr*, Expr*, int
27440 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27450 78 70 72 41 6e 61 6c 79 7a 65 41 67 67 72 65 67  xprAnalyzeAggreg
27460 61 74 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ates(NameContext
27470 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20  *, Expr*);.void 
27480 73 71 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79  sqlite3ExprAnaly
27490 7a 65 41 67 67 4c 69 73 74 28 4e 61 6d 65 43 6f  zeAggList(NameCo
274a0 6e 74 65 78 74 2a 2c 45 78 70 72 4c 69 73 74 2a  ntext*,ExprList*
274b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
274c0 70 72 43 6f 76 65 72 65 64 42 79 49 6e 64 65 78  prCoveredByIndex
274d0 28 45 78 70 72 2a 2c 20 69 6e 74 20 69 43 75 72  (Expr*, int iCur
274e0 2c 20 49 6e 64 65 78 20 2a 70 49 64 78 29 3b 0a  , Index *pIdx);.
274f0 69 6e 74 20 73 71 6c 69 74 65 33 46 75 6e 63 74  int sqlite3Funct
27500 69 6f 6e 55 73 65 73 54 68 69 73 53 72 63 28 45  ionUsesThisSrc(E
27510 78 70 72 2a 2c 20 53 72 63 4c 69 73 74 2a 29 3b  xpr*, SrcList*);
27520 0a 56 64 62 65 20 2a 73 71 6c 69 74 65 33 47 65  .Vdbe *sqlite3Ge
27530 74 56 64 62 65 28 50 61 72 73 65 2a 29 3b 0a 23  tVdbe(Parse*);.#
27540 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
27550 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53 54 0a  IT_BUILTIN_TEST.
27560 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
27570 53 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b  SaveState(void);
27580 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e  .void sqlite3Prn
27590 67 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f  gRestoreState(vo
275a0 69 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  id);.#endif.void
275b0 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
275c0 41 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  All(sqlite3*,int
275d0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
275e0 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
275f0 50 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f  Parse*, int);.vo
27600 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65  id sqlite3CodeVe
27610 72 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28  rifyNamedSchema(
27620 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
27630 61 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73  ar *zDb);.void s
27640 71 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73  qlite3BeginTrans
27650 61 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69  action(Parse*, i
27660 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27670 33 43 6f 6d 6d 69 74 54 72 61 6e 73 61 63 74 69  3CommitTransacti
27680 6f 6e 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  on(Parse*);.void
27690 20 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b   sqlite3Rollback
276a0 54 72 61 6e 73 61 63 74 69 6f 6e 28 50 61 72 73  Transaction(Pars
276b0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
276c0 33 53 61 76 65 70 6f 69 6e 74 28 50 61 72 73 65  3Savepoint(Parse
276d0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2a 29 3b  *, int, Token*);
276e0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f  .void sqlite3Clo
276f0 73 65 53 61 76 65 70 6f 69 6e 74 73 28 73 71 6c  seSavepoints(sql
27700 69 74 65 33 20 2a 29 3b 0a 76 6f 69 64 20 73 71  ite3 *);.void sq
27710 6c 69 74 65 33 4c 65 61 76 65 4d 75 74 65 78 41  lite3LeaveMutexA
27720 6e 64 43 6c 6f 73 65 5a 6f 6d 62 69 65 28 73 71  ndCloseZombie(sq
27730 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71 6c  lite3*);.int sql
27740 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73 74 61  ite3ExprIsConsta
27750 6e 74 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  nt(Expr*);.int s
27760 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
27770 74 61 6e 74 4e 6f 74 4a 6f 69 6e 28 45 78 70 72  tantNotJoin(Expr
27780 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  *);.int sqlite3E
27790 78 70 72 49 73 43 6f 6e 73 74 61 6e 74 4f 72 46  xprIsConstantOrF
277a0 75 6e 63 74 69 6f 6e 28 45 78 70 72 2a 2c 20 75  unction(Expr*, u
277b0 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45  8);.int sqlite3E
277c0 78 70 72 49 73 54 61 62 6c 65 43 6f 6e 73 74 61  xprIsTableConsta
277d0 6e 74 28 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 23  nt(Expr*,int);.#
277e0 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
277f0 42 4c 45 5f 43 55 52 53 4f 52 5f 48 49 4e 54 53  BLE_CURSOR_HINTS
27800 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
27810 43 6f 6e 74 61 69 6e 73 53 75 62 71 75 65 72 79  ContainsSubquery
27820 28 45 78 70 72 2a 29 3b 0a 23 65 6e 64 69 66 0a  (Expr*);.#endif.
27830 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
27840 73 49 6e 74 65 67 65 72 28 45 78 70 72 2a 2c 20  sInteger(Expr*, 
27850 69 6e 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  int*);.int sqlit
27860 65 33 45 78 70 72 43 61 6e 42 65 4e 75 6c 6c 28  e3ExprCanBeNull(
27870 63 6f 6e 73 74 20 45 78 70 72 2a 29 3b 0a 69 6e  const Expr*);.in
27880 74 20 73 71 6c 69 74 65 33 45 78 70 72 4e 65 65  t sqlite3ExprNee
27890 64 73 4e 6f 41 66 66 69 6e 69 74 79 43 68 61 6e  dsNoAffinityChan
278a0 67 65 28 63 6f 6e 73 74 20 45 78 70 72 2a 2c 20  ge(const Expr*, 
278b0 63 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74  char);.int sqlit
278c0 65 33 49 73 52 6f 77 69 64 28 63 6f 6e 73 74 20  e3IsRowid(const 
278d0 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
278e0 69 74 65 33 47 65 6e 65 72 61 74 65 52 6f 77 44  ite3GenerateRowD
278f0 65 6c 65 74 65 28 0a 20 20 20 20 50 61 72 73 65  elete(.    Parse
27900 2a 2c 54 61 62 6c 65 2a 2c 54 72 69 67 67 65 72  *,Table*,Trigger
27910 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 31  *,int,int,int,i1
27920 36 2c 75 38 2c 75 38 2c 75 38 2c 69 6e 74 29 3b  6,u8,u8,u8,int);
27930 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 47 65 6e  .void sqlite3Gen
27940 65 72 61 74 65 52 6f 77 49 6e 64 65 78 44 65 6c  erateRowIndexDel
27950 65 74 65 28 50 61 72 73 65 2a 2c 20 54 61 62 6c  ete(Parse*, Tabl
27960 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
27970 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
27980 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
27990 65 78 4b 65 79 28 50 61 72 73 65 2a 2c 20 49 6e  exKey(Parse*, In
279a0 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  dex*, int, int, 
279b0 69 6e 74 2c 20 69 6e 74 2a 2c 49 6e 64 65 78 2a  int, int*,Index*
279c0 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ,int);.void sqli
279d0 74 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64  te3ResolvePartId
279e0 78 4c 61 62 65 6c 28 50 61 72 73 65 2a 2c 69 6e  xLabel(Parse*,in
279f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27a00 47 65 6e 65 72 61 74 65 43 6f 6e 73 74 72 61 69  GenerateConstrai
27a10 6e 74 43 68 65 63 6b 73 28 50 61 72 73 65 2a 2c  ntChecks(Parse*,
27a20 54 61 62 6c 65 2a 2c 69 6e 74 2a 2c 69 6e 74 2c  Table*,int*,int,
27a30 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 0a 20 20 20  int,int,int,.   
27a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a60 20 20 75 38 2c 75 38 2c 69 6e 74 2c 69 6e 74 2a    u8,u8,int,int*
27a70 2c 69 6e 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  ,int*);.void sql
27a80 69 74 65 33 43 6f 6d 70 6c 65 74 65 49 6e 73 65  ite3CompleteInse
27a90 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c 54 61 62  rtion(Parse*,Tab
27aa0 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c  le*,int,int,int,
27ab0 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  int*,int,int,int
27ac0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f 70  );.int sqlite3Op
27ad0 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65  enTableAndIndice
27ae0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
27af0 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e 74 2c 20  , int, u8, int, 
27b00 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29  u8*, int*, int*)
27b10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 65  ;.void sqlite3Be
27b20 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
27b30 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69  n(Parse*, int, i
27b40 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  nt);.void sqlite
27b50 33 4d 75 6c 74 69 57 72 69 74 65 28 50 61 72 73  3MultiWrite(Pars
27b60 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
27b70 33 4d 61 79 41 62 6f 72 74 28 50 61 72 73 65 2a  3MayAbort(Parse*
27b80 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 48  );.void sqlite3H
27b90 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  altConstraint(Pa
27ba0 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20  rse*, int, int, 
27bb0 63 68 61 72 2a 2c 20 69 38 2c 20 75 38 29 3b 0a  char*, i8, u8);.
27bc0 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 69 71  void sqlite3Uniq
27bd0 75 65 43 6f 6e 73 74 72 61 69 6e 74 28 50 61 72  ueConstraint(Par
27be0 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64 65 78 2a  se*, int, Index*
27bf0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52  );.void sqlite3R
27c00 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e 74 28 50  owidConstraint(P
27c10 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  arse*, int, Tabl
27c20 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  e*);.Expr *sqlit
27c30 65 33 45 78 70 72 44 75 70 28 73 71 6c 69 74 65  e3ExprDup(sqlite
27c40 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29 3b 0a 45  3*,Expr*,int);.E
27c50 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  xprList *sqlite3
27c60 45 78 70 72 4c 69 73 74 44 75 70 28 73 71 6c 69  ExprListDup(sqli
27c70 74 65 33 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 69  te3*,ExprList*,i
27c80 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71  nt);.SrcList *sq
27c90 6c 69 74 65 33 53 72 63 4c 69 73 74 44 75 70 28  lite3SrcListDup(
27ca0 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c 69 73 74  sqlite3*,SrcList
27cb0 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73 74 20 2a  *,int);.IdList *
27cc0 73 71 6c 69 74 65 33 49 64 4c 69 73 74 44 75 70  sqlite3IdListDup
27cd0 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c 69 73 74  (sqlite3*,IdList
27ce0 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73 71 6c 69  *);.Select *sqli
27cf0 74 65 33 53 65 6c 65 63 74 44 75 70 28 73 71 6c  te3SelectDup(sql
27d00 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a 2c 69 6e  ite3*,Select*,in
27d10 74 29 3b 0a 23 69 66 20 53 45 4c 45 43 54 54 52  t);.#if SELECTTR
27d20 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76 6f 69 64  ACE_ENABLED.void
27d30 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74 53 65   sqlite3SelectSe
27d40 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a 2c 63 6f  tName(Select*,co
27d50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6c 73  nst char*);.#els
27d60 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
27d70 65 33 53 65 6c 65 63 74 53 65 74 4e 61 6d 65 28  e3SelectSetName(
27d80 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64  A,B).#endif.void
27d90 20 73 71 6c 69 74 65 33 49 6e 73 65 72 74 42 75   sqlite3InsertBu
27da0 69 6c 74 69 6e 46 75 6e 63 73 28 46 75 6e 63 44  iltinFuncs(FuncD
27db0 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e 63 44 65  ef*,int);.FuncDe
27dc0 66 20 2a 73 71 6c 69 74 65 33 46 69 6e 64 46 75  f *sqlite3FindFu
27dd0 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65 33 2a 2c  nction(sqlite3*,
27de0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 2c  const char*,int,
27df0 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20 73 71 6c  u8,u8);.void sql
27e00 69 74 65 33 52 65 67 69 73 74 65 72 42 75 69 6c  ite3RegisterBuil
27e10 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  tinFunctions(voi
27e20 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
27e30 52 65 67 69 73 74 65 72 44 61 74 65 54 69 6d 65  RegisterDateTime
27e40 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69 64 29 3b  Functions(void);
27e50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 67  .void sqlite3Reg
27e60 69 73 74 65 72 50 65 72 43 6f 6e 6e 65 63 74 69  isterPerConnecti
27e70 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  onBuiltinFunctio
27e80 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ns(sqlite3*);.in
27e90 74 20 73 71 6c 69 74 65 33 53 61 66 65 74 79 43  t sqlite3SafetyC
27ea0 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65 33 2a 29  heckOk(sqlite3*)
27eb0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66  ;.int sqlite3Saf
27ec0 65 74 79 43 68 65 63 6b 53 69 63 6b 4f 72 4f 6b  etyCheckSickOrOk
27ed0 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f 69 64  (sqlite3*);.void
27ee0 20 73 71 6c 69 74 65 33 43 68 61 6e 67 65 43 6f   sqlite3ChangeCo
27ef0 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  okie(Parse*, int
27f00 29 3b 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64  );..#if !defined
27f10 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 45  (SQLITE_OMIT_VIE
27f20 57 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  W) && !defined(S
27f30 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
27f40 45 52 29 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ER).void sqlite3
27f50 4d 61 74 65 72 69 61 6c 69 7a 65 56 69 65 77 28  MaterializeView(
27f60 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  Parse*, Table*, 
27f70 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  Expr*, int);.#en
27f80 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
27f90 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
27fa0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 42  .  void sqlite3B
27fb0 65 67 69 6e 54 72 69 67 67 65 72 28 50 61 72 73  eginTrigger(Pars
27fc0 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e  e*, Token*,Token
27fd0 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c 69 73 74  *,int,int,IdList
27fe0 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20 20 20 20  *,SrcList*,.    
27ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28000 20 20 20 20 20 20 20 45 78 70 72 2a 2c 69 6e 74         Expr*,int
28010 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
28020 71 6c 69 74 65 33 46 69 6e 69 73 68 54 72 69 67  qlite3FinishTrig
28030 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
28040 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b 65 6e 2a  gerStep*, Token*
28050 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
28060 33 44 72 6f 70 54 72 69 67 67 65 72 28 50 61 72  3DropTrigger(Par
28070 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 69  se*, SrcList*, i
28080 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69  nt);.  void sqli
28090 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 50 74  te3DropTriggerPt
280a0 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65  r(Parse*, Trigge
280b0 72 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a  r*);.  Trigger *
280c0 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73 45  sqlite3TriggersE
280d0 78 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61  xist(Parse *, Ta
280e0 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c  ble*, int, ExprL
280f0 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d 61 73 6b  ist*, int *pMask
28100 29 3b 0a 20 20 54 72 69 67 67 65 72 20 2a 73 71  );.  Trigger *sq
28110 6c 69 74 65 33 54 72 69 67 67 65 72 4c 69 73 74  lite3TriggerList
28120 28 50 61 72 73 65 20 2a 2c 20 54 61 62 6c 65 20  (Parse *, Table 
28130 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
28140 65 33 43 6f 64 65 52 6f 77 54 72 69 67 67 65 72  e3CodeRowTrigger
28150 28 50 61 72 73 65 2a 2c 20 54 72 69 67 67 65 72  (Parse*, Trigger
28160 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73   *, int, ExprLis
28170 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c 65 20 2a  t*, int, Table *
28180 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
28190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
281a0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
281b0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64 65  void sqlite3Code
281c0 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63 74  RowTriggerDirect
281d0 28 50 61 72 73 65 20 2a 2c 20 54 72 69 67 67 65  (Parse *, Trigge
281e0 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c 20 69 6e  r *, Table *, in
281f0 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  t, int, int);.  
28200 76 6f 69 64 20 73 71 6c 69 74 65 56 69 65 77 54  void sqliteViewT
28210 72 69 67 67 65 72 73 28 50 61 72 73 65 2a 2c 20  riggers(Parse*, 
28220 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a 2c 20 69  Table*, Expr*, i
28230 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  nt, ExprList*);.
28240 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65    void sqlite3De
28250 6c 65 74 65 54 72 69 67 67 65 72 53 74 65 70 28  leteTriggerStep(
28260 73 71 6c 69 74 65 33 2a 2c 20 54 72 69 67 67 65  sqlite3*, Trigge
28270 72 53 74 65 70 2a 29 3b 0a 20 20 54 72 69 67 67  rStep*);.  Trigg
28280 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54  erStep *sqlite3T
28290 72 69 67 67 65 72 53 65 6c 65 63 74 53 74 65 70  riggerSelectStep
282a0 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74  (sqlite3*,Select
282b0 2a 29 3b 0a 20 20 54 72 69 67 67 65 72 53 74 65  *);.  TriggerSte
282c0 70 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  p *sqlite3Trigge
282d0 72 49 6e 73 65 72 74 53 74 65 70 28 73 71 6c 69  rInsertStep(sqli
282e0 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20 49 64 4c  te3*,Token*, IdL
282f0 69 73 74 2a 2c 0a 20 20 20 20 20 20 20 20 20 20  ist*,.          
28300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 65                Se
28320 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20 54 72 69  lect*,u8);.  Tri
28330 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65  ggerStep *sqlite
28340 33 54 72 69 67 67 65 72 55 70 64 61 74 65 53 74  3TriggerUpdateSt
28350 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65  ep(sqlite3*,Toke
28360 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 20 45 78  n*,ExprList*, Ex
28370 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54 72 69 67  pr*, u8);.  Trig
28380 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74 65 33  gerStep *sqlite3
28390 54 72 69 67 67 65 72 44 65 6c 65 74 65 53 74 65  TriggerDeleteSte
283a0 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e  p(sqlite3*,Token
283b0 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20 76 6f 69  *, Expr*);.  voi
283c0 64 20 73 71 6c 69 74 65 33 44 65 6c 65 74 65 54  d sqlite3DeleteT
283d0 72 69 67 67 65 72 28 73 71 6c 69 74 65 33 2a 2c  rigger(sqlite3*,
283e0 20 54 72 69 67 67 65 72 2a 29 3b 0a 20 20 76 6f   Trigger*);.  vo
283f0 69 64 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  id sqlite3Unlink
28400 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
28410 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f  (sqlite3*,int,co
28420 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 75 33  nst char*);.  u3
28430 32 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72  2 sqlite3Trigger
28440 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65 2a 2c 54  Colmask(Parse*,T
28450 72 69 67 67 65 72 2a 2c 45 78 70 72 4c 69 73 74  rigger*,ExprList
28460 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62 6c 65 2a  *,int,int,Table*
28470 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69 6e 65 20  ,int);.# define 
28480 73 71 6c 69 74 65 33 50 61 72 73 65 54 6f 70 6c  sqlite3ParseTopl
28490 65 76 65 6c 28 70 29 20 28 28 70 29 2d 3e 70 54  evel(p) ((p)->pT
284a0 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29 2d 3e 70  oplevel ? (p)->p
284b0 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70 29 29 0a  Toplevel : (p)).
284c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
284d0 49 73 54 6f 70 6c 65 76 65 6c 28 70 29 20 28 28  IsToplevel(p) ((
284e0 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c 3d 3d 30  p)->pToplevel==0
284f0 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  ).#else.# define
28500 20 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 73   sqlite3Triggers
28510 45 78 69 73 74 28 42 2c 43 2c 44 2c 45 2c 46 29  Exist(B,C,D,E,F)
28520 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
28530 74 65 33 44 65 6c 65 74 65 54 72 69 67 67 65 72  te3DeleteTrigger
28540 28 41 2c 42 29 0a 23 20 64 65 66 69 6e 65 20 73  (A,B).# define s
28550 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
28560 72 50 74 72 28 41 2c 42 29 0a 23 20 64 65 66 69  rPtr(A,B).# defi
28570 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c 69 6e 6b  ne sqlite3Unlink
28580 41 6e 64 44 65 6c 65 74 65 54 72 69 67 67 65 72  AndDeleteTrigger
28590 28 41 2c 42 2c 43 29 0a 23 20 64 65 66 69 6e 65  (A,B,C).# define
285a0 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f 77 54   sqlite3CodeRowT
285b0 72 69 67 67 65 72 28 41 2c 42 2c 43 2c 44 2c 45  rigger(A,B,C,D,E
285c0 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64 65 66 69  ,F,G,H,I).# defi
285d0 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52 6f  ne sqlite3CodeRo
285e0 77 54 72 69 67 67 65 72 44 69 72 65 63 74 28 41  wTriggerDirect(A
285f0 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23 20 64 65  ,B,C,D,E,F).# de
28600 66 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67  fine sqlite3Trig
28610 67 65 72 4c 69 73 74 28 58 2c 20 59 29 20 30 0a  gerList(X, Y) 0.
28620 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
28630 50 61 72 73 65 54 6f 70 6c 65 76 65 6c 28 70 29  ParseToplevel(p)
28640 20 70 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   p.# define sqli
28650 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
28660 20 31 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   1.# define sqli
28670 74 65 33 54 72 69 67 67 65 72 43 6f 6c 6d 61 73  te3TriggerColmas
28680 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 2c 47 29  k(A,B,C,D,E,F,G)
28690 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73   0.#endif..int s
286a0 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70 65 28 50  qlite3JoinType(P
286b0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54  arse*, Token*, T
286c0 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  oken*, Token*);.
286d0 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
286e0 74 65 46 6f 72 65 69 67 6e 4b 65 79 28 50 61 72  teForeignKey(Par
286f0 73 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20  se*, ExprList*, 
28700 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c 69 73 74  Token*, ExprList
28710 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
28720 6c 69 74 65 33 44 65 66 65 72 46 6f 72 65 69 67  lite3DeferForeig
28730 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20 69 6e 74  nKey(Parse*, int
28740 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  );.#ifndef SQLIT
28750 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a 41  E_OMIT_AUTHORIZA
28760 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73 71 6c 69  TION.  void sqli
28770 74 65 33 41 75 74 68 52 65 61 64 28 50 61 72 73  te3AuthRead(Pars
28780 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65 6d 61 2a  e*,Expr*,Schema*
28790 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20 20 69 6e  ,SrcList*);.  in
287a0 74 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  t sqlite3AuthChe
287b0 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74 2c 20 63  ck(Parse*,int, c
287c0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
287d0 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
287e0 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  har*);.  void sq
287f0 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
28800 50 75 73 68 28 50 61 72 73 65 2a 2c 20 41 75 74  Push(Parse*, Aut
28810 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f 6e 73 74  hContext*, const
28820 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 20   char*);.  void 
28830 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65  sqlite3AuthConte
28840 78 74 50 6f 70 28 41 75 74 68 43 6f 6e 74 65 78  xtPop(AuthContex
28850 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  t*);.  int sqlit
28860 65 33 41 75 74 68 52 65 61 64 43 6f 6c 28 50 61  e3AuthReadCol(Pa
28870 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  rse*, const char
28880 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a   *, const char *
28890 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65 0a 23 20  , int);.#else.# 
288a0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75  define sqlite3Au
288b0 74 68 52 65 61 64 28 61 2c 62 2c 63 2c 64 29 0a  thRead(a,b,c,d).
288c0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
288d0 41 75 74 68 43 68 65 63 6b 28 61 2c 62 2c 63 2c  AuthCheck(a,b,c,
288e0 64 2c 65 29 20 20 20 20 53 51 4c 49 54 45 5f 4f  d,e)    SQLITE_O
288f0 4b 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  K.# define sqlit
28900 65 33 41 75 74 68 43 6f 6e 74 65 78 74 50 75 73  e3AuthContextPus
28910 68 28 61 2c 62 2c 63 29 0a 23 20 64 65 66 69 6e  h(a,b,c).# defin
28920 65 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e  e sqlite3AuthCon
28930 74 65 78 74 50 6f 70 28 61 29 20 20 28 28 76 6f  textPop(a)  ((vo
28940 69 64 29 28 61 29 29 0a 23 65 6e 64 69 66 0a 76  id)(a)).#endif.v
28950 6f 69 64 20 73 71 6c 69 74 65 33 41 74 74 61 63  oid sqlite3Attac
28960 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c  h(Parse*, Expr*,
28970 20 45 78 70 72 2a 2c 20 45 78 70 72 2a 29 3b 0a   Expr*, Expr*);.
28980 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 74 61  void sqlite3Deta
28990 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  ch(Parse*, Expr*
289a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 46  );.void sqlite3F
289b0 69 78 49 6e 69 74 28 44 62 46 69 78 65 72 2a 2c  ixInit(DbFixer*,
289c0 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 63 6f   Parse*, int, co
289d0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
289e0 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71   Token*);.int sq
289f0 6c 69 74 65 33 46 69 78 53 72 63 4c 69 73 74 28  lite3FixSrcList(
28a00 44 62 46 69 78 65 72 2a 2c 20 53 72 63 4c 69 73  DbFixer*, SrcLis
28a10 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  t*);.int sqlite3
28a20 46 69 78 53 65 6c 65 63 74 28 44 62 46 69 78 65  FixSelect(DbFixe
28a30 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e  r*, Select*);.in
28a40 74 20 73 71 6c 69 74 65 33 46 69 78 45 78 70 72  t sqlite3FixExpr
28a50 28 44 62 46 69 78 65 72 2a 2c 20 45 78 70 72 2a  (DbFixer*, Expr*
28a60 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
28a70 78 45 78 70 72 4c 69 73 74 28 44 62 46 69 78 65  xExprList(DbFixe
28a80 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  r*, ExprList*);.
28a90 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 54 72  int sqlite3FixTr
28aa0 69 67 67 65 72 53 74 65 70 28 44 62 46 69 78 65  iggerStep(DbFixe
28ab0 72 2a 2c 20 54 72 69 67 67 65 72 53 74 65 70 2a  r*, TriggerStep*
28ac0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
28ad0 6f 46 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  oF(const char *z
28ae0 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e 74 2c 20  , double*, int, 
28af0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
28b00 47 65 74 49 6e 74 33 32 28 63 6f 6e 73 74 20 63  GetInt32(const c
28b10 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e  har *, int*);.in
28b20 74 20 73 71 6c 69 74 65 33 41 74 6f 69 28 63 6f  t sqlite3Atoi(co
28b30 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20  nst char*);.int 
28b40 73 71 6c 69 74 65 33 55 74 66 31 36 42 79 74 65  sqlite3Utf16Byte
28b50 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69 64 20 2a  Len(const void *
28b60 70 44 61 74 61 2c 20 69 6e 74 20 6e 43 68 61 72  pData, int nChar
28b70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 74  );.int sqlite3Ut
28b80 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e 73 74 20  f8CharLen(const 
28b90 63 68 61 72 20 2a 70 44 61 74 61 2c 20 69 6e 74  char *pData, int
28ba0 20 6e 42 79 74 65 29 3b 0a 75 33 32 20 73 71 6c   nByte);.u32 sql
28bb0 69 74 65 33 55 74 66 38 52 65 61 64 28 63 6f 6e  ite3Utf8Read(con
28bc0 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67 45 73 74  st u8**);.LogEst
28bd0 20 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 28 75   sqlite3LogEst(u
28be0 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c 69  64);.LogEst sqli
28bf0 74 65 33 4c 6f 67 45 73 74 41 64 64 28 4c 6f 67  te3LogEstAdd(Log
28c00 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a 23 69 66  Est,LogEst);.#if
28c10 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
28c20 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 4c 6f  _VIRTUALTABLE.Lo
28c30 67 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45  gEst sqlite3LogE
28c40 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28 64 6f 75  stFromDouble(dou
28c50 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  ble);.#endif.#if
28c60 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28c70 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53 43 41 4e  ENABLE_STMT_SCAN
28c80 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a 20 20 20  STATUS) || \.   
28c90 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
28ca0 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
28cb0 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20 20 20 20  STAT4) || \.    
28cc0 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
28cd0 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41 54 45 44  XPLAIN_ESTIMATED
28ce0 5f 52 4f 57 53 29 0a 75 36 34 20 73 71 6c 69 74  _ROWS).u64 sqlit
28cf0 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 4c 6f  e3LogEstToInt(Lo
28d00 67 45 73 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  gEst);.#endif../
28d10 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20 74 6f  *.** Routines to
28d20 20 72 65 61 64 20 61 6e 64 20 77 72 69 74 65 20   read and write 
28d30 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74 68 20  variable-length 
28d40 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65 73 65  integers.  These
28d50 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65 20 64   used to.** be d
28d60 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79 2c 20  efined locally, 
28d70 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65 20 74  but now we use t
28d80 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74 69 6e  he varint routin
28d90 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c 2e 63  es in the util.c
28da0 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69 6e 74  .** file..*/.int
28db0 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69 6e   sqlite3PutVarin
28dc0 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t(unsigned char*
28dd0 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c 69 74  , u64);.u8 sqlit
28de0 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f 6e 73  e3GetVarint(cons
28df0 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 20  t unsigned char 
28e00 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20 73 71  *, u64 *);.u8 sq
28e10 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33 32  lite3GetVarint32
28e20 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64 20  (const unsigned 
28e30 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29 3b 0a  char *, u32 *);.
28e40 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72 69 6e  int sqlite3Varin
28e50 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a 2f 2a  tLen(u64 v);../*
28e60 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e 20 63  .** The common c
28e70 61 73 65 20 69 73 20 66 6f 72 20 61 20 76 61 72  ase is for a var
28e80 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69 6e 67  int to be a sing
28e90 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79 20 66  le byte.  They f
28ea0 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61 63 72  ollowing.** macr
28eb0 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20 63 6f  os handle the co
28ec0 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68 6f 75  mmon case withou
28ed0 74 20 61 20 70 72 6f 63 65 64 75 72 65 20 63 61  t a procedure ca
28ee0 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63 61 6c  ll, but then cal
28ef0 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65 64 75  l.** the procedu
28f00 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20 76 61  re for larger va
28f10 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  rints..*/.#defin
28f20 65 20 67 65 74 56 61 72 69 6e 74 33 32 28 41 2c  e getVarint32(A,
28f30 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28 2a 28  B)  \.  (u8)((*(
28f40 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28 28 42  A)<(u8)0x80)?((B
28f50 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31 3a 73  )=(u32)*(A)),1:s
28f60 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 33  qlite3GetVarint3
28f70 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26 28 42  2((A),(u32 *)&(B
28f80 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75 74 56  ))).#define putV
28f90 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20 5c 0a  arint32(A,B)  \.
28fa0 20 20 28 75 38 29 28 28 28 75 33 32 29 28 42 29    (u8)(((u32)(B)
28fb0 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a 28 41  <(u32)0x80)?(*(A
28fc0 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  )=(unsigned char
28fd0 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71 6c 69  )(B)),1:\.  sqli
28fe0 74 65 33 50 75 74 56 61 72 69 6e 74 28 28 41 29  te3PutVarint((A)
28ff0 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 67  ,(B))).#define g
29000 65 74 56 61 72 69 6e 74 20 20 20 20 73 71 6c 69  etVarint    sqli
29010 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23 64 65  te3GetVarint.#de
29020 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74 20 20  fine putVarint  
29030 20 20 73 71 6c 69 74 65 33 50 75 74 56 61 72 69    sqlite3PutVari
29040 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20  nt...const char 
29050 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66  *sqlite3IndexAff
29060 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74 65 33  inityStr(sqlite3
29070 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f 69 64  *, Index*);.void
29080 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41 66 66   sqlite3TableAff
29090 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54 61 62  inity(Vdbe*, Tab
290a0 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61 72 20  le*, int);.char 
290b0 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65 41 66  sqlite3CompareAf
290c0 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78  finity(Expr *pEx
290d0 70 72 2c 20 63 68 61 72 20 61 66 66 32 29 3b 0a  pr, char aff2);.
290e0 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64 65 78  int sqlite3Index
290f0 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70 72 20  AffinityOk(Expr 
29100 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69 64 78  *pExpr, char idx
29110 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68 61 72  _affinity);.char
29120 20 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69   sqlite3ExprAffi
29130 6e 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72  nity(Expr *pExpr
29140 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74  );.int sqlite3At
29150 6f 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a  oi64(const char*
29160 2c 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29  , i64*, int, u8)
29170 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63  ;.int sqlite3Dec
29180 4f 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74  OrHexToI64(const
29190 20 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76   char*, i64*);.v
291a0 6f 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72  oid sqlite3Error
291b0 57 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a  WithMsg(sqlite3*
291c0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61  , int, const cha
291d0 72 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71  r*,...);.void sq
291e0 6c 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74  lite3Error(sqlit
291f0 65 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  e3*,int);.void s
29200 71 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f  qlite3SystemErro
29210 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b  r(sqlite3*,int);
29220 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65  .void *sqlite3He
29230 78 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a  xToBlob(sqlite3*
29240 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  , const char *z,
29250 20 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69   int n);.u8 sqli
29260 74 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20  te3HexToInt(int 
29270 68 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54  h);.int sqlite3T
29280 77 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65  woPartName(Parse
29290 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b   *, Token *, Tok
292a0 65 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b  en *, Token **);
292b0 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
292c0 4c 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41  LITE_NEED_ERR_NA
292d0 4d 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  ME).const char *
292e0 73 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69  sqlite3ErrName(i
292f0 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e  nt);.#endif..con
29300 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
29310 45 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74  ErrStr(int);.int
29320 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
29330 6d 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ma(Parse *pParse
29340 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69  );.CollSeq *sqli
29350 74 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73  te3FindCollSeq(s
29360 71 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20  qlite3*,u8 enc, 
29370 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
29380 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
29390 65 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28  e3LocateCollSeq(
293a0 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
293b0 6f 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29  onst char*zName)
293c0 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
293d0 65 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61  e3ExprCollSeq(Pa
293e0 72 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70  rse *pParse, Exp
293f0 72 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20  r *pExpr);.Expr 
29400 2a 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43  *sqlite3ExprAddC
29410 6f 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73  ollateToken(Pars
29420 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a  e *pParse, Expr*
29430 2c 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20  , const Token*, 
29440 69 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69  int);.Expr *sqli
29450 74 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74  te3ExprAddCollat
29460 65 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45  eString(Parse*,E
29470 78 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a  xpr*,const char*
29480 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
29490 45 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28  ExprSkipCollate(
294a0 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Expr*);.int sqli
294b0 74 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28  te3CheckCollSeq(
294c0 50 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71  Parse *, CollSeq
294d0 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
294e0 43 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28  CheckObjectName(
294f0 50 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63  Parse *, const c
29500 68 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  har *);.void sql
29510 69 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67  ite3VdbeSetChang
29520 65 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e  es(sqlite3 *, in
29530 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41  t);.int sqlite3A
29540 64 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34  ddInt64(i64*,i64
29550 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75  );.int sqlite3Su
29560 62 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  bInt64(i64*,i64)
29570 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c  ;.int sqlite3Mul
29580 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
29590 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49  .int sqlite3AbsI
295a0 6e 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65  nt32(int);.#ifde
295b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
295c0 38 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73  8_3_NAMES.void s
295d0 71 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78  qlite3FileSuffix
295e0 33 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  3(const char*, c
295f0 68 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  har*);.#else.# d
29600 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c  efine sqlite3Fil
29610 65 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65  eSuffix3(X,Y).#e
29620 6e 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47  ndif.u8 sqlite3G
29630 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
29640 63 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f  char *z,u8);..co
29650 6e 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65  nst void *sqlite
29660 33 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74  3ValueText(sqlit
29670 65 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a  e3_value*, u8);.
29680 69 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65  int sqlite3Value
29690 42 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61  Bytes(sqlite3_va
296a0 6c 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20  lue*, u8);.void 
296b0 73 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53  sqlite3ValueSetS
296c0 74 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  tr(sqlite3_value
296d0 2a 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f  *, int, const vo
296e0 69 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20  id *,u8,.       
296f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29700 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
29710 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61  ;.void sqlite3Va
29720 6c 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74  lueSetNull(sqlit
29730 65 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64  e3_value*);.void
29740 20 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65   sqlite3ValueFre
29750 65 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  e(sqlite3_value*
29760 29 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  );.sqlite3_value
29770 20 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65   *sqlite3ValueNe
29780 77 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68  w(sqlite3 *);.ch
29790 61 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36  ar *sqlite3Utf16
297a0 74 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63  to8(sqlite3 *, c
297b0 6f 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c  onst void*, int,
297c0 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   u8);.int sqlite
297d0 33 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73  3ValueFromExpr(s
297e0 71 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a  qlite3 *, Expr *
297f0 2c 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65  , u8, u8, sqlite
29800 33 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69  3_value **);.voi
29810 64 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70  d sqlite3ValueAp
29820 70 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69  plyAffinity(sqli
29830 74 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c  te3_value *, u8,
29840 20 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51   u8);.#ifndef SQ
29850 4c 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f  LITE_AMALGAMATIO
29860 4e 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75  N.extern const u
29870 6e 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c  nsigned char sql
29880 69 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72  ite3OpcodeProper
29890 74 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e  ty[];.extern con
298a0 73 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53  st char sqlite3S
298b0 74 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65  trBINARY[];.exte
298c0 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  rn const unsigne
298d0 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70  d char sqlite3Up
298e0 70 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78  perToLower[];.ex
298f0 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67  tern const unsig
29900 6e 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33  ned char sqlite3
29910 43 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65  CtypeMap[];.exte
29920 72 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73  rn const Token s
29930 71 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b  qlite3IntTokens[
29940 5d 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45  ];.extern SQLITE
29950 5f 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69  _WSD struct Sqli
29960 74 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65  te3Config sqlite
29970 33 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20  3Config;.extern 
29980 46 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69  FuncDefHash sqli
29990 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69  te3BuiltinFuncti
299a0 6f 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  ons;.#ifndef SQL
299b0 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74  ITE_OMIT_WSD.ext
299c0 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50  ern int sqlite3P
299d0 65 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64  endingByte;.#end
299e0 69 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  if.#endif.void s
299f0 71 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f  qlite3RootPageMo
29a00 76 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  ved(sqlite3*, in
29a10 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  t, int, int);.vo
29a20 69 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65  id sqlite3Reinde
29a30 78 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  x(Parse*, Token*
29a40 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20  , Token*);.void 
29a50 73 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63  sqlite3AlterFunc
29a60 74 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69  tions(void);.voi
29a70 64 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65  d sqlite3AlterRe
29a80 6e 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a  nameTable(Parse*
29a90 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65  , SrcList*, Toke
29aa0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
29ab0 47 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75  GetToken(const u
29ac0 6e 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20  nsigned char *, 
29ad0 69 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  int *);.void sql
29ae0 69 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28  ite3NestedParse(
29af0 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68  Parse*, const ch
29b00 61 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20  ar*, ...);.void 
29b10 73 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65  sqlite3ExpirePre
29b20 70 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28  paredStatements(
29b30 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73  sqlite3*);.int s
29b40 71 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c  qlite3CodeSubsel
29b50 65 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72  ect(Parse*, Expr
29b60 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76   *, int, int);.v
29b70 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
29b80 74 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65  tPrep(Parse*, Se
29b90 6c 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65  lect*, NameConte
29ba0 78 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  xt*);.void sqlit
29bb0 65 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d  e3SelectWrongNum
29bc0 54 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65  TermsError(Parse
29bd0 20 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74   *pParse, Select
29be0 20 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65   *p);.int sqlite
29bf0 33 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63  3MatchSpanName(c
29c00 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
29c10 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63  t char*, const c
29c20 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
29c30 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
29c40 65 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28  esolveExprNames(
29c50 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78  NameContext*, Ex
29c60 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
29c70 33 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74  3ResolveExprList
29c80 4e 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78  Names(NameContex
29c90 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a  t*, ExprList*);.
29ca0 76 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f  void sqlite3Reso
29cb0 6c 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50  lveSelectNames(P
29cc0 61 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20  arse*, Select*, 
29cd0 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76  NameContext*);.v
29ce0 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
29cf0 76 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28  veSelfReference(
29d00 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e  Parse*,Table*,in
29d10 74 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74  t,Expr*,ExprList
29d20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52  *);.int sqlite3R
29d30 65 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70  esolveOrderGroup
29d40 42 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63  By(Parse*, Selec
29d50 74 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63  t*, ExprList*, c
29d60 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
29d70 64 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44  d sqlite3ColumnD
29d80 65 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54  efault(Vdbe *, T
29d90 61 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  able *, int, int
29da0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41  );.void sqlite3A
29db0 6c 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c  lterFinishAddCol
29dc0 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b  umn(Parse *, Tok
29dd0 65 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  en *);.void sqli
29de0 74 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64  te3AlterBeginAdd
29df0 43 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20  Column(Parse *, 
29e00 53 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c  SrcList *);.Coll
29e10 53 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43  Seq *sqlite3GetC
29e20 6f 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75  ollSeq(Parse*, u
29e30 38 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f  8, CollSeq *, co
29e40 6e 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72  nst char*);.char
29e50 20 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79   sqlite3Affinity
29e60 54 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a  Type(const char*
29e70 2c 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  , u8*);.void sql
29e80 69 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73  ite3Analyze(Pars
29e90 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65  e*, Token*, Toke
29ea0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
29eb0 49 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65  InvokeBusyHandle
29ec0 72 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b  r(BusyHandler*);
29ed0 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64  .int sqlite3Find
29ee0 44 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b  Db(sqlite3*, Tok
29ef0 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  en*);.int sqlite
29f00 33 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69  3FindDbName(sqli
29f10 74 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  te3 *, const cha
29f20 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
29f30 33 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71  3AnalysisLoad(sq
29f40 6c 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b  lite3*,int iDB);
29f50 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c  .void sqlite3Del
29f60 65 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28  eteIndexSamples(
29f70 73 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29  sqlite3*,Index*)
29f80 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65  ;.void sqlite3De
29f90 66 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65  faultRowEst(Inde
29fa0 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  x*);.void sqlite
29fb0 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
29fc0 63 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c  ctions(sqlite3*,
29fd0 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74   int);.int sqlit
29fe0 65 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e  e3IsLikeFunction
29ff0 28 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c  (sqlite3*,Expr*,
2a000 69 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69  int*,char*);.voi
2a010 64 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43  d sqlite3SchemaC
2a020 6c 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63  lear(void *);.Sc
2a030 68 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68  hema *sqlite3Sch
2a040 65 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a  emaGet(sqlite3 *
2a050 2c 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20  , Btree *);.int 
2a060 73 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49  sqlite3SchemaToI
2a070 6e 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62  ndex(sqlite3 *db
2a080 2c 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79  , Schema *);.Key
2a090 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79  Info *sqlite3Key
2a0a0 49 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65  InfoAlloc(sqlite
2a0b0 33 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69  3*,int,int);.voi
2a0c0 64 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f  d sqlite3KeyInfo
2a0d0 55 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b  Unref(KeyInfo*);
2a0e0 0a 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65  .KeyInfo *sqlite
2a0f0 33 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49  3KeyInfoRef(KeyI
2a100 6e 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a  nfo*);.KeyInfo *
2a110 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66  sqlite3KeyInfoOf
2a120 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e  Index(Parse*, In
2a130 64 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51  dex*);.#ifdef SQ
2a140 4c 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73  LITE_DEBUG.int s
2a150 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57  qlite3KeyInfoIsW
2a160 72 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f  riteable(KeyInfo
2a170 2a 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  *);.#endif.int s
2a180 71 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63  qlite3CreateFunc
2a190 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73  (sqlite3 *, cons
2a1a0 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69  t char *, int, i
2a1b0 6e 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f  nt, void *,.  vo
2a1c0 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63  id (*)(sqlite3_c
2a1d0 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69  ontext*,int,sqli
2a1e0 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20  te3_value **),. 
2a1f0 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2a200 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73  3_context*,int,s
2a210 71 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29  qlite3_value **)
2a220 2c 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74  , void (*)(sqlit
2a230 65 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20  e3_context*),.  
2a240 46 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a  FuncDestructor *
2a250 70 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76  pDestructor.);.v
2a260 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61  oid sqlite3OomFa
2a270 75 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ult(sqlite3*);.v
2a280 6f 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c  oid sqlite3OomCl
2a290 65 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69  ear(sqlite3*);.i
2a2a0 6e 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69  nt sqlite3ApiExi
2a2b0 74 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69  t(sqlite3 *db, i
2a2c0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
2a2d0 4f 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65  OpenTempDatabase
2a2e0 28 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64  (Parse *);..void
2a2f0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2a300 49 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20  Init(StrAccum*, 
2a310 73 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c  sqlite3*, char*,
2a320 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
2a330 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2a340 41 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a  Append(StrAccum*
2a350 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2a360 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a370 74 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c  trAccumAppendAll
2a380 28 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74  (StrAccum*,const
2a390 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
2a3a0 6c 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28  lite3AppendChar(
2a3b0 53 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68  StrAccum*,int,ch
2a3c0 61 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74  ar);.char *sqlit
2a3d0 65 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68  e3StrAccumFinish
2a3e0 28 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69  (StrAccum*);.voi
2a3f0 64 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75  d sqlite3StrAccu
2a400 6d 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a  mReset(StrAccum*
2a410 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
2a420 65 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65  electDestInit(Se
2a430 6c 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e  lectDest*,int,in
2a440 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65  t);.Expr *sqlite
2a450 33 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70  3CreateColumnExp
2a460 72 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63  r(sqlite3 *, Src
2a470 4c 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74  List *, int, int
2a480 29 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  );..void sqlite3
2a490 42 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71  BackupRestart(sq
2a4a0 6c 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b  lite3_backup *);
2a4b0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63  .void sqlite3Bac
2a4c0 6b 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65  kupUpdate(sqlite
2a4d0 33 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f  3_backup *, Pgno
2a4e0 2c 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a  , const u8 *);..
2a4f0 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
2a500 4d 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74  MIT_SUBQUERY.int
2a510 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63   sqlite3ExprChec
2a520 6b 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72  kIN(Parse*, Expr
2a530 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  *);.#else.# defi
2a540 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
2a550 65 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54  eckIN(x,y) SQLIT
2a560 45 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66  E_OK.#endif..#if
2a570 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
2a580 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34  E_STAT3_OR_STAT4
2a590 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61  .void sqlite3Ana
2a5a0 6c 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f  lyzeFunctions(vo
2a5b0 69 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  id);.int sqlite3
2a5c0 53 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c  Stat4ProbeSetVal
2a5d0 75 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49  ue(.    Parse*,I
2a5e0 6e 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65  ndex*,UnpackedRe
2a5f0 63 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74  cord**,Expr*,int
2a600 2c 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20  ,int,int*);.int 
2a610 73 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75  sqlite3Stat4Valu
2a620 65 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a  eFromExpr(Parse*
2a630 2c 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c  , Expr*, u8, sql
2a640 69 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76  ite3_value**);.v
2a650 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34  oid sqlite3Stat4
2a660 50 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b  ProbeFree(Unpack
2a670 65 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20  edRecord*);.int 
2a680 73 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75  sqlite3Stat4Colu
2a690 6d 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e  mn(sqlite3*, con
2a6a0 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69  st void*, int, i
2a6b0 6e 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75  nt, sqlite3_valu
2a6c0 65 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74  e**);.char sqlit
2a6d0 65 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66  e3IndexColumnAff
2a6e0 69 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20  inity(sqlite3*, 
2a6f0 49 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65  Index*, int);.#e
2a700 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
2a710 69 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65  interface to the
2a720 20 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64   LEMON-generated
2a730 20 70 61 72 73 65 72 0a 2a 2f 0a 76 6f 69 64 20   parser.*/.void 
2a740 2a 73 71 6c 69 74 65 33 50 61 72 73 65 72 41 6c  *sqlite3ParserAl
2a750 6c 6f 63 28 76 6f 69 64 2a 28 2a 29 28 75 36 34  loc(void*(*)(u64
2a760 29 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  ));.void sqlite3
2a770 50 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a  ParserFree(void*
2a780 2c 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29  , void(*)(void*)
2a790 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50  );.void sqlite3P
2a7a0 61 72 73 65 72 28 76 6f 69 64 2a 2c 20 69 6e 74  arser(void*, int
2a7b0 2c 20 54 6f 6b 65 6e 2c 20 50 61 72 73 65 2a 29  , Token, Parse*)
2a7c0 3b 0a 23 69 66 64 65 66 20 59 59 54 52 41 43 4b  ;.#ifdef YYTRACK
2a7d0 4d 41 58 53 54 41 43 4b 44 45 50 54 48 0a 20 20  MAXSTACKDEPTH.  
2a7e0 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
2a7f0 72 53 74 61 63 6b 50 65 61 6b 28 76 6f 69 64 2a  rStackPeak(void*
2a800 29 3b 0a 23 65 6e 64 69 66 0a 0a 76 6f 69 64 20  );.#endif..void 
2a810 73 71 6c 69 74 65 33 41 75 74 6f 4c 6f 61 64 45  sqlite3AutoLoadE
2a820 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69 74 65  xtensions(sqlite
2a830 33 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  3*);.#ifndef SQL
2a840 49 54 45 5f 4f 4d 49 54 5f 4c 4f 41 44 5f 45 58  ITE_OMIT_LOAD_EX
2a850 54 45 4e 53 49 4f 4e 0a 20 20 76 6f 69 64 20 73  TENSION.  void s
2a860 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65 6e  qlite3CloseExten
2a870 73 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  sions(sqlite3*);
2a880 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
2a890 73 71 6c 69 74 65 33 43 6c 6f 73 65 45 78 74 65  sqlite3CloseExte
2a8a0 6e 73 69 6f 6e 73 28 58 29 0a 23 65 6e 64 69 66  nsions(X).#endif
2a8b0 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
2a8c0 5f 4f 4d 49 54 5f 53 48 41 52 45 44 5f 43 41 43  _OMIT_SHARED_CAC
2a8d0 48 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  HE.  void sqlite
2a8e0 33 54 61 62 6c 65 4c 6f 63 6b 28 50 61 72 73 65  3TableLock(Parse
2a8f0 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 75 38   *, int, int, u8
2a900 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b  , const char *);
2a910 0a 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65  .#else.  #define
2a920 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
2a930 6b 28 76 2c 77 2c 78 2c 79 2c 7a 29 0a 23 65 6e  k(v,w,x,y,z).#en
2a940 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
2a950 54 45 5f 54 45 53 54 0a 20 20 69 6e 74 20 73 71  TE_TEST.  int sq
2a960 6c 69 74 65 33 55 74 66 38 54 6f 38 28 75 6e 73  lite3Utf8To8(uns
2a970 69 67 6e 65 64 20 63 68 61 72 2a 29 3b 0a 23 65  igned char*);.#e
2a980 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c  ndif..#ifdef SQL
2a990 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
2a9a0 54 41 42 4c 45 0a 23 20 20 64 65 66 69 6e 65 20  TABLE.#  define 
2a9b0 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65 61 72  sqlite3VtabClear
2a9c0 28 59 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (Y).#  define sq
2a9d0 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28 58 2c  lite3VtabSync(X,
2a9e0 59 29 20 53 51 4c 49 54 45 5f 4f 4b 0a 23 20 20  Y) SQLITE_OK.#  
2a9f0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2aa00 61 62 52 6f 6c 6c 62 61 63 6b 28 58 29 0a 23 20  abRollback(X).# 
2aa10 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2aa20 74 61 62 43 6f 6d 6d 69 74 28 58 29 0a 23 20 20  tabCommit(X).#  
2aa30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74  define sqlite3Vt
2aa40 61 62 49 6e 53 79 6e 63 28 64 62 29 20 30 0a 23  abInSync(db) 0.#
2aa50 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33    define sqlite3
2aa60 56 74 61 62 4c 6f 63 6b 28 58 29 0a 23 20 20 64  VtabLock(X).#  d
2aa70 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2aa80 62 55 6e 6c 6f 63 6b 28 58 29 0a 23 20 20 64 65  bUnlock(X).#  de
2aa90 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2aaa0 55 6e 6c 6f 63 6b 4c 69 73 74 28 58 29 0a 23 20  UnlockList(X).# 
2aab0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2aac0 74 61 62 53 61 76 65 70 6f 69 6e 74 28 58 2c 20  tabSavepoint(X, 
2aad0 59 2c 20 5a 29 20 53 51 4c 49 54 45 5f 4f 4b 0a  Y, Z) SQLITE_OK.
2aae0 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  #  define sqlite
2aaf0 33 47 65 74 56 54 61 62 6c 65 28 58 2c 59 29 20  3GetVTable(X,Y) 
2ab00 20 28 28 56 54 61 62 6c 65 2a 29 30 29 0a 23 65   ((VTable*)0).#e
2ab10 6c 73 65 0a 20 20 20 76 6f 69 64 20 73 71 6c 69  lse.   void sqli
2ab20 74 65 33 56 74 61 62 43 6c 65 61 72 28 73 71 6c  te3VtabClear(sql
2ab30 69 74 65 33 20 2a 64 62 2c 20 54 61 62 6c 65 2a  ite3 *db, Table*
2ab40 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2ab50 65 33 56 74 61 62 44 69 73 63 6f 6e 6e 65 63 74  e3VtabDisconnect
2ab60 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 54 61  (sqlite3 *db, Ta
2ab70 62 6c 65 20 2a 70 29 3b 0a 20 20 20 69 6e 74 20  ble *p);.   int 
2ab80 73 71 6c 69 74 65 33 56 74 61 62 53 79 6e 63 28  sqlite3VtabSync(
2ab90 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 56 64 62  sqlite3 *db, Vdb
2aba0 65 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69  e*);.   int sqli
2abb0 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b 28  te3VtabRollback(
2abc0 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 20 20  sqlite3 *db);.  
2abd0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62   int sqlite3Vtab
2abe0 43 6f 6d 6d 69 74 28 73 71 6c 69 74 65 33 20 2a  Commit(sqlite3 *
2abf0 64 62 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c  db);.   void sql
2ac00 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 56 54 61  ite3VtabLock(VTa
2ac10 62 6c 65 20 2a 29 3b 0a 20 20 20 76 6f 69 64 20  ble *);.   void 
2ac20 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
2ac30 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20 20  k(VTable *);.   
2ac40 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2ac50 55 6e 6c 6f 63 6b 4c 69 73 74 28 73 71 6c 69 74  UnlockList(sqlit
2ac60 65 33 2a 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c  e3*);.   int sql
2ac70 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69 6e  ite3VtabSavepoin
2ac80 74 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  t(sqlite3 *, int
2ac90 2c 20 69 6e 74 29 3b 0a 20 20 20 76 6f 69 64 20  , int);.   void 
2aca0 73 71 6c 69 74 65 33 56 74 61 62 49 6d 70 6f 72  sqlite3VtabImpor
2acb0 74 45 72 72 6d 73 67 28 56 64 62 65 2a 2c 20 73  tErrmsg(Vdbe*, s
2acc0 71 6c 69 74 65 33 5f 76 74 61 62 2a 29 3b 0a 20  qlite3_vtab*);. 
2acd0 20 20 56 54 61 62 6c 65 20 2a 73 71 6c 69 74 65    VTable *sqlite
2ace0 33 47 65 74 56 54 61 62 6c 65 28 73 71 6c 69 74  3GetVTable(sqlit
2acf0 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 23 20  e3*, Table*);.# 
2ad00 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56   define sqlite3V
2ad10 74 61 62 49 6e 53 79 6e 63 28 64 62 29 20 28 28  tabInSync(db) ((
2ad20 64 62 29 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26  db)->nVTrans>0 &
2ad30 26 20 28 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d  & (db)->aVTrans=
2ad40 3d 30 29 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73  =0).#endif.int s
2ad50 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79 6d  qlite3VtabEponym
2ad60 6f 75 73 54 61 62 6c 65 49 6e 69 74 28 50 61 72  ousTableInit(Par
2ad70 73 65 2a 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f  se*,Module*);.vo
2ad80 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 45 70  id sqlite3VtabEp
2ad90 6f 6e 79 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61  onymousTableClea
2ada0 72 28 73 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c  r(sqlite3*,Modul
2adb0 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  e*);.void sqlite
2adc0 33 56 74 61 62 4d 61 6b 65 57 72 69 74 61 62 6c  3VtabMakeWritabl
2add0 65 28 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29  e(Parse*,Table*)
2ade0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2adf0 61 62 42 65 67 69 6e 50 61 72 73 65 28 50 61 72  abBeginParse(Par
2ae00 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b  se*, Token*, Tok
2ae10 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74  en*, Token*, int
2ae20 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56  );.void sqlite3V
2ae30 74 61 62 46 69 6e 69 73 68 50 61 72 73 65 28 50  tabFinishParse(P
2ae40 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a  arse*, Token*);.
2ae50 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2ae60 41 72 67 49 6e 69 74 28 50 61 72 73 65 2a 29 3b  ArgInit(Parse*);
2ae70 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61  .void sqlite3Vta
2ae80 62 41 72 67 45 78 74 65 6e 64 28 50 61 72 73 65  bArgExtend(Parse
2ae90 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20  *, Token*);.int 
2aea0 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43  sqlite3VtabCallC
2aeb0 72 65 61 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  reate(sqlite3*, 
2aec0 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  int, const char 
2aed0 2a 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74  *, char **);.int
2aee0 20 73 71 6c 69 74 65 33 56 74 61 62 43 61 6c 6c   sqlite3VtabCall
2aef0 43 6f 6e 6e 65 63 74 28 50 61 72 73 65 2a 2c 20  Connect(Parse*, 
2af00 54 61 62 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Table*);.int sql
2af10 69 74 65 33 56 74 61 62 43 61 6c 6c 44 65 73 74  ite3VtabCallDest
2af20 72 6f 79 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e  roy(sqlite3*, in
2af30 74 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 29  t, const char *)
2af40 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61  ;.int sqlite3Vta
2af50 62 42 65 67 69 6e 28 73 71 6c 69 74 65 33 20 2a  bBegin(sqlite3 *
2af60 2c 20 56 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e  , VTable *);.Fun
2af70 63 44 65 66 20 2a 73 71 6c 69 74 65 33 56 74 61  cDef *sqlite3Vta
2af80 62 4f 76 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f  bOverloadFunctio
2af90 6e 28 73 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63  n(sqlite3 *,Func
2afa0 44 65 66 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20  Def*, int nArg, 
2afb0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
2afc0 69 74 65 33 49 6e 76 61 6c 69 64 46 75 6e 63 74  ite3InvalidFunct
2afd0 69 6f 6e 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ion(sqlite3_cont
2afe0 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33  ext*,int,sqlite3
2aff0 5f 76 61 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74  _value**);.sqlit
2b000 65 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33  e3_int64 sqlite3
2b010 53 74 6d 74 43 75 72 72 65 6e 74 54 69 6d 65 28  StmtCurrentTime(
2b020 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
2b030 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 64  );.int sqlite3Vd
2b040 62 65 50 61 72 61 6d 65 74 65 72 49 6e 64 65 78  beParameterIndex
2b050 28 56 64 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68  (Vdbe*, const ch
2b060 61 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73  ar*, int);.int s
2b070 71 6c 69 74 65 33 54 72 61 6e 73 66 65 72 42 69  qlite3TransferBi
2b080 6e 64 69 6e 67 73 28 73 71 6c 69 74 65 33 5f 73  ndings(sqlite3_s
2b090 74 6d 74 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73  tmt *, sqlite3_s
2b0a0 74 6d 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tmt *);.void sql
2b0b0 69 74 65 33 50 61 72 73 65 72 52 65 73 65 74 28  ite3ParserReset(
2b0c0 50 61 72 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c  Parse*);.int sql
2b0d0 69 74 65 33 52 65 70 72 65 70 61 72 65 28 56 64  ite3Reprepare(Vd
2b0e0 62 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  be*);.void sqlit
2b0f0 65 33 45 78 70 72 4c 69 73 74 43 68 65 63 6b 4c  e3ExprListCheckL
2b100 65 6e 67 74 68 28 50 61 72 73 65 2a 2c 20 45 78  ength(Parse*, Ex
2b110 70 72 4c 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63  prList*, const c
2b120 68 61 72 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a  har*);.CollSeq *
2b130 73 71 6c 69 74 65 33 42 69 6e 61 72 79 43 6f 6d  sqlite3BinaryCom
2b140 70 61 72 65 43 6f 6c 6c 53 65 71 28 50 61 72 73  pareCollSeq(Pars
2b150 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 45 78 70  e *, Expr *, Exp
2b160 72 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  r *);.int sqlite
2b170 33 54 65 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f  3TempInMemory(co
2b180 6e 73 74 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63  nst sqlite3*);.c
2b190 6f 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74  onst char *sqlit
2b1a0 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d  e3JournalModenam
2b1b0 65 28 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20  e(int);.#ifndef 
2b1c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
2b1d0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 43 68 65    int sqlite3Che
2b1e0 63 6b 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a  ckpoint(sqlite3*
2b1f0 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a  , int, int, int*
2b200 2c 20 69 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73  , int*);.  int s
2b210 71 6c 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74  qlite3WalDefault
2b220 48 6f 6f 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74  Hook(void*,sqlit
2b230 65 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c  e3*,const char*,
2b240 69 6e 74 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66  int);.#endif.#if
2b250 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
2b260 5f 43 54 45 0a 20 20 57 69 74 68 20 2a 73 71 6c  _CTE.  With *sql
2b270 69 74 65 33 57 69 74 68 41 64 64 28 50 61 72 73  ite3WithAdd(Pars
2b280 65 2a 2c 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c  e*,With*,Token*,
2b290 45 78 70 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74  ExprList*,Select
2b2a0 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  *);.  void sqlit
2b2b0 65 33 57 69 74 68 44 65 6c 65 74 65 28 73 71 6c  e3WithDelete(sql
2b2c0 69 74 65 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20  ite3*,With*);.  
2b2d0 76 6f 69 64 20 73 71 6c 69 74 65 33 57 69 74 68  void sqlite3With
2b2e0 50 75 73 68 28 50 61 72 73 65 2a 2c 20 57 69 74  Push(Parse*, Wit
2b2f0 68 2a 2c 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23  h*, u8);.#else.#
2b300 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69  define sqlite3Wi
2b310 74 68 50 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64  thPush(x,y,z).#d
2b320 65 66 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74  efine sqlite3Wit
2b330 68 44 65 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e  hDelete(x,y).#en
2b340 64 69 66 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74  dif../* Declarat
2b350 69 6f 6e 73 20 66 6f 72 20 66 75 6e 63 74 69 6f  ions for functio
2b360 6e 73 20 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c  ns in fkey.c. Al
2b370 6c 20 6f 66 20 74 68 65 73 65 20 61 72 65 20 72  l of these are r
2b380 65 70 6c 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f  eplaced by.** no
2b390 2d 6f 70 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d  -op macros if OM
2b3a0 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69  IT_FOREIGN_KEY i
2b3b0 73 20 64 65 66 69 6e 65 64 2e 20 49 6e 20 74 68  s defined. In th
2b3c0 69 73 20 63 61 73 65 20 6e 6f 20 66 6f 72 65 69  is case no forei
2b3d0 67 6e 0a 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69  gn.** key functi
2b3e0 6f 6e 61 6c 69 74 79 20 69 73 20 61 76 61 69 6c  onality is avail
2b3f0 61 62 6c 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52  able. If OMIT_TR
2b400 49 47 47 45 52 20 69 73 20 64 65 66 69 6e 65 64  IGGER is defined
2b410 20 62 75 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52   but.** OMIT_FOR
2b420 45 49 47 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c  EIGN_KEY is not,
2b430 20 6f 6e 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68   only some of th
2b440 65 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20  e functions are 
2b450 6e 6f 2d 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74  no-oped. In.** t
2b460 68 69 73 20 63 61 73 65 20 66 6f 72 65 69 67 6e  his case foreign
2b470 20 6b 65 79 73 20 61 72 65 20 70 61 72 73 65 64   keys are parsed
2b480 2c 20 62 75 74 20 6e 6f 20 6f 74 68 65 72 20 66  , but no other f
2b490 75 6e 63 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a  unctionality is.
2b4a0 2a 2a 20 70 72 6f 76 69 64 65 64 20 28 65 6e 66  ** provided (enf
2b4b0 6f 72 63 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63  orcement of FK c
2b4c0 6f 6e 73 74 72 61 69 6e 74 73 20 72 65 71 75 69  onstraints requi
2b4d0 72 65 73 20 74 68 65 20 74 72 69 67 67 65 72 73  res the triggers
2b4e0 20 73 75 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f   sub-system)..*/
2b4f0 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2b500 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
2b510 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
2b520 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
2b530 52 49 47 47 45 52 29 0a 20 20 76 6f 69 64 20 73  RIGGER).  void s
2b540 71 6c 69 74 65 33 46 6b 43 68 65 63 6b 28 50 61  qlite3FkCheck(Pa
2b550 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e  rse*, Table*, in
2b560 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e  t, int, int*, in
2b570 74 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  t);.  void sqlit
2b580 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 50 61  e3FkDropTable(Pa
2b590 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c  rse*, SrcList *,
2b5a0 20 54 61 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64   Table*);.  void
2b5b0 20 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e   sqlite3FkAction
2b5c0 73 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a  s(Parse*, Table*
2b5d0 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
2b5e0 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20  , int*, int);.  
2b5f0 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 52 65 71  int sqlite3FkReq
2b600 75 69 72 65 64 28 50 61 72 73 65 2a 2c 20 54 61  uired(Parse*, Ta
2b610 62 6c 65 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29  ble*, int*, int)
2b620 3b 0a 20 20 75 33 32 20 73 71 6c 69 74 65 33 46  ;.  u32 sqlite3F
2b630 6b 4f 6c 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c  kOldmask(Parse*,
2b640 20 54 61 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79   Table*);.  FKey
2b650 20 2a 73 71 6c 69 74 65 33 46 6b 52 65 66 65 72   *sqlite3FkRefer
2b660 65 6e 63 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a  ences(Table *);.
2b670 23 65 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20  #else.  #define 
2b680 73 71 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73  sqlite3FkActions
2b690 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20  (a,b,c,d,e,f).  
2b6a0 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 46  #define sqlite3F
2b6b0 6b 43 68 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65  kCheck(a,b,c,d,e
2b6c0 2c 66 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71  ,f).  #define sq
2b6d0 6c 69 74 65 33 46 6b 44 72 6f 70 54 61 62 6c 65  lite3FkDropTable
2b6e0 28 61 2c 62 2c 63 29 0a 20 20 23 64 65 66 69 6e  (a,b,c).  #defin
2b6f0 65 20 73 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61  e sqlite3FkOldma
2b700 73 6b 28 61 2c 62 29 20 20 20 20 20 20 20 20 20  sk(a,b)         
2b710 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2b720 74 65 33 46 6b 52 65 71 75 69 72 65 64 28 61 2c  te3FkRequired(a,
2b730 62 2c 63 2c 64 29 20 20 20 20 30 0a 23 65 6e 64  b,c,d)    0.#end
2b740 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
2b750 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2b760 45 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  EY.  void sqlite
2b770 33 46 6b 44 65 6c 65 74 65 28 73 71 6c 69 74 65  3FkDelete(sqlite
2b780 33 20 2a 2c 20 54 61 62 6c 65 2a 29 3b 0a 20 20  3 *, Table*);.  
2b790 69 6e 74 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  int sqlite3FkLoc
2b7a0 61 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c  ateIndex(Parse*,
2b7b0 54 61 62 6c 65 2a 2c 46 4b 65 79 2a 2c 49 6e 64  Table*,FKey*,Ind
2b7c0 65 78 2a 2a 2c 69 6e 74 2a 2a 29 3b 0a 23 65 6c  ex**,int**);.#el
2b7d0 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2b7e0 69 74 65 33 46 6b 44 65 6c 65 74 65 28 61 2c 62  ite3FkDelete(a,b
2b7f0 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  ).  #define sqli
2b800 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
2b810 28 61 2c 62 2c 63 2c 64 2c 65 29 0a 23 65 6e 64  (a,b,c,d,e).#end
2b820 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 41 76 61 69 6c  if.../*.** Avail
2b830 61 62 6c 65 20 66 61 75 6c 74 20 69 6e 6a 65 63  able fault injec
2b840 74 6f 72 73 2e 20 20 53 68 6f 75 6c 64 20 62 65  tors.  Should be
2b850 20 6e 75 6d 62 65 72 65 64 20 62 65 67 69 6e 6e   numbered beginn
2b860 69 6e 67 20 77 69 74 68 20 30 2e 0a 2a 2f 0a 23  ing with 0..*/.#
2b870 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 41  define SQLITE_FA
2b880 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 4d 41 4c 4c  ULTINJECTOR_MALL
2b890 4f 43 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65  OC     0.#define
2b8a0 20 53 51 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a   SQLITE_FAULTINJ
2b8b0 45 43 54 4f 52 5f 43 4f 55 4e 54 20 20 20 20 20  ECTOR_COUNT     
2b8c0 20 31 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69 6e   1../*.** The in
2b8d0 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20 63  terface to the c
2b8e0 6f 64 65 20 69 6e 20 66 61 75 6c 74 2e 63 20 75  ode in fault.c u
2b8f0 73 65 64 20 66 6f 72 20 69 64 65 6e 74 69 66 79  sed for identify
2b900 69 6e 67 20 22 62 65 6e 69 67 6e 22 0a 2a 2a 20  ing "benign".** 
2b910 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 73 2e  malloc failures.
2b920 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 70 72   This is only pr
2b930 65 73 65 6e 74 20 69 66 20 53 51 4c 49 54 45 5f  esent if SQLITE_
2b940 4f 4d 49 54 5f 42 55 49 4c 54 49 4e 5f 54 45 53  OMIT_BUILTIN_TES
2b950 54 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  T.** is not defi
2b960 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
2b970 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 55 49 4c  SQLITE_OMIT_BUIL
2b980 54 49 4e 5f 54 45 53 54 0a 20 20 76 6f 69 64 20  TIN_TEST.  void 
2b990 73 71 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69  sqlite3BeginBeni
2b9a0 67 6e 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a  gnMalloc(void);.
2b9b0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 45 6e    void sqlite3En
2b9c0 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 76 6f  dBenignMalloc(vo
2b9d0 69 64 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  id);.#else.  #de
2b9e0 66 69 6e 65 20 73 71 6c 69 74 65 33 42 65 67 69  fine sqlite3Begi
2b9f0 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a  nBenignMalloc().
2ba00 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65    #define sqlite
2ba10 33 45 6e 64 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63  3EndBenignMalloc
2ba20 28 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  ().#endif../*.**
2ba30 20 41 6c 6c 6f 77 65 64 20 72 65 74 75 72 6e 20   Allowed return 
2ba40 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 71 6c 69  values from sqli
2ba50 74 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 29  te3FindInIndex()
2ba60 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49  .*/.#define IN_I
2ba70 4e 44 45 58 5f 52 4f 57 49 44 20 20 20 20 20 20  NDEX_ROWID      
2ba80 20 20 31 20 20 20 2f 2a 20 53 65 61 72 63 68 20    1   /* Search 
2ba90 74 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65  the rowid of the
2baa0 20 74 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e   table */.#defin
2bab0 65 20 49 4e 5f 49 4e 44 45 58 5f 45 50 48 20 20  e IN_INDEX_EPH  
2bac0 20 20 20 20 20 20 20 20 32 20 20 20 2f 2a 20 53          2   /* S
2bad0 65 61 72 63 68 20 61 6e 20 65 70 68 65 6d 65 72  earch an ephemer
2bae0 61 6c 20 62 2d 74 72 65 65 20 2a 2f 0a 23 64 65  al b-tree */.#de
2baf0 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49 4e  fine IN_INDEX_IN
2bb00 44 45 58 5f 41 53 43 20 20 20 20 33 20 20 20 2f  DEX_ASC    3   /
2bb10 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65 78  * Existing index
2bb20 20 41 53 43 45 4e 44 49 4e 47 20 2a 2f 0a 23 64   ASCENDING */.#d
2bb30 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 49  efine IN_INDEX_I
2bb40 4e 44 45 58 5f 44 45 53 43 20 20 20 34 20 20 20  NDEX_DESC   4   
2bb50 2f 2a 20 45 78 69 73 74 69 6e 67 20 69 6e 64 65  /* Existing inde
2bb60 78 20 44 45 53 43 45 4e 44 49 4e 47 20 2a 2f 0a  x DESCENDING */.
2bb70 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58  #define IN_INDEX
2bb80 5f 4e 4f 4f 50 20 20 20 20 20 20 20 20 20 35 20  _NOOP         5 
2bb90 20 20 2f 2a 20 4e 6f 20 74 61 62 6c 65 20 61 76    /* No table av
2bba0 61 69 6c 61 62 6c 65 2e 20 55 73 65 20 63 6f 6d  ailable. Use com
2bbb0 70 61 72 69 73 6f 6e 73 20 2a 2f 0a 2f 2a 0a 2a  parisons */./*.*
2bbc0 2a 20 41 6c 6c 6f 77 65 64 20 66 6c 61 67 73 20  * Allowed flags 
2bbd0 66 6f 72 20 74 68 65 20 33 72 64 20 70 61 72 61  for the 3rd para
2bbe0 6d 65 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33  meter to sqlite3
2bbf0 46 69 6e 64 49 6e 49 6e 64 65 78 28 29 2e 0a 2a  FindInIndex()..*
2bc00 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44  /.#define IN_IND
2bc10 45 58 5f 4e 4f 4f 50 5f 4f 4b 20 20 20 20 20 30  EX_NOOP_OK     0
2bc20 78 30 30 30 31 20 20 2f 2a 20 4f 4b 20 74 6f 20  x0001  /* OK to 
2bc30 72 65 74 75 72 6e 20 49 4e 5f 49 4e 44 45 58 5f  return IN_INDEX_
2bc40 4e 4f 4f 50 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NOOP */.#define 
2bc50 49 4e 5f 49 4e 44 45 58 5f 4d 45 4d 42 45 52 53  IN_INDEX_MEMBERS
2bc60 48 49 50 20 20 30 78 30 30 30 32 20 20 2f 2a 20  HIP  0x0002  /* 
2bc70 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
2bc80 20 66 6f 72 20 6d 65 6d 62 65 72 73 68 69 70 20   for membership 
2bc90 74 65 73 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20  test */.#define 
2bca0 49 4e 5f 49 4e 44 45 58 5f 4c 4f 4f 50 20 20 20  IN_INDEX_LOOP   
2bcb0 20 20 20 20 20 30 78 30 30 30 34 20 20 2f 2a 20       0x0004  /* 
2bcc0 49 4e 20 6f 70 65 72 61 74 6f 72 20 75 73 65 64  IN operator used
2bcd0 20 61 73 20 61 20 6c 6f 6f 70 20 2a 2f 0a 69 6e   as a loop */.in
2bce0 74 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  t sqlite3FindInI
2bcf0 6e 64 65 78 28 50 61 72 73 65 20 2a 2c 20 45 78  ndex(Parse *, Ex
2bd00 70 72 20 2a 2c 20 75 33 32 2c 20 69 6e 74 2a 2c  pr *, u32, int*,
2bd10 20 69 6e 74 2a 29 3b 0a 0a 69 6e 74 20 73 71 6c   int*);..int sql
2bd20 69 74 65 33 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28  ite3JournalOpen(
2bd30 73 71 6c 69 74 65 33 5f 76 66 73 20 2a 2c 20 63  sqlite3_vfs *, c
2bd40 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20 73 71 6c  onst char *, sql
2bd50 69 74 65 33 5f 66 69 6c 65 20 2a 2c 20 69 6e 74  ite3_file *, int
2bd60 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2bd70 74 65 33 4a 6f 75 72 6e 61 6c 53 69 7a 65 28 73  te3JournalSize(s
2bd80 71 6c 69 74 65 33 5f 76 66 73 20 2a 29 3b 0a 23  qlite3_vfs *);.#
2bd90 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
2bda0 42 4c 45 5f 41 54 4f 4d 49 43 5f 57 52 49 54 45  BLE_ATOMIC_WRITE
2bdb0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f  .  int sqlite3Jo
2bdc0 75 72 6e 61 6c 43 72 65 61 74 65 28 73 71 6c 69  urnalCreate(sqli
2bdd0 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a 23 65 6e  te3_file *);.#en
2bde0 64 69 66 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33  dif..int sqlite3
2bdf0 4a 6f 75 72 6e 61 6c 49 73 49 6e 4d 65 6d 6f 72  JournalIsInMemor
2be00 79 28 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a  y(sqlite3_file *
2be10 70 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  p);.void sqlite3
2be20 4d 65 6d 4a 6f 75 72 6e 61 6c 4f 70 65 6e 28 73  MemJournalOpen(s
2be30 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 29 3b 0a  qlite3_file *);.
2be40 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
2be50 72 53 65 74 48 65 69 67 68 74 41 6e 64 46 6c 61  rSetHeightAndFla
2be60 67 73 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  gs(Parse *pParse
2be70 2c 20 45 78 70 72 20 2a 70 29 3b 0a 23 69 66 20  , Expr *p);.#if 
2be80 53 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f  SQLITE_MAX_EXPR_
2be90 44 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 73 71  DEPTH>0.  int sq
2bea0 6c 69 74 65 33 53 65 6c 65 63 74 45 78 70 72 48  lite3SelectExprH
2beb0 65 69 67 68 74 28 53 65 6c 65 63 74 20 2a 29 3b  eight(Select *);
2bec0 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 45 78  .  int sqlite3Ex
2bed0 70 72 43 68 65 63 6b 48 65 69 67 68 74 28 50 61  prCheckHeight(Pa
2bee0 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73  rse*, int);.#els
2bef0 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  e.  #define sqli
2bf00 74 65 33 53 65 6c 65 63 74 45 78 70 72 48 65 69  te3SelectExprHei
2bf10 67 68 74 28 78 29 20 30 0a 20 20 23 64 65 66 69  ght(x) 0.  #defi
2bf20 6e 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68  ne sqlite3ExprCh
2bf30 65 63 6b 48 65 69 67 68 74 28 78 2c 79 29 0a 23  eckHeight(x,y).#
2bf40 65 6e 64 69 66 0a 0a 75 33 32 20 73 71 6c 69 74  endif..u32 sqlit
2bf50 65 33 47 65 74 34 62 79 74 65 28 63 6f 6e 73 74  e3Get4byte(const
2bf60 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
2bf70 74 65 33 50 75 74 34 62 79 74 65 28 75 38 2a 2c  te3Put4byte(u8*,
2bf80 20 75 33 32 29 3b 0a 0a 23 69 66 64 65 66 20 53   u32);..#ifdef S
2bf90 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c  QLITE_ENABLE_UNL
2bfa0 4f 43 4b 5f 4e 4f 54 49 46 59 0a 20 20 76 6f 69  OCK_NOTIFY.  voi
2bfb0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2bfc0 69 6f 6e 42 6c 6f 63 6b 65 64 28 73 71 6c 69 74  ionBlocked(sqlit
2bfd0 65 33 20 2a 2c 20 73 71 6c 69 74 65 33 20 2a 29  e3 *, sqlite3 *)
2bfe0 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  ;.  void sqlite3
2bff0 43 6f 6e 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b  ConnectionUnlock
2c000 65 64 28 73 71 6c 69 74 65 33 20 2a 64 62 29 3b  ed(sqlite3 *db);
2c010 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
2c020 6f 6e 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28  onnectionClosed(
2c030 73 71 6c 69 74 65 33 20 2a 64 62 29 3b 0a 23 65  sqlite3 *db);.#e
2c040 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2c050 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42  lite3ConnectionB
2c060 6c 6f 63 6b 65 64 28 78 2c 79 29 0a 20 20 23 64  locked(x,y).  #d
2c070 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2c080 6e 65 63 74 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28  nectionUnlocked(
2c090 78 29 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  x).  #define sql
2c0a0 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 43 6c  ite3ConnectionCl
2c0b0 6f 73 65 64 28 78 29 0a 23 65 6e 64 69 66 0a 0a  osed(x).#endif..
2c0c0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45  #ifdef SQLITE_DE
2c0d0 42 55 47 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  BUG.  void sqlit
2c0e0 65 33 50 61 72 73 65 72 54 72 61 63 65 28 46 49  e3ParserTrace(FI
2c0f0 4c 45 2a 2c 20 63 68 61 72 20 2a 29 3b 0a 23 65  LE*, char *);.#e
2c100 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 74  ndif../*.** If t
2c110 68 65 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  he SQLITE_ENABLE
2c120 20 49 4f 54 52 41 43 45 20 65 78 69 73 74 73 20   IOTRACE exists 
2c130 74 68 65 6e 20 74 68 65 20 67 6c 6f 62 61 6c 20  then the global 
2c140 76 61 72 69 61 62 6c 65 0a 2a 2a 20 73 71 6c 69  variable.** sqli
2c150 74 65 33 49 6f 54 72 61 63 65 20 69 73 20 61 20  te3IoTrace is a 
2c160 70 6f 69 6e 74 65 72 20 74 6f 20 61 20 70 72 69  pointer to a pri
2c170 6e 74 66 2d 6c 69 6b 65 20 72 6f 75 74 69 6e 65  ntf-like routine
2c180 20 75 73 65 64 20 74 6f 0a 2a 2a 20 70 72 69 6e   used to.** prin
2c190 74 20 49 2f 4f 20 74 72 61 63 69 6e 67 20 6d 65  t I/O tracing me
2c1a0 73 73 61 67 65 73 2e 0a 2a 2f 0a 23 69 66 64 65  ssages..*/.#ifde
2c1b0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
2c1c0 49 4f 54 52 41 43 45 0a 23 20 64 65 66 69 6e 65  IOTRACE.# define
2c1d0 20 49 4f 54 52 41 43 45 28 41 29 20 20 69 66 28   IOTRACE(A)  if(
2c1e0 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65 20   sqlite3IoTrace 
2c1f0 29 7b 20 73 71 6c 69 74 65 33 49 6f 54 72 61 63  ){ sqlite3IoTrac
2c200 65 20 41 3b 20 7d 0a 20 20 76 6f 69 64 20 73 71  e A; }.  void sq
2c210 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
2c220 53 71 6c 28 56 64 62 65 2a 29 3b 0a 53 51 4c 49  Sql(Vdbe*);.SQLI
2c230 54 45 5f 41 50 49 20 53 51 4c 49 54 45 5f 45 58  TE_API SQLITE_EX
2c240 54 45 52 4e 20 76 6f 69 64 20 28 53 51 4c 49 54  TERN void (SQLIT
2c250 45 5f 43 44 45 43 4c 20 2a 73 71 6c 69 74 65 33  E_CDECL *sqlite3
2c260 49 6f 54 72 61 63 65 29 28 63 6f 6e 73 74 20 63  IoTrace)(const c
2c270 68 61 72 2a 2c 2e 2e 2e 29 3b 0a 23 65 6c 73 65  har*,...);.#else
2c280 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2c290 45 28 41 29 0a 23 20 64 65 66 69 6e 65 20 73 71  E(A).# define sq
2c2a0 6c 69 74 65 33 56 64 62 65 49 4f 54 72 61 63 65  lite3VdbeIOTrace
2c2b0 53 71 6c 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f  Sql(X).#endif../
2c2c0 2a 0a 2a 2a 20 54 68 65 73 65 20 72 6f 75 74 69  *.** These routi
2c2d0 6e 65 73 20 61 72 65 20 61 76 61 69 6c 61 62 6c  nes are availabl
2c2e0 65 20 66 6f 72 20 74 68 65 20 6d 65 6d 32 2e 63  e for the mem2.c
2c2f0 20 64 65 62 75 67 67 69 6e 67 20 6d 65 6d 6f 72   debugging memor
2c300 79 20 61 6c 6c 6f 63 61 74 6f 72 0a 2a 2a 20 6f  y allocator.** o
2c310 6e 6c 79 2e 20 20 54 68 65 79 20 61 72 65 20 75  nly.  They are u
2c320 73 65 64 20 74 6f 20 76 65 72 69 66 79 20 74 68  sed to verify th
2c330 61 74 20 64 69 66 66 65 72 65 6e 74 20 22 74 79  at different "ty
2c340 70 65 73 22 20 6f 66 20 6d 65 6d 6f 72 79 0a 2a  pes" of memory.*
2c350 2a 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 61 72  * allocations ar
2c360 65 20 70 72 6f 70 65 72 6c 79 20 74 72 61 63 6b  e properly track
2c370 65 64 20 62 79 20 74 68 65 20 73 79 73 74 65 6d  ed by the system
2c380 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2c390 65 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29  emdebugSetType()
2c3a0 20 73 65 74 73 20 74 68 65 20 22 74 79 70 65 22   sets the "type"
2c3b0 20 6f 66 20 61 6e 20 61 6c 6c 6f 63 61 74 69 6f   of an allocatio
2c3c0 6e 20 74 6f 20 6f 6e 65 20 6f 66 0a 2a 2a 20 74  n to one of.** t
2c3d0 68 65 20 4d 45 4d 54 59 50 45 5f 2a 20 6d 61 63  he MEMTYPE_* mac
2c3e0 72 6f 73 20 64 65 66 69 6e 65 64 20 62 65 6c 6f  ros defined belo
2c3f0 77 2e 20 20 54 68 65 20 74 79 70 65 20 6d 75 73  w.  The type mus
2c400 74 20 62 65 20 61 20 62 69 74 6d 61 73 6b 20 77  t be a bitmask w
2c410 69 74 68 0a 2a 2a 20 61 20 73 69 6e 67 6c 65 20  ith.** a single 
2c420 62 69 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 73  bit set..**.** s
2c430 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2c440 73 54 79 70 65 28 29 20 72 65 74 75 72 6e 73 20  sType() returns 
2c450 74 72 75 65 20 69 66 20 61 6e 79 20 6f 66 20 74  true if any of t
2c460 68 65 20 62 69 74 73 20 69 6e 20 69 74 73 20 73  he bits in its s
2c470 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d 65 6e  econd.** argumen
2c480 74 20 6d 61 74 63 68 20 74 68 65 20 74 79 70 65  t match the type
2c490 20 73 65 74 20 62 79 20 74 68 65 20 70 72 65 76   set by the prev
2c4a0 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65 6d 64  ious sqlite3Memd
2c4b0 65 62 75 67 53 65 74 54 79 70 65 28 29 2e 0a 2a  ebugSetType()..*
2c4c0 2a 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75  * sqlite3Memdebu
2c4d0 67 48 61 73 54 79 70 65 28 29 20 69 73 20 69 6e  gHasType() is in
2c4e0 74 65 6e 64 65 64 20 66 6f 72 20 75 73 65 20 69  tended for use i
2c4f0 6e 73 69 64 65 20 61 73 73 65 72 74 28 29 20 73  nside assert() s
2c500 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a 2a  tatements..**.**
2c510 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2c520 4e 6f 54 79 70 65 28 29 20 72 65 74 75 72 6e 73  NoType() returns
2c530 20 74 72 75 65 20 69 66 20 6e 6f 6e 65 20 6f 66   true if none of
2c540 20 74 68 65 20 62 69 74 73 20 69 6e 20 69 74 73   the bits in its
2c550 20 73 65 63 6f 6e 64 0a 2a 2a 20 61 72 67 75 6d   second.** argum
2c560 65 6e 74 20 6d 61 74 63 68 20 74 68 65 20 74 79  ent match the ty
2c570 70 65 20 73 65 74 20 62 79 20 74 68 65 20 70 72  pe set by the pr
2c580 65 76 69 6f 75 73 20 73 71 6c 69 74 65 33 4d 65  evious sqlite3Me
2c590 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 29 2e  mdebugSetType().
2c5a0 0a 2a 2a 0a 2a 2a 20 50 65 72 68 61 70 73 20 74  .**.** Perhaps t
2c5b0 68 65 20 6d 6f 73 74 20 69 6d 70 6f 72 74 61 6e  he most importan
2c5c0 74 20 70 6f 69 6e 74 20 69 73 20 74 68 65 20 64  t point is the d
2c5d0 69 66 66 65 72 65 6e 63 65 20 62 65 74 77 65 65  ifference betwee
2c5e0 6e 20 4d 45 4d 54 59 50 45 5f 48 45 41 50 0a 2a  n MEMTYPE_HEAP.*
2c5f0 2a 20 61 6e 64 20 4d 45 4d 54 59 50 45 5f 4c 4f  * and MEMTYPE_LO
2c600 4f 4b 41 53 49 44 45 2e 20 20 49 66 20 61 6e 20  OKASIDE.  If an 
2c610 61 6c 6c 6f 63 61 74 69 6f 6e 20 69 73 20 4d 45  allocation is ME
2c620 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45 2c  MTYPE_LOOKASIDE,
2c630 20 74 68 61 74 20 6d 65 61 6e 73 0a 2a 2a 20 69   that means.** i
2c640 74 20 6d 69 67 68 74 20 68 61 76 65 20 62 65 65  t might have bee
2c650 6e 20 61 6c 6c 6f 63 61 74 65 64 20 62 79 20 6c  n allocated by l
2c660 6f 6f 6b 61 73 69 64 65 2c 20 65 78 63 65 70 74  ookaside, except
2c670 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 20   the allocation 
2c680 77 61 73 0a 2a 2a 20 74 6f 6f 20 6c 61 72 67 65  was.** too large
2c690 20 6f 72 20 6c 6f 6f 6b 61 73 69 64 65 20 77 61   or lookaside wa
2c6a0 73 20 61 6c 72 65 61 64 79 20 66 75 6c 6c 2e 20  s already full. 
2c6b0 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
2c6c0 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20 74 68   to verify.** th
2c6d0 61 74 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 74  at allocations t
2c6e0 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20 62  hat might have b
2c6f0 65 65 6e 20 73 61 74 69 73 66 69 65 64 20 62 79  een satisfied by
2c700 20 6c 6f 6f 6b 61 73 69 64 65 20 61 72 65 20 6e   lookaside are n
2c710 6f 74 0a 2a 2a 20 70 61 73 73 65 64 20 62 61 63  ot.** passed bac
2c720 6b 20 74 6f 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69  k to non-lookasi
2c730 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2c740 65 73 2e 20 20 41 73 73 65 72 74 73 20 73 75 63  es.  Asserts suc
2c750 68 20 61 73 20 74 68 65 0a 2a 2a 20 65 78 61 6d  h as the.** exam
2c760 70 6c 65 20 61 62 6f 76 65 20 61 72 65 20 70 6c  ple above are pl
2c770 61 63 65 64 20 6f 6e 20 74 68 65 20 6e 6f 6e 2d  aced on the non-
2c780 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65 28 29  lookaside free()
2c790 20 72 6f 75 74 69 6e 65 73 20 74 6f 20 76 65 72   routines to ver
2c7a0 69 66 79 0a 2a 2a 20 74 68 69 73 20 63 6f 6e 73  ify.** this cons
2c7b0 74 72 61 69 6e 74 2e 0a 2a 2a 0a 2a 2a 20 41 6c  traint..**.** Al
2c7c0 6c 20 6f 66 20 74 68 69 73 20 69 73 20 6e 6f 2d  l of this is no-
2c7d0 6f 70 20 66 6f 72 20 61 20 70 72 6f 64 75 63 74  op for a product
2c7e0 69 6f 6e 20 62 75 69 6c 64 2e 20 20 49 74 20 6f  ion build.  It o
2c7f0 6e 6c 79 20 63 6f 6d 65 73 20 69 6e 74 6f 0a 2a  nly comes into.*
2c800 2a 20 70 6c 61 79 20 77 68 65 6e 20 74 68 65 20  * play when the 
2c810 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 20  SQLITE_MEMDEBUG 
2c820 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
2c830 69 6f 6e 20 69 73 20 75 73 65 64 2e 0a 2a 2f 0a  ion is used..*/.
2c840 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4d 45  #ifdef SQLITE_ME
2c850 4d 44 45 42 55 47 0a 20 20 76 6f 69 64 20 73 71  MDEBUG.  void sq
2c860 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2c870 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a  Type(void*,u8);.
2c880 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65 6d    int sqlite3Mem
2c890 64 65 62 75 67 48 61 73 54 79 70 65 28 76 6f 69  debugHasType(voi
2c8a0 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73 71  d*,u8);.  int sq
2c8b0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 4e 6f 54  lite3MemdebugNoT
2c8c0 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b 0a 23  ype(void*,u8);.#
2c8d0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
2c8e0 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2c8f0 54 79 70 65 28 58 2c 59 29 20 20 2f 2a 20 6e 6f  Type(X,Y)  /* no
2c900 2d 6f 70 20 2a 2f 0a 23 20 64 65 66 69 6e 65 20  -op */.# define 
2c910 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48  sqlite3MemdebugH
2c920 61 73 54 79 70 65 28 58 2c 59 29 20 20 31 0a 23  asType(X,Y)  1.#
2c930 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
2c940 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 58 2c  emdebugNoType(X,
2c950 59 29 20 20 20 31 0a 23 65 6e 64 69 66 0a 23 64  Y)   1.#endif.#d
2c960 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 48 45  efine MEMTYPE_HE
2c970 41 50 20 20 20 20 20 20 20 30 78 30 31 20 20 2f  AP       0x01  /
2c980 2a 20 47 65 6e 65 72 61 6c 20 68 65 61 70 20 61  * General heap a
2c990 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64  llocations */.#d
2c9a0 65 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 4c 4f  efine MEMTYPE_LO
2c9b0 4f 4b 41 53 49 44 45 20 20 30 78 30 32 20 20 2f  OKASIDE  0x02  /
2c9c0 2a 20 48 65 61 70 20 74 68 61 74 20 6d 69 67 68  * Heap that migh
2c9d0 74 20 68 61 76 65 20 62 65 65 6e 20 6c 6f 6f 6b  t have been look
2c9e0 61 73 69 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65  aside */.#define
2c9f0 20 4d 45 4d 54 59 50 45 5f 53 43 52 41 54 43 48   MEMTYPE_SCRATCH
2ca00 20 20 20 20 30 78 30 34 20 20 2f 2a 20 53 63 72      0x04  /* Scr
2ca10 61 74 63 68 20 61 6c 6c 6f 63 61 74 69 6f 6e 73  atch allocations
2ca20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54   */.#define MEMT
2ca30 59 50 45 5f 50 43 41 43 48 45 20 20 20 20 20 30  YPE_PCACHE     0
2ca40 78 30 38 20 20 2f 2a 20 50 61 67 65 20 63 61 63  x08  /* Page cac
2ca50 68 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 2a  he allocations *
2ca60 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 72 65 61 64 69  /../*.** Threadi
2ca70 6e 67 20 69 6e 74 65 72 66 61 63 65 0a 2a 2f 0a  ng interface.*/.
2ca80 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 57  #if SQLITE_MAX_W
2ca90 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 3e 30 0a  ORKER_THREADS>0.
2caa0 69 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61  int sqlite3Threa
2cab0 64 43 72 65 61 74 65 28 53 51 4c 69 74 65 54 68  dCreate(SQLiteTh
2cac0 72 65 61 64 2a 2a 2c 76 6f 69 64 2a 28 2a 29 28  read**,void*(*)(
2cad0 76 6f 69 64 2a 29 2c 76 6f 69 64 2a 29 3b 0a 69  void*),void*);.i
2cae0 6e 74 20 73 71 6c 69 74 65 33 54 68 72 65 61 64  nt sqlite3Thread
2caf0 4a 6f 69 6e 28 53 51 4c 69 74 65 54 68 72 65 61  Join(SQLiteThrea
2cb00 64 2a 2c 20 76 6f 69 64 2a 2a 29 3b 0a 23 65 6e  d*, void**);.#en
2cb10 64 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64  dif..#if defined
2cb20 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 44  (SQLITE_ENABLE_D
2cb30 42 53 54 41 54 5f 56 54 41 42 29 20 7c 7c 20 64  BSTAT_VTAB) || d
2cb40 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
2cb50 53 54 29 0a 69 6e 74 20 73 71 6c 69 74 65 33 44  ST).int sqlite3D
2cb60 62 73 74 61 74 52 65 67 69 73 74 65 72 28 73 71  bstatRegister(sq
2cb70 6c 69 74 65 33 2a 29 3b 0a 23 65 6e 64 69 66 0a  lite3*);.#endif.
2cb80 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72  .int sqlite3Expr
2cb90 56 65 63 74 6f 72 53 69 7a 65 28 45 78 70 72 20  VectorSize(Expr 
2cba0 2a 70 45 78 70 72 29 3b 0a 69 6e 74 20 73 71 6c  *pExpr);.int sql
2cbb0 69 74 65 33 45 78 70 72 49 73 56 65 63 74 6f 72  ite3ExprIsVector
2cbc0 28 45 78 70 72 20 2a 70 45 78 70 72 29 3b 0a 45  (Expr *pExpr);.E
2cbd0 78 70 72 20 2a 73 71 6c 69 74 65 33 45 78 70 72  xpr *sqlite3Expr
2cbe0 56 65 63 74 6f 72 46 69 65 6c 64 28 45 78 70 72  VectorField(Expr
2cbf0 2a 2c 20 69 6e 74 29 3b 0a 0a 23 65 6e 64 69 66  *, int);..#endif
2cc00 20 2f 2a 20 53 51 4c 49 54 45 49 4e 54 5f 48 20   /* SQLITEINT_H 
2cc10 2a 2f 0a                                         */.