/ Hex Artifact Content
Login

Artifact 908c37c3afa8ef795159541cebe909ff52612a9bb75301841db1afd1a242e746:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 49 6e 74 65 72 6e  ******.** Intern
0180: 61 6c 20 69 6e 74 65 72 66 61 63 65 20 64 65 66  al interface def
0190: 69 6e 69 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c  initions for SQL
01a0: 69 74 65 2e 0a 2a 2a 0a 2a 2f 0a 23 69 66 6e 64  ite..**.*/.#ifnd
01b0: 65 66 20 53 51 4c 49 54 45 49 4e 54 5f 48 0a 23  ef SQLITEINT_H.#
01c0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 49 4e 54  define SQLITEINT
01d0: 5f 48 0a 0a 2f 2a 20 53 70 65 63 69 61 6c 20 43  _H../* Special C
01e0: 6f 6d 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 53  omments:.**.** S
01f0: 6f 6d 65 20 63 6f 6d 6d 65 6e 74 73 20 68 61 76  ome comments hav
0200: 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e  e special meanin
0210: 67 20 74 6f 20 74 68 65 20 74 6f 6f 6c 73 20 74  g to the tools t
0220: 68 61 74 20 6d 65 61 73 75 72 65 20 74 65 73 74  hat measure test
0230: 0a 2a 2a 20 63 6f 76 65 72 61 67 65 3a 0a 2a 2a  .** coverage:.**
0240: 0a 2a 2a 20 20 20 20 4e 4f 5f 54 45 53 54 20 20  .**    NO_TEST  
0250: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0260: 20 20 20 2d 20 54 68 65 20 62 72 61 6e 63 68 65     - The branche
0270: 73 20 6f 6e 20 74 68 69 73 20 6c 69 6e 65 20 61  s on this line a
0280: 72 65 20 6e 6f 74 0a 2a 2a 20 20 20 20 20 20 20  re not.**       
0290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02a0: 20 20 20 20 20 20 20 20 20 20 20 6d 65 61 73 75             measu
02b0: 72 65 64 20 62 79 20 62 72 61 6e 63 68 20 63 6f  red by branch co
02c0: 76 65 72 61 67 65 2e 20 20 54 68 69 73 20 69 73  verage.  This is
02d0: 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
02e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
02f0: 20 20 20 20 20 75 73 65 64 20 6f 6e 20 6c 69 6e       used on lin
0300: 65 73 20 6f 66 20 63 6f 64 65 20 74 68 61 74 20  es of code that 
0310: 61 63 74 75 61 6c 6c 79 0a 2a 2a 20 20 20 20 20  actually.**     
0320: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0330: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6d 70               imp
0340: 6c 65 6d 65 6e 74 20 70 61 72 74 73 20 6f 66 20  lement parts of 
0350: 63 6f 76 65 72 61 67 65 20 74 65 73 74 69 6e 67  coverage testing
0360: 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d  ..**.**    OPTIM
0370: 49 5a 41 54 49 4f 4e 2d 49 46 2d 54 52 55 45 20  IZATION-IF-TRUE 
0380: 20 20 20 20 20 20 20 2d 20 54 68 69 73 20 62 72         - This br
0390: 61 6e 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20  anch is allowed 
03a0: 74 6f 20 61 6c 77 61 79 20 62 65 20 66 61 6c 73  to alway be fals
03b0: 65 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  e.**            
03c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
03d0: 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 63 6f        and the co
03e0: 72 72 65 63 74 20 61 6e 73 77 65 72 20 69 73 20  rrect answer is 
03f0: 73 74 69 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a  still obtained,.
0400: 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
0410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0420: 20 20 20 20 74 68 6f 75 67 68 20 70 65 72 68 61      though perha
0430: 70 73 20 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a  ps more slowly..
0440: 2a 2a 0a 2a 2a 20 20 20 20 4f 50 54 49 4d 49 5a  **.**    OPTIMIZ
0450: 41 54 49 4f 4e 2d 49 46 2d 46 41 4c 53 45 20 20  ATION-IF-FALSE  
0460: 20 20 20 20 20 2d 20 54 68 69 73 20 62 72 61 6e       - This bran
0470: 63 68 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f  ch is allowed to
0480: 20 61 6c 77 61 79 20 62 65 20 74 72 75 65 0a 2a   alway be true.*
0490: 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
04a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04b0: 20 20 20 61 6e 64 20 74 68 65 20 63 6f 72 72 65     and the corre
04c0: 63 74 20 61 6e 73 77 65 72 20 69 73 20 73 74 69  ct answer is sti
04d0: 6c 6c 20 6f 62 74 61 69 6e 65 64 2c 0a 2a 2a 20  ll obtained,.** 
04e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
04f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0500: 20 74 68 6f 75 67 68 20 70 65 72 68 61 70 73 20   though perhaps 
0510: 6d 6f 72 65 20 73 6c 6f 77 6c 79 2e 0a 2a 2a 0a  more slowly..**.
0520: 2a 2a 20 20 20 20 50 52 45 56 45 4e 54 53 2d 48  **    PREVENTS-H
0530: 41 52 4d 4c 45 53 53 2d 4f 56 45 52 52 45 41 44  ARMLESS-OVERREAD
0540: 20 20 2d 20 54 68 69 73 20 62 72 61 6e 63 68 20    - This branch 
0550: 70 72 65 76 65 6e 74 73 20 61 20 62 75 66 66 65  prevents a buffe
0560: 72 20 6f 76 65 72 72 65 61 64 0a 2a 2a 20 20 20  r overread.**   
0570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
0590: 68 61 74 20 77 6f 75 6c 64 20 62 65 20 68 61 72  hat would be har
05a0: 6d 6c 65 73 73 20 61 6e 64 20 75 6e 64 65 74 65  mless and undete
05b0: 63 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20  ctable.**       
05c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
05d0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 69 74             if it
05e0: 20 64 69 64 20 6f 63 63 75 72 2e 20 20 0a 2a 2a   did occur.  .**
05f0: 0a 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73  .** In all cases
0600: 2c 20 74 68 65 20 73 70 65 63 69 61 6c 20 63 6f  , the special co
0610: 6d 6d 65 6e 74 20 6d 75 73 74 20 62 65 20 65 6e  mment must be en
0620: 63 6c 6f 73 65 64 20 69 6e 20 74 68 65 20 75 73  closed in the us
0630: 75 61 6c 0a 2a 2a 20 73 6c 61 73 68 2d 61 73 74  ual.** slash-ast
0640: 65 72 69 73 6b 2e 2e 2e 61 73 74 65 72 69 73 6b  erisk...asterisk
0650: 2d 73 6c 61 73 68 20 63 6f 6d 6d 65 6e 74 20 6d  -slash comment m
0660: 61 72 6b 73 2c 20 77 69 74 68 20 6e 6f 20 73 70  arks, with no sp
0670: 61 63 65 73 20 62 65 74 77 65 65 6e 20 74 68 65  aces between the
0680: 20 0a 2a 2a 20 61 73 74 65 72 69 73 6b 73 20 61   .** asterisks a
0690: 6e 64 20 74 68 65 20 63 6f 6d 6d 65 6e 74 20 74  nd the comment t
06a0: 65 78 74 2e 0a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 4d  ext..*/../*.** M
06b0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 54 63 6c  ake sure the Tcl
06c0: 20 63 61 6c 6c 69 6e 67 20 63 6f 6e 76 65 6e 74   calling convent
06d0: 69 6f 6e 20 6d 61 63 72 6f 20 69 73 20 64 65 66  ion macro is def
06e0: 69 6e 65 64 2e 20 20 54 68 69 73 20 6d 61 63 72  ined.  This macr
06f0: 6f 20 69 73 0a 2a 2a 20 6f 6e 6c 79 20 75 73 65  o is.** only use
0700: 64 20 62 79 20 74 65 73 74 20 63 6f 64 65 20 61  d by test code a
0710: 6e 64 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69  nd Tcl integrati
0720: 6f 6e 20 63 6f 64 65 2e 0a 2a 2f 0a 23 69 66 6e  on code..*/.#ifn
0730: 64 65 66 20 53 51 4c 49 54 45 5f 54 43 4c 41 50  def SQLITE_TCLAP
0740: 49 0a 23 20 20 64 65 66 69 6e 65 20 53 51 4c 49  I.#  define SQLI
0750: 54 45 5f 54 43 4c 41 50 49 0a 23 65 6e 64 69 66  TE_TCLAPI.#endif
0760: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 73 75 72  ../*.** Make sur
0770: 65 20 74 68 61 74 20 72 61 6e 64 5f 73 28 29 20  e that rand_s() 
0780: 69 73 20 61 76 61 69 6c 61 62 6c 65 20 6f 6e 20  is available on 
0790: 57 69 6e 64 6f 77 73 20 73 79 73 74 65 6d 73 20  Windows systems 
07a0: 77 69 74 68 20 4d 53 56 43 20 32 30 30 35 0a 2a  with MSVC 2005.*
07b0: 2a 20 6f 72 20 68 69 67 68 65 72 2e 0a 2a 2f 0a  * or higher..*/.
07c0: 23 69 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43  #if defined(_MSC
07d0: 5f 56 45 52 29 20 26 26 20 5f 4d 53 43 5f 56 45  _VER) && _MSC_VE
07e0: 52 3e 3d 31 34 30 30 0a 23 20 20 64 65 66 69 6e  R>=1400.#  defin
07f0: 65 20 5f 43 52 54 5f 52 41 4e 44 5f 53 0a 23 65  e _CRT_RAND_S.#e
0800: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 6e 63 6c  ndif../*.** Incl
0810: 75 64 65 20 74 68 65 20 68 65 61 64 65 72 20 66  ude the header f
0820: 69 6c 65 20 75 73 65 64 20 74 6f 20 63 75 73 74  ile used to cust
0830: 6f 6d 69 7a 65 20 74 68 65 20 63 6f 6d 70 69 6c  omize the compil
0840: 65 72 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 4d  er options for M
0850: 53 56 43 2e 0a 2a 2a 20 54 68 69 73 20 73 68 6f  SVC..** This sho
0860: 75 6c 64 20 62 65 20 64 6f 6e 65 20 66 69 72 73  uld be done firs
0870: 74 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  t so that it can
0880: 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 70 72   successfully pr
0890: 65 76 65 6e 74 20 73 70 75 72 69 6f 75 73 0a 2a  event spurious.*
08a0: 2a 20 63 6f 6d 70 69 6c 65 72 20 77 61 72 6e 69  * compiler warni
08b0: 6e 67 73 20 64 75 65 20 74 6f 20 73 75 62 73 65  ngs due to subse
08c0: 71 75 65 6e 74 20 63 6f 6e 74 65 6e 74 20 69 6e  quent content in
08d0: 20 74 68 69 73 20 66 69 6c 65 20 61 6e 64 20 6f   this file and o
08e0: 74 68 65 72 20 66 69 6c 65 73 0a 2a 2a 20 74 68  ther files.** th
08f0: 61 74 20 61 72 65 20 69 6e 63 6c 75 64 65 64 20  at are included 
0900: 62 79 20 74 68 69 73 20 66 69 6c 65 2e 0a 2a 2f  by this file..*/
0910: 0a 23 69 6e 63 6c 75 64 65 20 22 6d 73 76 63 2e  .#include "msvc.
0920: 68 22 0a 0a 2f 2a 0a 2a 2a 20 53 70 65 63 69 61  h"../*.** Specia
0930: 6c 20 73 65 74 75 70 20 66 6f 72 20 56 78 57 6f  l setup for VxWo
0940: 72 6b 73 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20  rks.*/.#include 
0950: 22 76 78 77 6f 72 6b 73 2e 68 22 0a 0a 2f 2a 0a  "vxworks.h"../*.
0960: 2a 2a 20 54 68 65 73 65 20 23 64 65 66 69 6e 65  ** These #define
0970: 73 20 73 68 6f 75 6c 64 20 65 6e 61 62 6c 65 20  s should enable 
0980: 3e 32 47 42 20 66 69 6c 65 20 73 75 70 70 6f 72  >2GB file suppor
0990: 74 20 6f 6e 20 50 4f 53 49 58 20 69 66 20 74 68  t on POSIX if th
09a0: 65 0a 2a 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20  e.** underlying 
09b0: 6f 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d  operating system
09c0: 20 73 75 70 70 6f 72 74 73 20 69 74 2e 20 20 49   supports it.  I
09d0: 66 20 74 68 65 20 4f 53 20 6c 61 63 6b 73 0a 2a  f the OS lacks.*
09e0: 2a 20 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70  * large file sup
09f0: 70 6f 72 74 2c 20 6f 72 20 69 66 20 74 68 65 20  port, or if the 
0a00: 4f 53 20 69 73 20 77 69 6e 64 6f 77 73 2c 20 74  OS is windows, t
0a10: 68 65 73 65 20 73 68 6f 75 6c 64 20 62 65 20 6e  hese should be n
0a20: 6f 2d 6f 70 73 2e 0a 2a 2a 0a 2a 2a 20 54 69 63  o-ops..**.** Tic
0a30: 6b 65 74 20 23 32 37 33 39 3a 20 20 54 68 65 20  ket #2739:  The 
0a40: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0a50: 45 20 6d 61 63 72 6f 20 6d 75 73 74 20 61 70 70  E macro must app
0a60: 65 61 72 20 62 65 66 6f 72 65 20 61 6e 79 0a 2a  ear before any.*
0a70: 2a 20 73 79 73 74 65 6d 20 23 69 6e 63 6c 75 64  * system #includ
0a80: 65 73 2e 20 20 48 65 6e 63 65 2c 20 74 68 69 73  es.  Hence, this
0a90: 20 62 6c 6f 63 6b 20 6f 66 20 63 6f 64 65 20 6d   block of code m
0aa0: 75 73 74 20 62 65 20 74 68 65 20 76 65 72 79 20  ust be the very 
0ab0: 66 69 72 73 74 0a 2a 2a 20 63 6f 64 65 20 69 6e  first.** code in
0ac0: 20 61 6c 6c 20 73 6f 75 72 63 65 20 66 69 6c 65   all source file
0ad0: 73 2e 0a 2a 2a 0a 2a 2a 20 4c 61 72 67 65 20 66  s..**.** Large f
0ae0: 69 6c 65 20 73 75 70 70 6f 72 74 20 63 61 6e 20  ile support can 
0af0: 62 65 20 64 69 73 61 62 6c 65 64 20 75 73 69 6e  be disabled usin
0b00: 67 20 74 68 65 20 2d 44 53 51 4c 49 54 45 5f 44  g the -DSQLITE_D
0b10: 49 53 41 42 4c 45 5f 4c 46 53 20 73 77 69 74 63  ISABLE_LFS switc
0b20: 68 0a 2a 2a 20 6f 6e 20 74 68 65 20 63 6f 6d 70  h.** on the comp
0b30: 69 6c 65 72 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e  iler command lin
0b40: 65 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65  e.  This is nece
0b50: 73 73 61 72 79 20 69 66 20 79 6f 75 20 61 72 65  ssary if you are
0b60: 20 63 6f 6d 70 69 6c 69 6e 67 0a 2a 2a 20 6f 6e   compiling.** on
0b70: 20 61 20 72 65 63 65 6e 74 20 6d 61 63 68 69 6e   a recent machin
0b80: 65 20 28 65 78 3a 20 52 65 64 20 48 61 74 20 37  e (ex: Red Hat 7
0b90: 2e 32 29 20 62 75 74 20 79 6f 75 20 77 61 6e 74  .2) but you want
0ba0: 20 79 6f 75 72 20 63 6f 64 65 20 74 6f 20 77 6f   your code to wo
0bb0: 72 6b 0a 2a 2a 20 6f 6e 20 61 6e 20 6f 6c 64 65  rk.** on an olde
0bc0: 72 20 6d 61 63 68 69 6e 65 20 28 65 78 3a 20 52  r machine (ex: R
0bd0: 65 64 20 48 61 74 20 36 2e 30 29 2e 20 20 49 66  ed Hat 6.0).  If
0be0: 20 79 6f 75 20 63 6f 6d 70 69 6c 65 20 6f 6e 20   you compile on 
0bf0: 52 65 64 20 48 61 74 20 37 2e 32 0a 2a 2a 20 77  Red Hat 7.2.** w
0c00: 69 74 68 6f 75 74 20 74 68 69 73 20 6f 70 74 69  ithout this opti
0c10: 6f 6e 2c 20 4c 46 53 20 69 73 20 65 6e 61 62 6c  on, LFS is enabl
0c20: 65 2e 20 20 42 75 74 20 4c 46 53 20 64 6f 65 73  e.  But LFS does
0c30: 20 6e 6f 74 20 65 78 69 73 74 20 69 6e 20 74 68   not exist in th
0c40: 65 20 6b 65 72 6e 65 6c 0a 2a 2a 20 69 6e 20 52  e kernel.** in R
0c50: 65 64 20 48 61 74 20 36 2e 30 2c 20 73 6f 20 74  ed Hat 6.0, so t
0c60: 68 65 20 63 6f 64 65 20 77 6f 6e 27 74 20 77 6f  he code won't wo
0c70: 72 6b 2e 20 20 48 65 6e 63 65 2c 20 66 6f 72 20  rk.  Hence, for 
0c80: 6d 61 78 69 6d 75 6d 20 62 69 6e 61 72 79 0a 2a  maximum binary.*
0c90: 2a 20 70 6f 72 74 61 62 69 6c 69 74 79 20 79 6f  * portability yo
0ca0: 75 20 73 68 6f 75 6c 64 20 6f 6d 69 74 20 4c 46  u should omit LF
0cb0: 53 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 70 72 65  S..**.** The pre
0cc0: 76 69 6f 75 73 20 70 61 72 61 67 72 61 70 68 20  vious paragraph 
0cd0: 77 61 73 20 77 72 69 74 74 65 6e 20 69 6e 20 32  was written in 2
0ce0: 30 30 35 2e 20 20 28 54 68 69 73 20 70 61 72 61  005.  (This para
0cf0: 67 72 61 70 68 20 69 73 20 77 72 69 74 74 65 6e  graph is written
0d00: 0a 2a 2a 20 6f 6e 20 32 30 30 38 2d 31 31 2d 32  .** on 2008-11-2
0d10: 38 2e 29 20 54 68 65 73 65 20 64 61 79 73 2c 20  8.) These days, 
0d20: 61 6c 6c 20 4c 69 6e 75 78 20 6b 65 72 6e 65 6c  all Linux kernel
0d30: 73 20 73 75 70 70 6f 72 74 20 6c 61 72 67 65 20  s support large 
0d40: 66 69 6c 65 73 2c 20 73 6f 0a 2a 2a 20 79 6f 75  files, so.** you
0d50: 20 73 68 6f 75 6c 64 20 70 72 6f 62 61 62 6c 79   should probably
0d60: 20 6c 65 61 76 65 20 4c 46 53 20 65 6e 61 62 6c   leave LFS enabl
0d70: 65 64 2e 20 20 42 75 74 20 73 6f 6d 65 20 65 6d  ed.  But some em
0d80: 62 65 64 64 65 64 20 70 6c 61 74 66 6f 72 6d 73  bedded platforms
0d90: 20 6d 69 67 68 74 0a 2a 2a 20 6c 61 63 6b 20 4c   might.** lack L
0da0: 46 53 20 69 6e 20 77 68 69 63 68 20 63 61 73 65  FS in which case
0db0: 20 74 68 65 20 53 51 4c 49 54 45 5f 44 49 53 41   the SQLITE_DISA
0dc0: 42 4c 45 5f 4c 46 53 20 6d 61 63 72 6f 20 6d 69  BLE_LFS macro mi
0dd0: 67 68 74 20 73 74 69 6c 6c 20 62 65 20 75 73 65  ght still be use
0de0: 66 75 6c 2e 0a 2a 2a 0a 2a 2a 20 53 69 6d 69 6c  ful..**.** Simil
0df0: 61 72 20 69 73 20 74 72 75 65 20 66 6f 72 20 4d  ar is true for M
0e00: 61 63 20 4f 53 20 58 2e 20 20 4c 46 53 20 69 73  ac OS X.  LFS is
0e10: 20 6f 6e 6c 79 20 73 75 70 70 6f 72 74 65 64 20   only supported 
0e20: 6f 6e 20 4d 61 63 20 4f 53 20 58 20 39 20 61 6e  on Mac OS X 9 an
0e30: 64 20 6c 61 74 65 72 2e 0a 2a 2f 0a 23 69 66 6e  d later..*/.#ifn
0e40: 64 65 66 20 53 51 4c 49 54 45 5f 44 49 53 41 42  def SQLITE_DISAB
0e50: 4c 45 5f 4c 46 53 0a 23 20 64 65 66 69 6e 65 20  LE_LFS.# define 
0e60: 5f 4c 41 52 47 45 5f 46 49 4c 45 20 20 20 20 20  _LARGE_FILE     
0e70: 20 20 31 0a 23 20 69 66 6e 64 65 66 20 5f 46 49    1.# ifndef _FI
0e80: 4c 45 5f 4f 46 46 53 45 54 5f 42 49 54 53 0a 23  LE_OFFSET_BITS.#
0e90: 20 20 20 64 65 66 69 6e 65 20 5f 46 49 4c 45 5f     define _FILE_
0ea0: 4f 46 46 53 45 54 5f 42 49 54 53 20 36 34 0a 23  OFFSET_BITS 64.#
0eb0: 20 65 6e 64 69 66 0a 23 20 64 65 66 69 6e 65 20   endif.# define 
0ec0: 5f 4c 41 52 47 45 46 49 4c 45 5f 53 4f 55 52 43  _LARGEFILE_SOURC
0ed0: 45 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 20 54  E 1.#endif../* T
0ee0: 68 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 61  he GCC_VERSION a
0ef0: 6e 64 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  nd MSVC_VERSION 
0f00: 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65 64 20  macros are used 
0f10: 74 6f 0a 2a 2a 20 63 6f 6e 64 69 74 69 6f 6e 61  to.** conditiona
0f20: 6c 6c 79 20 69 6e 63 6c 75 64 65 20 6f 70 74 69  lly include opti
0f30: 6d 69 7a 61 74 69 6f 6e 73 20 66 6f 72 20 65 61  mizations for ea
0f40: 63 68 20 6f 66 20 74 68 65 73 65 20 63 6f 6d 70  ch of these comp
0f50: 69 6c 65 72 73 2e 20 20 41 0a 2a 2a 20 76 61 6c  ilers.  A.** val
0f60: 75 65 20 6f 66 20 30 20 6d 65 61 6e 73 20 74 68  ue of 0 means th
0f70: 61 74 20 63 6f 6d 70 69 6c 65 72 20 69 73 20 6e  at compiler is n
0f80: 6f 74 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20  ot being used.  
0f90: 54 68 65 0a 2a 2a 20 53 51 4c 49 54 45 5f 44 49  The.** SQLITE_DI
0fa0: 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53 49 43 20  SABLE_INTRINSIC 
0fb0: 6d 61 63 72 6f 20 6d 65 61 6e 73 20 64 6f 20 6e  macro means do n
0fc0: 6f 74 20 75 73 65 20 61 6e 79 20 63 6f 6d 70 69  ot use any compi
0fd0: 6c 65 72 2d 73 70 65 63 69 66 69 63 0a 2a 2a 20  ler-specific.** 
0fe0: 6f 70 74 69 6d 69 7a 61 74 69 6f 6e 73 2c 20 61  optimizations, a
0ff0: 6e 64 20 68 65 6e 63 65 20 73 65 74 20 61 6c 6c  nd hence set all
1000: 20 63 6f 6d 70 69 6c 65 72 20 6d 61 63 72 6f 73   compiler macros
1010: 20 74 6f 20 30 0a 2a 2a 0a 2a 2a 20 54 68 65 72   to 0.**.** Ther
1020: 65 20 77 61 73 20 6f 6e 63 65 20 61 6c 73 6f 20  e was once also 
1030: 61 20 43 4c 41 4e 47 5f 56 45 52 53 49 4f 4e 20  a CLANG_VERSION 
1040: 6d 61 63 72 6f 2e 20 20 48 6f 77 65 76 65 72 2c  macro.  However,
1050: 20 77 65 20 6c 65 61 72 6e 20 74 68 61 74 20 74   we learn that t
1060: 68 65 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 6e 75  he.** version nu
1070: 6d 62 65 72 73 20 69 6e 20 63 6c 61 6e 67 20 61  mbers in clang a
1080: 72 65 20 66 6f 72 20 22 6d 61 72 6b 65 74 69 6e  re for "marketin
1090: 67 22 20 6f 6e 6c 79 20 61 6e 64 20 61 72 65 20  g" only and are 
10a0: 69 6e 63 6f 6e 73 69 73 74 65 6e 74 0a 2a 2a 20  inconsistent.** 
10b0: 61 6e 64 20 75 6e 72 65 6c 69 61 62 6c 65 2e 20  and unreliable. 
10c0: 20 46 6f 72 74 75 6e 61 74 65 6c 79 2c 20 61 6c   Fortunately, al
10d0: 6c 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 63 6c  l versions of cl
10e0: 61 6e 67 20 61 6c 73 6f 20 72 65 63 6f 67 6e 69  ang also recogni
10f0: 7a 65 20 74 68 65 0a 2a 2a 20 67 63 63 20 76 65  ze the.** gcc ve
1100: 72 73 69 6f 6e 20 6e 75 6d 62 65 72 73 20 61 6e  rsion numbers an
1110: 64 20 68 61 76 65 20 72 65 61 73 6f 6e 61 62 6c  d have reasonabl
1120: 65 20 73 65 74 74 69 6e 67 73 20 66 6f 72 20 67  e settings for g
1130: 63 63 20 76 65 72 73 69 6f 6e 20 6e 75 6d 62 65  cc version numbe
1140: 72 73 2c 0a 2a 2a 20 73 6f 20 74 68 65 20 47 43  rs,.** so the GC
1150: 43 5f 56 45 52 53 49 4f 4e 20 6d 61 63 72 6f 20  C_VERSION macro 
1160: 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 61  will be set to a
1170: 20 63 6f 72 72 65 63 74 20 6e 6f 6e 2d 7a 65 72   correct non-zer
1180: 6f 20 76 61 6c 75 65 20 65 76 65 6e 0a 2a 2a 20  o value even.** 
1190: 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 77  when compiling w
11a0: 69 74 68 20 63 6c 61 6e 67 2e 0a 2a 2f 0a 23 69  ith clang..*/.#i
11b0: 66 20 64 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43  f defined(__GNUC
11c0: 5f 5f 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  __) && !defined(
11d0: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
11e0: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
11f0: 6e 65 20 47 43 43 5f 56 45 52 53 49 4f 4e 20 28  ne GCC_VERSION (
1200: 5f 5f 47 4e 55 43 5f 5f 2a 31 30 30 30 30 30 30  __GNUC__*1000000
1210: 2b 5f 5f 47 4e 55 43 5f 4d 49 4e 4f 52 5f 5f 2a  +__GNUC_MINOR__*
1220: 31 30 30 30 2b 5f 5f 47 4e 55 43 5f 50 41 54 43  1000+__GNUC_PATC
1230: 48 4c 45 56 45 4c 5f 5f 29 0a 23 65 6c 73 65 0a  HLEVEL__).#else.
1240: 23 20 64 65 66 69 6e 65 20 47 43 43 5f 56 45 52  # define GCC_VER
1250: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 23 69  SION 0.#endif.#i
1260: 66 20 64 65 66 69 6e 65 64 28 5f 4d 53 43 5f 56  f defined(_MSC_V
1270: 45 52 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  ER) && !defined(
1280: 53 51 4c 49 54 45 5f 44 49 53 41 42 4c 45 5f 49  SQLITE_DISABLE_I
1290: 4e 54 52 49 4e 53 49 43 29 0a 23 20 64 65 66 69  NTRINSIC).# defi
12a0: 6e 65 20 4d 53 56 43 5f 56 45 52 53 49 4f 4e 20  ne MSVC_VERSION 
12b0: 5f 4d 53 43 5f 56 45 52 0a 23 65 6c 73 65 0a 23  _MSC_VER.#else.#
12c0: 20 64 65 66 69 6e 65 20 4d 53 56 43 5f 56 45 52   define MSVC_VER
12d0: 53 49 4f 4e 20 30 0a 23 65 6e 64 69 66 0a 0a 2f  SION 0.#endif../
12e0: 2a 20 4e 65 65 64 65 64 20 66 6f 72 20 76 61 72  * Needed for var
12f0: 69 6f 75 73 20 64 65 66 69 6e 69 74 69 6f 6e 73  ious definitions
1300: 2e 2e 2e 20 2a 2f 0a 23 69 66 20 64 65 66 69 6e  ... */.#if defin
1310: 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 20 26 26 20  ed(__GNUC__) && 
1320: 21 64 65 66 69 6e 65 64 28 5f 47 4e 55 5f 53 4f  !defined(_GNU_SO
1330: 55 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f  URCE).# define _
1340: 47 4e 55 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69  GNU_SOURCE.#endi
1350: 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 5f  f..#if defined(_
1360: 5f 4f 70 65 6e 42 53 44 5f 5f 29 20 26 26 20 21  _OpenBSD__) && !
1370: 64 65 66 69 6e 65 64 28 5f 42 53 44 5f 53 4f 55  defined(_BSD_SOU
1380: 52 43 45 29 0a 23 20 64 65 66 69 6e 65 20 5f 42  RCE).# define _B
1390: 53 44 5f 53 4f 55 52 43 45 0a 23 65 6e 64 69 66  SD_SOURCE.#endif
13a0: 0a 0a 2f 2a 0a 2a 2a 20 46 6f 72 20 4d 69 6e 47  ../*.** For MinG
13b0: 57 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  W, check to see 
13c0: 69 66 20 77 65 20 63 61 6e 20 69 6e 63 6c 75 64  if we can includ
13d0: 65 20 74 68 65 20 68 65 61 64 65 72 20 66 69 6c  e the header fil
13e0: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 69 74 73  e containing its
13f0: 0a 2a 2a 20 76 65 72 73 69 6f 6e 20 69 6e 66 6f  .** version info
1400: 72 6d 61 74 69 6f 6e 2c 20 61 6d 6f 6e 67 20 6f  rmation, among o
1410: 74 68 65 72 20 74 68 69 6e 67 73 2e 20 20 4e 6f  ther things.  No
1420: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 74  rmally, this int
1430: 65 72 6e 61 6c 20 4d 69 6e 47 57 0a 2a 2a 20 68  ernal MinGW.** h
1440: 65 61 64 65 72 20 66 69 6c 65 20 77 6f 75 6c 64  eader file would
1450: 20 5b 6f 6e 6c 79 5d 20 62 65 20 69 6e 63 6c 75   [only] be inclu
1460: 64 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ded automaticall
1470: 79 20 62 79 20 6f 74 68 65 72 20 4d 69 6e 47 57  y by other MinGW
1480: 20 68 65 61 64 65 72 0a 2a 2a 20 66 69 6c 65 73   header.** files
1490: 3b 20 68 6f 77 65 76 65 72 2c 20 74 68 65 20 63  ; however, the c
14a0: 6f 6e 74 61 69 6e 65 64 20 76 65 72 73 69 6f 6e  ontained version
14b0: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is 
14c0: 6e 6f 77 20 72 65 71 75 69 72 65 64 20 62 79 20  now required by 
14d0: 74 68 69 73 0a 2a 2a 20 68 65 61 64 65 72 20 66  this.** header f
14e0: 69 6c 65 20 74 6f 20 77 6f 72 6b 20 61 72 6f 75  ile to work arou
14f0: 6e 64 20 62 69 6e 61 72 79 20 63 6f 6d 70 61 74  nd binary compat
1500: 69 62 69 6c 69 74 79 20 69 73 73 75 65 73 20 28  ibility issues (
1510: 73 65 65 20 62 65 6c 6f 77 29 20 61 6e 64 0a 2a  see below) and.*
1520: 2a 20 74 68 69 73 20 69 73 20 74 68 65 20 6f 6e  * this is the on
1530: 6c 79 20 6b 6e 6f 77 6e 20 77 61 79 20 74 6f 20  ly known way to 
1540: 72 65 6c 69 61 62 6c 79 20 6f 62 74 61 69 6e 20  reliably obtain 
1550: 69 74 2e 20 20 54 68 69 73 20 65 6e 74 69 72 65  it.  This entire
1560: 20 23 69 66 20 62 6c 6f 63 6b 0a 2a 2a 20 77 6f   #if block.** wo
1570: 75 6c 64 20 62 65 20 63 6f 6d 70 6c 65 74 65 6c  uld be completel
1580: 79 20 75 6e 6e 65 63 65 73 73 61 72 79 20 69 66  y unnecessary if
1590: 20 74 68 65 72 65 20 77 61 73 20 61 6e 79 20 6f   there was any o
15a0: 74 68 65 72 20 77 61 79 20 6f 66 20 64 65 74 65  ther way of dete
15b0: 63 74 69 6e 67 0a 2a 2a 20 4d 69 6e 47 57 20 76  cting.** MinGW v
15c0: 69 61 20 74 68 65 69 72 20 70 72 65 70 72 6f 63  ia their preproc
15d0: 65 73 73 6f 72 20 28 65 2e 67 2e 20 69 66 20 74  essor (e.g. if t
15e0: 68 65 79 20 63 75 73 74 6f 6d 69 7a 65 64 20 74  hey customized t
15f0: 68 65 69 72 20 47 43 43 20 74 6f 20 64 65 66 69  heir GCC to defi
1600: 6e 65 0a 2a 2a 20 73 6f 6d 65 20 4d 69 6e 47 57  ne.** some MinGW
1610: 2d 73 70 65 63 69 66 69 63 20 6d 61 63 72 6f 73  -specific macros
1620: 29 2e 20 20 57 68 65 6e 20 63 6f 6d 70 69 6c 69  ).  When compili
1630: 6e 67 20 66 6f 72 20 4d 69 6e 47 57 2c 20 65 69  ng for MinGW, ei
1640: 74 68 65 72 20 74 68 65 0a 2a 2a 20 5f 48 41 56  ther the.** _HAV
1650: 45 5f 4d 49 4e 47 57 5f 48 20 6f 72 20 5f 48 41  E_MINGW_H or _HA
1660: 56 45 5f 5f 4d 49 4e 47 57 5f 48 20 28 6e 6f 74  VE__MINGW_H (not
1670: 65 20 74 68 65 20 65 78 74 72 61 20 75 6e 64 65  e the extra unde
1680: 72 73 63 6f 72 65 29 20 6d 61 63 72 6f 20 6d 75  rscore) macro mu
1690: 73 74 20 62 65 0a 2a 2a 20 64 65 66 69 6e 65 64  st be.** defined
16a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 64 65 74  ; otherwise, det
16b0: 65 63 74 69 6f 6e 20 6f 66 20 63 6f 6e 64 69 74  ection of condit
16c0: 69 6f 6e 73 20 73 70 65 63 69 66 69 63 20 74 6f  ions specific to
16d0: 20 4d 69 6e 47 57 20 77 69 6c 6c 20 62 65 0a 2a   MinGW will be.*
16e0: 2a 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  * disabled..*/.#
16f0: 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56 45  if defined(_HAVE
1700: 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e 63 6c  _MINGW_H).# incl
1710: 75 64 65 20 22 6d 69 6e 67 77 2e 68 22 0a 23 65  ude "mingw.h".#e
1720: 6c 69 66 20 64 65 66 69 6e 65 64 28 5f 48 41 56  lif defined(_HAV
1730: 45 5f 5f 4d 49 4e 47 57 5f 48 29 0a 23 20 69 6e  E__MINGW_H).# in
1740: 63 6c 75 64 65 20 22 5f 6d 69 6e 67 77 2e 68 22  clude "_mingw.h"
1750: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
1760: 6f 72 20 4d 69 6e 47 57 20 76 65 72 73 69 6f 6e  or MinGW version
1770: 20 34 2e 78 20 28 61 6e 64 20 68 69 67 68 65 72   4.x (and higher
1780: 29 2c 20 63 68 65 63 6b 20 74 6f 20 73 65 65 20  ), check to see 
1790: 69 66 20 74 68 65 20 5f 55 53 45 5f 33 32 42 49  if the _USE_32BI
17a0: 54 5f 54 49 4d 45 5f 54 0a 2a 2a 20 64 65 66 69  T_TIME_T.** defi
17b0: 6e 65 20 69 73 20 72 65 71 75 69 72 65 64 20 74  ne is required t
17c0: 6f 20 6d 61 69 6e 74 61 69 6e 20 62 69 6e 61 72  o maintain binar
17d0: 79 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20  y compatibility 
17e0: 77 69 74 68 20 74 68 65 20 4d 53 56 43 20 72 75  with the MSVC ru
17f0: 6e 74 69 6d 65 0a 2a 2a 20 6c 69 62 72 61 72 79  ntime.** library
1800: 20 69 6e 20 75 73 65 20 28 65 2e 67 2e 20 66 6f   in use (e.g. fo
1810: 72 20 57 69 6e 64 6f 77 73 20 58 50 29 2e 0a 2a  r Windows XP)..*
1820: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 5f  /.#if !defined(_
1830: 55 53 45 5f 33 32 42 49 54 5f 54 49 4d 45 5f 54  USE_32BIT_TIME_T
1840: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 55  ) && !defined(_U
1850: 53 45 5f 36 34 42 49 54 5f 54 49 4d 45 5f 54 29  SE_64BIT_TIME_T)
1860: 20 26 26 20 5c 0a 20 20 20 20 64 65 66 69 6e 65   && \.    define
1870: 64 28 5f 57 49 4e 33 32 29 20 26 26 20 21 64 65  d(_WIN32) && !de
1880: 66 69 6e 65 64 28 5f 57 49 4e 36 34 29 20 26 26  fined(_WIN64) &&
1890: 20 5c 0a 20 20 20 20 64 65 66 69 6e 65 64 28 5f   \.    defined(_
18a0: 5f 4d 49 4e 47 57 5f 4d 41 4a 4f 52 5f 56 45 52  _MINGW_MAJOR_VER
18b0: 53 49 4f 4e 29 20 26 26 20 5f 5f 4d 49 4e 47 57  SION) && __MINGW
18c0: 5f 4d 41 4a 4f 52 5f 56 45 52 53 49 4f 4e 20 3e  _MAJOR_VERSION >
18d0: 3d 20 34 20 26 26 20 5c 0a 20 20 20 20 64 65 66  = 4 && \.    def
18e0: 69 6e 65 64 28 5f 5f 4d 53 56 43 52 54 5f 5f 29  ined(__MSVCRT__)
18f0: 0a 23 20 64 65 66 69 6e 65 20 5f 55 53 45 5f 33  .# define _USE_3
1900: 32 42 49 54 5f 54 49 4d 45 5f 54 0a 23 65 6e 64  2BIT_TIME_T.#end
1910: 69 66 0a 0a 2f 2a 20 54 68 65 20 70 75 62 6c 69  if../* The publi
1920: 63 20 53 51 4c 69 74 65 20 69 6e 74 65 72 66 61  c SQLite interfa
1930: 63 65 2e 20 20 54 68 65 20 5f 46 49 4c 45 5f 4f  ce.  The _FILE_O
1940: 46 46 53 45 54 5f 42 49 54 53 20 6d 61 63 72 6f  FFSET_BITS macro
1950: 20 6d 75 73 74 20 61 70 70 65 61 72 0a 2a 2a 20   must appear.** 
1960: 66 69 72 73 74 20 69 6e 20 51 4e 58 2e 20 20 41  first in QNX.  A
1970: 6c 73 6f 2c 20 74 68 65 20 5f 55 53 45 5f 33 32  lso, the _USE_32
1980: 42 49 54 5f 54 49 4d 45 5f 54 20 6d 61 63 72 6f  BIT_TIME_T macro
1990: 20 6d 75 73 74 20 61 70 70 65 61 72 20 66 69 72   must appear fir
19a0: 73 74 20 66 6f 72 0a 2a 2a 20 4d 69 6e 47 57 2e  st for.** MinGW.
19b0: 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22 73 71  .*/.#include "sq
19c0: 6c 69 74 65 33 2e 68 22 0a 0a 2f 2a 0a 2a 2a 20  lite3.h"../*.** 
19d0: 49 6e 63 6c 75 64 65 20 74 68 65 20 63 6f 6e 66  Include the conf
19e0: 69 67 75 72 61 74 69 6f 6e 20 68 65 61 64 65 72  iguration header
19f0: 20 6f 75 74 70 75 74 20 62 79 20 27 63 6f 6e 66   output by 'conf
1a00: 69 67 75 72 65 27 20 69 66 20 77 65 27 72 65 20  igure' if we're 
1a10: 75 73 69 6e 67 20 74 68 65 0a 2a 2a 20 61 75 74  using the.** aut
1a20: 6f 63 6f 6e 66 2d 62 61 73 65 64 20 62 75 69 6c  oconf-based buil
1a30: 64 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  d.*/.#if defined
1a40: 28 5f 48 41 56 45 5f 53 51 4c 49 54 45 5f 43 4f  (_HAVE_SQLITE_CO
1a50: 4e 46 49 47 5f 48 29 20 26 26 20 21 64 65 66 69  NFIG_H) && !defi
1a60: 6e 65 64 28 53 51 4c 49 54 45 43 4f 4e 46 49 47  ned(SQLITECONFIG
1a70: 5f 48 29 0a 23 69 6e 63 6c 75 64 65 20 22 63 6f  _H).#include "co
1a80: 6e 66 69 67 2e 68 22 0a 23 64 65 66 69 6e 65 20  nfig.h".#define 
1a90: 53 51 4c 49 54 45 43 4f 4e 46 49 47 5f 48 20 31  SQLITECONFIG_H 1
1aa0: 0a 23 65 6e 64 69 66 0a 0a 23 69 6e 63 6c 75 64  .#endif..#includ
1ab0: 65 20 22 73 71 6c 69 74 65 4c 69 6d 69 74 2e 68  e "sqliteLimit.h
1ac0: 22 0a 0a 2f 2a 20 44 69 73 61 62 6c 65 20 6e 75  "../* Disable nu
1ad0: 69 73 61 6e 63 65 20 77 61 72 6e 69 6e 67 73 20  isance warnings 
1ae0: 6f 6e 20 42 6f 72 6c 61 6e 64 20 63 6f 6d 70 69  on Borland compi
1af0: 6c 65 72 73 20 2a 2f 0a 23 69 66 20 64 65 66 69  lers */.#if defi
1b00: 6e 65 64 28 5f 5f 42 4f 52 4c 41 4e 44 43 5f 5f  ned(__BORLANDC__
1b10: 29 0a 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d  ).#pragma warn -
1b20: 72 63 68 20 2f 2a 20 75 6e 72 65 61 63 68 61 62  rch /* unreachab
1b30: 6c 65 20 63 6f 64 65 20 2a 2f 0a 23 70 72 61 67  le code */.#prag
1b40: 6d 61 20 77 61 72 6e 20 2d 63 63 63 20 2f 2a 20  ma warn -ccc /* 
1b50: 43 6f 6e 64 69 74 69 6f 6e 20 69 73 20 61 6c 77  Condition is alw
1b60: 61 79 73 20 74 72 75 65 20 6f 72 20 66 61 6c 73  ays true or fals
1b70: 65 20 2a 2f 0a 23 70 72 61 67 6d 61 20 77 61 72  e */.#pragma war
1b80: 6e 20 2d 61 75 73 20 2f 2a 20 41 73 73 69 67 6e  n -aus /* Assign
1b90: 65 64 20 76 61 6c 75 65 20 69 73 20 6e 65 76 65  ed value is neve
1ba0: 72 20 75 73 65 64 20 2a 2f 0a 23 70 72 61 67 6d  r used */.#pragm
1bb0: 61 20 77 61 72 6e 20 2d 63 73 75 20 2f 2a 20 43  a warn -csu /* C
1bc0: 6f 6d 70 61 72 69 6e 67 20 73 69 67 6e 65 64 20  omparing signed 
1bd0: 61 6e 64 20 75 6e 73 69 67 6e 65 64 20 2a 2f 0a  and unsigned */.
1be0: 23 70 72 61 67 6d 61 20 77 61 72 6e 20 2d 73 70  #pragma warn -sp
1bf0: 61 20 2f 2a 20 53 75 73 70 69 63 69 6f 75 73 20  a /* Suspicious 
1c00: 70 6f 69 6e 74 65 72 20 61 72 69 74 68 6d 65 74  pointer arithmet
1c10: 69 63 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a  ic */.#endif../*
1c20: 0a 2a 2a 20 49 6e 63 6c 75 64 65 20 73 74 61 6e  .** Include stan
1c30: 64 61 72 64 20 68 65 61 64 65 72 20 66 69 6c 65  dard header file
1c40: 73 20 61 73 20 6e 65 63 65 73 73 61 72 79 0a 2a  s as necessary.*
1c50: 2f 0a 23 69 66 64 65 66 20 48 41 56 45 5f 53 54  /.#ifdef HAVE_ST
1c60: 44 49 4e 54 5f 48 0a 23 69 6e 63 6c 75 64 65 20  DINT_H.#include 
1c70: 3c 73 74 64 69 6e 74 2e 68 3e 0a 23 65 6e 64 69  <stdint.h>.#endi
1c80: 66 0a 23 69 66 64 65 66 20 48 41 56 45 5f 49 4e  f.#ifdef HAVE_IN
1c90: 54 54 59 50 45 53 5f 48 0a 23 69 6e 63 6c 75 64  TTYPES_H.#includ
1ca0: 65 20 3c 69 6e 74 74 79 70 65 73 2e 68 3e 0a 23  e <inttypes.h>.#
1cb0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
1cc0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f   following macro
1cd0: 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 63 61  s are used to ca
1ce0: 73 74 20 70 6f 69 6e 74 65 72 73 20 74 6f 20 69  st pointers to i
1cf0: 6e 74 65 67 65 72 73 20 61 6e 64 0a 2a 2a 20 69  ntegers and.** i
1d00: 6e 74 65 67 65 72 73 20 74 6f 20 70 6f 69 6e 74  ntegers to point
1d10: 65 72 73 2e 20 20 54 68 65 20 77 61 79 20 79 6f  ers.  The way yo
1d20: 75 20 64 6f 20 74 68 69 73 20 76 61 72 69 65 73  u do this varies
1d30: 20 66 72 6f 6d 20 6f 6e 65 20 63 6f 6d 70 69 6c   from one compil
1d40: 65 72 0a 2a 2a 20 74 6f 20 74 68 65 20 6e 65 78  er.** to the nex
1d50: 74 2c 20 73 6f 20 77 65 20 68 61 76 65 20 64 65  t, so we have de
1d60: 76 65 6c 6f 70 65 64 20 74 68 65 20 66 6f 6c 6c  veloped the foll
1d70: 6f 77 69 6e 67 20 73 65 74 20 6f 66 20 23 69 66  owing set of #if
1d80: 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a 2a 20 74   statements.** t
1d90: 6f 20 67 65 6e 65 72 61 74 65 20 61 70 70 72 6f  o generate appro
1da0: 70 72 69 61 74 65 20 6d 61 63 72 6f 73 20 66 6f  priate macros fo
1db0: 72 20 61 20 77 69 64 65 20 72 61 6e 67 65 20 6f  r a wide range o
1dc0: 66 20 63 6f 6d 70 69 6c 65 72 73 2e 0a 2a 2a 0a  f compilers..**.
1dd0: 2a 2a 20 54 68 65 20 63 6f 72 72 65 63 74 20 22  ** The correct "
1de0: 41 4e 53 49 22 20 77 61 79 20 74 6f 20 64 6f 20  ANSI" way to do 
1df0: 74 68 69 73 20 69 73 20 74 6f 20 75 73 65 20 74  this is to use t
1e00: 68 65 20 69 6e 74 70 74 72 5f 74 20 74 79 70 65  he intptr_t type
1e10: 2e 0a 2a 2a 20 55 6e 66 6f 72 74 75 6e 61 74 65  ..** Unfortunate
1e20: 6c 79 2c 20 74 68 61 74 20 74 79 70 65 64 65 66  ly, that typedef
1e30: 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c   is not availabl
1e40: 65 20 6f 6e 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  e on all compile
1e50: 72 73 2c 20 6f 72 0a 2a 2a 20 69 66 20 69 74 20  rs, or.** if it 
1e60: 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 69 74  is available, it
1e70: 20 72 65 71 75 69 72 65 73 20 61 6e 20 23 69 6e   requires an #in
1e80: 63 6c 75 64 65 20 6f 66 20 73 70 65 63 69 66 69  clude of specifi
1e90: 63 20 68 65 61 64 65 72 73 0a 2a 2a 20 74 68 61  c headers.** tha
1ea0: 74 20 76 61 72 79 20 66 72 6f 6d 20 6f 6e 65 20  t vary from one 
1eb0: 6d 61 63 68 69 6e 65 20 74 6f 20 74 68 65 20 6e  machine to the n
1ec0: 65 78 74 2e 0a 2a 2a 0a 2a 2a 20 54 69 63 6b 65  ext..**.** Ticke
1ed0: 74 20 23 33 38 36 30 3a 20 20 54 68 65 20 6c 6c  t #3860:  The ll
1ee0: 76 6d 2d 67 63 63 2d 34 2e 32 20 63 6f 6d 70 69  vm-gcc-4.2 compi
1ef0: 6c 65 72 20 66 72 6f 6d 20 41 70 70 6c 65 20 63  ler from Apple c
1f00: 68 6f 6b 65 73 20 6f 6e 0a 2a 2a 20 74 68 65 20  hokes on.** the 
1f10: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
1f20: 29 30 29 5b 58 5d 29 20 63 6f 6e 73 74 72 75 63  )0)[X]) construc
1f30: 74 2e 20 20 42 75 74 20 4d 53 56 43 20 63 68 6f  t.  But MSVC cho
1f40: 6b 65 73 20 6f 6e 20 28 28 76 6f 69 64 2a 29 28  kes on ((void*)(
1f50: 58 29 29 2e 0a 2a 2a 20 53 6f 20 77 65 20 68 61  X))..** So we ha
1f60: 76 65 20 74 6f 20 64 65 66 69 6e 65 20 74 68 65  ve to define the
1f70: 20 6d 61 63 72 6f 73 20 69 6e 20 64 69 66 66 65   macros in diffe
1f80: 72 65 6e 74 20 77 61 79 73 20 64 65 70 65 6e 64  rent ways depend
1f90: 69 6e 67 20 6f 6e 20 74 68 65 0a 2a 2a 20 63 6f  ing on the.** co
1fa0: 6d 70 69 6c 65 72 2e 0a 2a 2f 0a 23 69 66 20 64  mpiler..*/.#if d
1fb0: 65 66 69 6e 65 64 28 5f 5f 50 54 52 44 49 46 46  efined(__PTRDIFF
1fc0: 5f 54 59 50 45 5f 5f 29 20 20 2f 2a 20 54 68 69  _TYPE__)  /* Thi
1fd0: 73 20 63 61 73 65 20 73 68 6f 75 6c 64 20 77 6f  s case should wo
1fe0: 72 6b 20 66 6f 72 20 47 43 43 20 2a 2f 0a 23 20  rk for GCC */.# 
1ff0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
2000: 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28 76  T_TO_PTR(X)  ((v
2010: 6f 69 64 2a 29 28 5f 5f 50 54 52 44 49 46 46 5f  oid*)(__PTRDIFF_
2020: 54 59 50 45 5f 5f 29 28 58 29 29 0a 23 20 64 65  TYPE__)(X)).# de
2030: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 5f  fine SQLITE_PTR_
2040: 54 4f 5f 49 4e 54 28 58 29 20 20 28 28 69 6e 74  TO_INT(X)  ((int
2050: 29 28 5f 5f 50 54 52 44 49 46 46 5f 54 59 50 45  )(__PTRDIFF_TYPE
2060: 5f 5f 29 28 58 29 29 0a 23 65 6c 69 66 20 21 64  __)(X)).#elif !d
2070: 65 66 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29  efined(__GNUC__)
2080: 20 20 20 20 20 20 20 2f 2a 20 57 6f 72 6b 73 20         /* Works 
2090: 66 6f 72 20 63 6f 6d 70 69 6c 65 72 73 20 6f 74  for compilers ot
20a0: 68 65 72 20 74 68 61 6e 20 4c 4c 56 4d 20 2a 2f  her than LLVM */
20b0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
20c0: 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20  _INT_TO_PTR(X)  
20d0: 28 28 76 6f 69 64 2a 29 26 28 28 63 68 61 72 2a  ((void*)&((char*
20e0: 29 30 29 5b 58 5d 29 0a 23 20 64 65 66 69 6e 65  )0)[X]).# define
20f0: 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
2100: 4e 54 28 58 29 20 20 28 28 69 6e 74 29 28 28 28  NT(X)  ((int)(((
2110: 63 68 61 72 2a 29 58 29 2d 28 63 68 61 72 2a 29  char*)X)-(char*)
2120: 30 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  0)).#elif define
2130: 64 28 48 41 56 45 5f 53 54 44 49 4e 54 5f 48 29  d(HAVE_STDINT_H)
2140: 20 20 20 2f 2a 20 55 73 65 20 74 68 69 73 20 63     /* Use this c
2150: 61 73 65 20 69 66 20 77 65 20 68 61 76 65 20 41  ase if we have A
2160: 4e 53 49 20 68 65 61 64 65 72 73 20 2a 2f 0a 23  NSI headers */.#
2170: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
2180: 4e 54 5f 54 4f 5f 50 54 52 28 58 29 20 20 28 28  NT_TO_PTR(X)  ((
2190: 76 6f 69 64 2a 29 28 69 6e 74 70 74 72 5f 74 29  void*)(intptr_t)
21a0: 28 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51  (X)).# define SQ
21b0: 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28  LITE_PTR_TO_INT(
21c0: 58 29 20 20 28 28 69 6e 74 29 28 69 6e 74 70 74  X)  ((int)(intpt
21d0: 72 5f 74 29 28 58 29 29 0a 23 65 6c 73 65 20 20  r_t)(X)).#else  
21e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21f0: 20 20 20 20 20 20 20 20 2f 2a 20 47 65 6e 65 72          /* Gener
2200: 61 74 65 73 20 61 20 77 61 72 6e 69 6e 67 20 2d  ates a warning -
2210: 20 62 75 74 20 69 74 20 61 6c 77 61 79 73 20 77   but it always w
2220: 6f 72 6b 73 20 2a 2f 0a 23 20 64 65 66 69 6e 65  orks */.# define
2230: 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50   SQLITE_INT_TO_P
2240: 54 52 28 58 29 20 20 28 28 76 6f 69 64 2a 29 28  TR(X)  ((void*)(
2250: 58 29 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  X)).# define SQL
2260: 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 58  ITE_PTR_TO_INT(X
2270: 29 20 20 28 28 69 6e 74 29 28 58 29 29 0a 23 65  )  ((int)(X)).#e
2280: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 20 6d 61  ndif../*.** A ma
2290: 63 72 6f 20 74 6f 20 68 69 6e 74 20 74 6f 20 74  cro to hint to t
22a0: 68 65 20 63 6f 6d 70 69 6c 65 72 20 74 68 61 74  he compiler that
22b0: 20 61 20 66 75 6e 63 74 69 6f 6e 20 73 68 6f 75   a function shou
22c0: 6c 64 20 6e 6f 74 20 62 65 0a 2a 2a 20 69 6e 6c  ld not be.** inl
22d0: 69 6e 65 64 2e 0a 2a 2f 0a 23 69 66 20 64 65 66  ined..*/.#if def
22e0: 69 6e 65 64 28 5f 5f 47 4e 55 43 5f 5f 29 0a 23  ined(__GNUC__).#
22f0: 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f    define SQLITE_
2300: 4e 4f 49 4e 4c 49 4e 45 20 20 5f 5f 61 74 74 72  NOINLINE  __attr
2310: 69 62 75 74 65 5f 5f 28 28 6e 6f 69 6e 6c 69 6e  ibute__((noinlin
2320: 65 29 29 0a 23 65 6c 69 66 20 64 65 66 69 6e 65  e)).#elif define
2330: 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20 5f  d(_MSC_VER) && _
2340: 4d 53 43 5f 56 45 52 3e 3d 31 33 31 30 0a 23 20  MSC_VER>=1310.# 
2350: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4e   define SQLITE_N
2360: 4f 49 4e 4c 49 4e 45 20 20 5f 5f 64 65 63 6c 73  OINLINE  __decls
2370: 70 65 63 28 6e 6f 69 6e 6c 69 6e 65 29 0a 23 65  pec(noinline).#e
2380: 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 53 51  lse.#  define SQ
2390: 4c 49 54 45 5f 4e 4f 49 4e 4c 49 4e 45 0a 23 65  LITE_NOINLINE.#e
23a0: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65  ndif../*.** Make
23b0: 20 73 75 72 65 20 74 68 61 74 20 74 68 65 20 63   sure that the c
23c0: 6f 6d 70 69 6c 65 72 20 69 6e 74 72 69 6e 73 69  ompiler intrinsi
23d0: 63 73 20 77 65 20 64 65 73 69 72 65 20 61 72 65  cs we desire are
23e0: 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 0a 2a 2a   enabled when.**
23f0: 20 63 6f 6d 70 69 6c 69 6e 67 20 77 69 74 68 20   compiling with 
2400: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 76  an appropriate v
2410: 65 72 73 69 6f 6e 20 6f 66 20 4d 53 56 43 20 75  ersion of MSVC u
2420: 6e 6c 65 73 73 20 70 72 65 76 65 6e 74 65 64 20  nless prevented 
2430: 62 79 0a 2a 2a 20 74 68 65 20 53 51 4c 49 54 45  by.** the SQLITE
2440: 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e 53  _DISABLE_INTRINS
2450: 49 43 20 64 65 66 69 6e 65 2e 0a 2a 2f 0a 23 69  IC define..*/.#i
2460: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2470: 45 5f 44 49 53 41 42 4c 45 5f 49 4e 54 52 49 4e  E_DISABLE_INTRIN
2480: 53 49 43 29 0a 23 20 20 69 66 20 64 65 66 69 6e  SIC).#  if defin
2490: 65 64 28 5f 4d 53 43 5f 56 45 52 29 20 26 26 20  ed(_MSC_VER) && 
24a0: 5f 4d 53 43 5f 56 45 52 3e 3d 31 34 30 30 0a 23  _MSC_VER>=1400.#
24b0: 20 20 20 20 69 66 20 21 64 65 66 69 6e 65 64 28      if !defined(
24c0: 5f 57 49 4e 33 32 5f 57 43 45 29 0a 23 20 20 20  _WIN32_WCE).#   
24d0: 20 20 20 69 6e 63 6c 75 64 65 20 3c 69 6e 74 72     include <intr
24e0: 69 6e 2e 68 3e 0a 23 20 20 20 20 20 20 70 72 61  in.h>.#      pra
24f0: 67 6d 61 20 69 6e 74 72 69 6e 73 69 63 28 5f 62  gma intrinsic(_b
2500: 79 74 65 73 77 61 70 5f 75 73 68 6f 72 74 29 0a  yteswap_ushort).
2510: 23 20 20 20 20 20 20 70 72 61 67 6d 61 20 69 6e  #      pragma in
2520: 74 72 69 6e 73 69 63 28 5f 62 79 74 65 73 77 61  trinsic(_byteswa
2530: 70 5f 75 6c 6f 6e 67 29 0a 23 20 20 20 20 20 20  p_ulong).#      
2540: 70 72 61 67 6d 61 20 69 6e 74 72 69 6e 73 69 63  pragma intrinsic
2550: 28 5f 62 79 74 65 73 77 61 70 5f 75 69 6e 74 36  (_byteswap_uint6
2560: 34 29 0a 23 20 20 20 20 20 20 70 72 61 67 6d 61  4).#      pragma
2570: 20 69 6e 74 72 69 6e 73 69 63 28 5f 52 65 61 64   intrinsic(_Read
2580: 57 72 69 74 65 42 61 72 72 69 65 72 29 0a 23 20  WriteBarrier).# 
2590: 20 20 20 65 6c 73 65 0a 23 20 20 20 20 20 20 69     else.#      i
25a0: 6e 63 6c 75 64 65 20 3c 63 6d 6e 69 6e 74 72 69  nclude <cmnintri
25b0: 6e 2e 68 3e 0a 23 20 20 20 20 65 6e 64 69 66 0a  n.h>.#    endif.
25c0: 23 20 20 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  #  endif.#endif.
25d0: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
25e0: 45 5f 54 48 52 45 41 44 53 41 46 45 20 6d 61 63  E_THREADSAFE mac
25f0: 72 6f 20 6d 75 73 74 20 62 65 20 64 65 66 69 6e  ro must be defin
2600: 65 64 20 61 73 20 30 2c 20 31 2c 20 6f 72 20 32  ed as 0, 1, or 2
2610: 2e 0a 2a 2a 20 30 20 6d 65 61 6e 73 20 6d 75 74  ..** 0 means mut
2620: 65 78 65 73 20 61 72 65 20 70 65 72 6d 61 6e 65  exes are permane
2630: 6e 74 6c 79 20 64 69 73 61 62 6c 65 20 61 6e 64  ntly disable and
2640: 20 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20   the library is 
2650: 6e 65 76 65 72 0a 2a 2a 20 74 68 72 65 61 64 73  never.** threads
2660: 61 66 65 2e 20 20 31 20 6d 65 61 6e 73 20 74 68  afe.  1 means th
2670: 65 20 6c 69 62 72 61 72 79 20 69 73 20 73 65 72  e library is ser
2680: 69 61 6c 69 7a 65 64 20 77 68 69 63 68 20 69 73  ialized which is
2690: 20 74 68 65 20 68 69 67 68 65 73 74 0a 2a 2a 20   the highest.** 
26a0: 6c 65 76 65 6c 20 6f 66 20 74 68 72 65 61 64 73  level of threads
26b0: 61 66 65 74 79 2e 20 20 32 20 6d 65 61 6e 73 20  afety.  2 means 
26c0: 74 68 65 20 6c 69 62 72 61 72 79 20 69 73 20 6d  the library is m
26d0: 75 6c 74 69 74 68 72 65 61 64 65 64 20 2d 20 6d  ultithreaded - m
26e0: 75 6c 74 69 70 6c 65 0a 2a 2a 20 74 68 72 65 61  ultiple.** threa
26f0: 64 73 20 63 61 6e 20 75 73 65 20 53 51 4c 69 74  ds can use SQLit
2700: 65 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 20  e as long as no 
2710: 74 77 6f 20 74 68 72 65 61 64 73 20 74 72 79 20  two threads try 
2720: 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 0a  to use the same.
2730: 2a 2a 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ** database conn
2740: 65 63 74 69 6f 6e 20 61 74 20 74 68 65 20 73 61  ection at the sa
2750: 6d 65 20 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a 20 4f  me time..**.** O
2760: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
2770: 20 53 51 4c 69 74 65 20 75 73 65 64 20 61 6e 20   SQLite used an 
2780: 6f 70 74 69 6f 6e 61 6c 20 54 48 52 45 41 44 53  optional THREADS
2790: 41 46 45 20 6d 61 63 72 6f 2e 0a 2a 2a 20 57 65  AFE macro..** We
27a0: 20 73 75 70 70 6f 72 74 20 74 68 61 74 20 66 6f   support that fo
27b0: 72 20 6c 65 67 61 63 79 2e 0a 2a 2a 0a 2a 2a 20  r legacy..**.** 
27c0: 54 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20 74  To ensure that t
27d0: 68 65 20 63 6f 72 72 65 63 74 20 76 61 6c 75 65  he correct value
27e0: 20 6f 66 20 22 54 48 52 45 41 44 53 41 46 45 22   of "THREADSAFE"
27f0: 20 69 73 20 72 65 70 6f 72 74 65 64 20 77 68 65   is reported whe
2800: 6e 20 71 75 65 72 79 69 6e 67 0a 2a 2a 20 66 6f  n querying.** fo
2810: 72 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  r compile-time o
2820: 70 74 69 6f 6e 73 20 61 74 20 72 75 6e 74 69 6d  ptions at runtim
2830: 65 20 28 65 2e 67 2e 20 22 50 52 41 47 4d 41 20  e (e.g. "PRAGMA 
2840: 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 22  compile_options"
2850: 29 2c 20 74 68 69 73 0a 2a 2a 20 6c 6f 67 69 63  ), this.** logic
2860: 20 69 73 20 70 61 72 74 69 61 6c 6c 79 20 72 65   is partially re
2870: 70 6c 69 63 61 74 65 64 20 69 6e 20 63 74 69 6d  plicated in ctim
2880: 65 2e 63 2e 20 49 66 20 69 74 20 69 73 20 75 70  e.c. If it is up
2890: 64 61 74 65 64 20 68 65 72 65 2c 20 69 74 20 73  dated here, it s
28a0: 68 6f 75 6c 64 0a 2a 2a 20 61 6c 73 6f 20 62 65  hould.** also be
28b0: 20 75 70 64 61 74 65 64 20 74 68 65 72 65 2e 0a   updated there..
28c0: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
28d0: 53 51 4c 49 54 45 5f 54 48 52 45 41 44 53 41 46  SQLITE_THREADSAF
28e0: 45 29 0a 23 20 69 66 20 64 65 66 69 6e 65 64 28  E).# if defined(
28f0: 54 48 52 45 41 44 53 41 46 45 29 0a 23 20 20 20  THREADSAFE).#   
2900: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48  define SQLITE_TH
2910: 52 45 41 44 53 41 46 45 20 54 48 52 45 41 44 53  READSAFE THREADS
2920: 41 46 45 0a 23 20 65 6c 73 65 0a 23 20 20 20 64  AFE.# else.#   d
2930: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 48 52  efine SQLITE_THR
2940: 45 41 44 53 41 46 45 20 31 20 2f 2a 20 49 4d 50  EADSAFE 1 /* IMP
2950: 3a 20 52 2d 30 37 32 37 32 2d 32 32 33 30 39 20  : R-07272-22309 
2960: 2a 2f 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69  */.# endif.#endi
2970: 66 0a 0a 2f 2a 0a 2a 2a 20 50 6f 77 65 72 73 61  f../*.** Powersa
2980: 66 65 20 6f 76 65 72 77 72 69 74 65 20 69 73 20  fe overwrite is 
2990: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20  on by default.  
29a0: 42 75 74 20 63 61 6e 20 62 65 20 74 75 72 6e 65  But can be turne
29b0: 64 20 6f 66 66 20 75 73 69 6e 67 0a 2a 2a 20 74  d off using.** t
29c0: 68 65 20 2d 44 53 51 4c 49 54 45 5f 50 4f 57 45  he -DSQLITE_POWE
29d0: 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45 3d  RSAFE_OVERWRITE=
29e0: 30 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 20 6f  0 command-line o
29f0: 70 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65  ption..*/.#ifnde
2a00: 66 20 53 51 4c 49 54 45 5f 50 4f 57 45 52 53 41  f SQLITE_POWERSA
2a10: 46 45 5f 4f 56 45 52 57 52 49 54 45 0a 23 20 64  FE_OVERWRITE.# d
2a20: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 4f 57  efine SQLITE_POW
2a30: 45 52 53 41 46 45 5f 4f 56 45 52 57 52 49 54 45  ERSAFE_OVERWRITE
2a40: 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a   1.#endif../*.**
2a50: 20 45 56 49 44 45 4e 43 45 2d 4f 46 3a 20 52 2d   EVIDENCE-OF: R-
2a60: 32 35 37 31 35 2d 33 37 30 37 32 20 4d 65 6d 6f  25715-37072 Memo
2a70: 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 73 74  ry allocation st
2a80: 61 74 69 73 74 69 63 73 20 61 72 65 20 65 6e 61  atistics are ena
2a90: 62 6c 65 64 20 62 79 0a 2a 2a 20 64 65 66 61 75  bled by.** defau
2aa0: 6c 74 20 75 6e 6c 65 73 73 20 53 51 4c 69 74 65  lt unless SQLite
2ab0: 20 69 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74   is compiled wit
2ac0: 68 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  h SQLITE_DEFAULT
2ad0: 5f 4d 45 4d 53 54 41 54 55 53 3d 30 20 69 6e 0a  _MEMSTATUS=0 in.
2ae0: 2a 2a 20 77 68 69 63 68 20 63 61 73 65 20 6d 65  ** which case me
2af0: 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20  mory allocation 
2b00: 73 74 61 74 69 73 74 69 63 73 20 61 72 65 20 64  statistics are d
2b10: 69 73 61 62 6c 65 64 20 62 79 20 64 65 66 61 75  isabled by defau
2b20: 6c 74 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  lt..*/.#if !defi
2b30: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 46 41 55  ned(SQLITE_DEFAU
2b40: 4c 54 5f 4d 45 4d 53 54 41 54 55 53 29 0a 23 20  LT_MEMSTATUS).# 
2b50: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45  define SQLITE_DE
2b60: 46 41 55 4c 54 5f 4d 45 4d 53 54 41 54 55 53 20  FAULT_MEMSTATUS 
2b70: 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  1.#endif../*.** 
2b80: 45 78 61 63 74 6c 79 20 6f 6e 65 20 6f 66 20 74  Exactly one of t
2b90: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63  he following mac
2ba0: 72 6f 73 20 6d 75 73 74 20 62 65 20 64 65 66 69  ros must be defi
2bb0: 6e 65 64 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a  ned in order to.
2bc0: 2a 2a 20 73 70 65 63 69 66 79 20 77 68 69 63 68  ** specify which
2bd0: 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69   memory allocati
2be0: 6f 6e 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20  on subsystem to 
2bf0: 75 73 65 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  use..**.**     S
2c00: 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41 4c  QLITE_SYSTEM_MAL
2c10: 4c 4f 43 20 20 20 20 20 20 20 20 20 20 2f 2f 20  LOC          // 
2c20: 55 73 65 20 6e 6f 72 6d 61 6c 20 73 79 73 74 65  Use normal syste
2c30: 6d 20 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 20 20 20  m malloc().**   
2c40: 20 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d    SQLITE_WIN32_M
2c50: 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20 20  ALLOC           
2c60: 2f 2f 20 55 73 65 20 57 69 6e 33 32 20 6e 61 74  // Use Win32 nat
2c70: 69 76 65 20 68 65 61 70 20 41 50 49 0a 2a 2a 20  ive heap API.** 
2c80: 20 20 20 20 53 51 4c 49 54 45 5f 5a 45 52 4f 5f      SQLITE_ZERO_
2c90: 4d 41 4c 4c 4f 43 20 20 20 20 20 20 20 20 20 20  MALLOC          
2ca0: 20 20 2f 2f 20 55 73 65 20 61 20 73 74 75 62 20    // Use a stub 
2cb0: 61 6c 6c 6f 63 61 74 6f 72 20 74 68 61 74 20 61  allocator that a
2cc0: 6c 77 61 79 73 20 66 61 69 6c 73 0a 2a 2a 20 20  lways fails.**  
2cd0: 20 20 20 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42     SQLITE_MEMDEB
2ce0: 55 47 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UG              
2cf0: 20 2f 2f 20 44 65 62 75 67 67 69 6e 67 20 76 65   // Debugging ve
2d00: 72 73 69 6f 6e 20 6f 66 20 73 79 73 74 65 6d 20  rsion of system 
2d10: 6d 61 6c 6c 6f 63 28 29 0a 2a 2a 0a 2a 2a 20 4f  malloc().**.** O
2d20: 6e 20 57 69 6e 64 6f 77 73 2c 20 69 66 20 74 68  n Windows, if th
2d30: 65 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d  e SQLITE_WIN32_M
2d40: 41 4c 4c 4f 43 5f 56 41 4c 49 44 41 54 45 20 6d  ALLOC_VALIDATE m
2d50: 61 63 72 6f 20 69 73 20 64 65 66 69 6e 65 64 20  acro is defined 
2d60: 61 6e 64 20 74 68 65 0a 2a 2a 20 61 73 73 65 72  and the.** asser
2d70: 74 28 29 20 6d 61 63 72 6f 20 69 73 20 65 6e 61  t() macro is ena
2d80: 62 6c 65 64 2c 20 65 61 63 68 20 63 61 6c 6c 20  bled, each call 
2d90: 69 6e 74 6f 20 74 68 65 20 57 69 6e 33 32 20 6e  into the Win32 n
2da0: 61 74 69 76 65 20 68 65 61 70 20 73 75 62 73 79  ative heap subsy
2db0: 73 74 65 6d 0a 2a 2a 20 77 69 6c 6c 20 63 61 75  stem.** will cau
2dc0: 73 65 20 48 65 61 70 56 61 6c 69 64 61 74 65 20  se HeapValidate 
2dd0: 74 6f 20 62 65 20 63 61 6c 6c 65 64 2e 20 20 49  to be called.  I
2de0: 66 20 68 65 61 70 20 76 61 6c 69 64 61 74 69 6f  f heap validatio
2df0: 6e 20 73 68 6f 75 6c 64 20 66 61 69 6c 2c 20 61  n should fail, a
2e00: 6e 0a 2a 2a 20 61 73 73 65 72 74 69 6f 6e 20 77  n.** assertion w
2e10: 69 6c 6c 20 62 65 20 74 72 69 67 67 65 72 65 64  ill be triggered
2e20: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 6e 6f 6e 65 20  ..**.** If none 
2e30: 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61 72 65  of the above are
2e40: 20 64 65 66 69 6e 65 64 2c 20 74 68 65 6e 20 73   defined, then s
2e50: 65 74 20 53 51 4c 49 54 45 5f 53 59 53 54 45 4d  et SQLITE_SYSTEM
2e60: 5f 4d 41 4c 4c 4f 43 20 61 73 0a 2a 2a 20 74 68  _MALLOC as.** th
2e70: 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f 0a 23 69  e default..*/.#i
2e80: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2e90: 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 29 20  _SYSTEM_MALLOC) 
2ea0: 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64 28 53 51  \.  + defined(SQ
2eb0: 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41 4c 4c 4f  LITE_WIN32_MALLO
2ec0: 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e 65 64  C) \.  + defined
2ed0: 28 53 51 4c 49 54 45 5f 5a 45 52 4f 5f 4d 41 4c  (SQLITE_ZERO_MAL
2ee0: 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69 6e  LOC) \.  + defin
2ef0: 65 64 28 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42  ed(SQLITE_MEMDEB
2f00: 55 47 29 3e 31 0a 23 20 65 72 72 6f 72 20 22 54  UG)>1.# error "T
2f10: 77 6f 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  wo or more of th
2f20: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6d 70  e following comp
2f30: 69 6c 65 2d 74 69 6d 65 20 63 6f 6e 66 69 67 75  ile-time configu
2f40: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 5c 0a  ration options\.
2f50: 20 61 72 65 20 64 65 66 69 6e 65 64 20 62 75 74   are defined but
2f60: 20 61 74 20 6d 6f 73 74 20 6f 6e 65 20 69 73 20   at most one is 
2f70: 61 6c 6c 6f 77 65 64 3a 5c 0a 20 53 51 4c 49 54  allowed:\. SQLIT
2f80: 45 5f 53 59 53 54 45 4d 5f 4d 41 4c 4c 4f 43 2c  E_SYSTEM_MALLOC,
2f90: 20 53 51 4c 49 54 45 5f 57 49 4e 33 32 5f 4d 41   SQLITE_WIN32_MA
2fa0: 4c 4c 4f 43 2c 20 53 51 4c 49 54 45 5f 4d 45 4d  LLOC, SQLITE_MEM
2fb0: 44 45 42 55 47 2c 5c 0a 20 53 51 4c 49 54 45 5f  DEBUG,\. SQLITE_
2fc0: 5a 45 52 4f 5f 4d 41 4c 4c 4f 43 22 0a 23 65 6e  ZERO_MALLOC".#en
2fd0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2fe0: 53 51 4c 49 54 45 5f 53 59 53 54 45 4d 5f 4d 41  SQLITE_SYSTEM_MA
2ff0: 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64 65 66 69  LLOC) \.  + defi
3000: 6e 65 64 28 53 51 4c 49 54 45 5f 57 49 4e 33 32  ned(SQLITE_WIN32
3010: 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b 20 64  _MALLOC) \.  + d
3020: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 5a 45  efined(SQLITE_ZE
3030: 52 4f 5f 4d 41 4c 4c 4f 43 29 20 5c 0a 20 20 2b  RO_MALLOC) \.  +
3040: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3050: 4d 45 4d 44 45 42 55 47 29 3d 3d 30 0a 23 20 64  MEMDEBUG)==0.# d
3060: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 59 53  efine SQLITE_SYS
3070: 54 45 4d 5f 4d 41 4c 4c 4f 43 20 31 0a 23 65 6e  TEM_MALLOC 1.#en
3080: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 53 51  dif../*.** If SQ
3090: 4c 49 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54  LITE_MALLOC_SOFT
30a0: 5f 4c 49 4d 49 54 20 69 73 20 6e 6f 74 20 7a 65  _LIMIT is not ze
30b0: 72 6f 2c 20 74 68 65 6e 20 74 72 79 20 74 6f 20  ro, then try to 
30c0: 6b 65 65 70 20 74 68 65 0a 2a 2a 20 73 69 7a 65  keep the.** size
30d0: 73 20 6f 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  s of memory allo
30e0: 63 61 74 69 6f 6e 73 20 62 65 6c 6f 77 20 74 68  cations below th
30f0: 69 73 20 76 61 6c 75 65 20 77 68 65 72 65 20 70  is value where p
3100: 6f 73 73 69 62 6c 65 2e 0a 2a 2f 0a 23 69 66 20  ossible..*/.#if 
3110: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3120: 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c 49 4d 49  MALLOC_SOFT_LIMI
3130: 54 29 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  T).# define SQLI
3140: 54 45 5f 4d 41 4c 4c 4f 43 5f 53 4f 46 54 5f 4c  TE_MALLOC_SOFT_L
3150: 49 4d 49 54 20 31 30 32 34 0a 23 65 6e 64 69 66  IMIT 1024.#endif
3160: 0a 0a 2f 2a 0a 2a 2a 20 57 65 20 6e 65 65 64 20  ../*.** We need 
3170: 74 6f 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  to define _XOPEN
3180: 5f 53 4f 55 52 43 45 20 61 73 20 66 6f 6c 6c 6f  _SOURCE as follo
3190: 77 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65  ws in order to e
31a0: 6e 61 62 6c 65 0a 2a 2a 20 72 65 63 75 72 73 69  nable.** recursi
31b0: 76 65 20 6d 75 74 65 78 65 73 20 6f 6e 20 6d 6f  ve mutexes on mo
31c0: 73 74 20 55 6e 69 78 20 73 79 73 74 65 6d 73 20  st Unix systems 
31d0: 61 6e 64 20 66 63 68 6d 6f 64 28 29 20 6f 6e 20  and fchmod() on 
31e0: 4f 70 65 6e 42 53 44 2e 0a 2a 2a 20 42 75 74 20  OpenBSD..** But 
31f0: 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 20 64 65  _XOPEN_SOURCE de
3200: 66 69 6e 65 20 63 61 75 73 65 73 20 70 72 6f 62  fine causes prob
3210: 6c 65 6d 73 20 66 6f 72 20 4d 61 63 20 4f 53 20  lems for Mac OS 
3220: 58 2c 20 73 6f 20 6f 6d 69 74 0a 2a 2a 20 69 74  X, so omit.** it
3230: 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65  ..*/.#if !define
3240: 64 28 5f 58 4f 50 45 4e 5f 53 4f 55 52 43 45 29  d(_XOPEN_SOURCE)
3250: 20 26 26 20 21 64 65 66 69 6e 65 64 28 5f 5f 44   && !defined(__D
3260: 41 52 57 49 4e 5f 5f 29 20 26 26 20 21 64 65 66  ARWIN__) && !def
3270: 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 0a  ined(__APPLE__).
3280: 23 20 20 64 65 66 69 6e 65 20 5f 58 4f 50 45 4e  #  define _XOPEN
3290: 5f 53 4f 55 52 43 45 20 36 30 30 0a 23 65 6e 64  _SOURCE 600.#end
32a0: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4e 44 45 42 55 47  if../*.** NDEBUG
32b0: 20 61 6e 64 20 53 51 4c 49 54 45 5f 44 45 42 55   and SQLITE_DEBU
32c0: 47 20 61 72 65 20 6f 70 70 6f 73 69 74 65 73 2e  G are opposites.
32d0: 20 20 49 74 20 73 68 6f 75 6c 64 20 61 6c 77 61    It should alwa
32e0: 79 73 20 62 65 20 74 72 75 65 20 74 68 61 74 0a  ys be true that.
32f0: 2a 2a 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  ** defined(NDEBU
3300: 47 29 3d 3d 21 64 65 66 69 6e 65 64 28 53 51 4c  G)==!defined(SQL
3310: 49 54 45 5f 44 45 42 55 47 29 2e 20 20 49 66 20  ITE_DEBUG).  If 
3320: 74 68 69 73 20 69 73 20 6e 6f 74 20 63 75 72 72  this is not curr
3330: 65 6e 74 6c 79 20 74 72 75 65 2c 0a 2a 2a 20 6d  ently true,.** m
3340: 61 6b 65 20 69 74 20 74 72 75 65 20 62 79 20 64  ake it true by d
3350: 65 66 69 6e 69 6e 67 20 6f 72 20 75 6e 64 65 66  efining or undef
3360: 69 6e 69 6e 67 20 4e 44 45 42 55 47 2e 0a 2a 2a  ining NDEBUG..**
3370: 0a 2a 2a 20 53 65 74 74 69 6e 67 20 4e 44 45 42  .** Setting NDEB
3380: 55 47 20 6d 61 6b 65 73 20 74 68 65 20 63 6f 64  UG makes the cod
3390: 65 20 73 6d 61 6c 6c 65 72 20 61 6e 64 20 66 61  e smaller and fa
33a0: 73 74 65 72 20 62 79 20 64 69 73 61 62 6c 69 6e  ster by disablin
33b0: 67 20 74 68 65 0a 2a 2a 20 61 73 73 65 72 74 28  g the.** assert(
33c0: 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e 20  ) statements in 
33d0: 74 68 65 20 63 6f 64 65 2e 20 20 53 6f 20 77 65  the code.  So we
33e0: 20 77 61 6e 74 20 74 68 65 20 64 65 66 61 75 6c   want the defaul
33f0: 74 20 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  t action.** to b
3400: 65 20 66 6f 72 20 4e 44 45 42 55 47 20 74 6f 20  e for NDEBUG to 
3410: 62 65 20 73 65 74 20 61 6e 64 20 4e 44 45 42 55  be set and NDEBU
3420: 47 20 74 6f 20 62 65 20 75 6e 64 65 66 69 6e 65  G to be undefine
3430: 64 20 6f 6e 6c 79 20 69 66 20 53 51 4c 49 54 45  d only if SQLITE
3440: 5f 44 45 42 55 47 0a 2a 2a 20 69 73 20 73 65 74  _DEBUG.** is set
3450: 2e 20 20 54 68 75 73 20 4e 44 45 42 55 47 20 62  .  Thus NDEBUG b
3460: 65 63 6f 6d 65 73 20 61 6e 20 6f 70 74 2d 69 6e  ecomes an opt-in
3470: 20 72 61 74 68 65 72 20 74 68 61 6e 20 61 6e 20   rather than an 
3480: 6f 70 74 2d 6f 75 74 0a 2a 2a 20 66 65 61 74 75  opt-out.** featu
3490: 72 65 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  re..*/.#if !defi
34a0: 6e 65 64 28 4e 44 45 42 55 47 29 20 26 26 20 21  ned(NDEBUG) && !
34b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
34c0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 4e  EBUG).# define N
34d0: 44 45 42 55 47 20 31 0a 23 65 6e 64 69 66 0a 23  DEBUG 1.#endif.#
34e0: 69 66 20 64 65 66 69 6e 65 64 28 4e 44 45 42 55  if defined(NDEBU
34f0: 47 29 20 26 26 20 64 65 66 69 6e 65 64 28 53 51  G) && defined(SQ
3500: 4c 49 54 45 5f 44 45 42 55 47 29 0a 23 20 75 6e  LITE_DEBUG).# un
3510: 64 65 66 20 4e 44 45 42 55 47 0a 23 65 6e 64 69  def NDEBUG.#endi
3520: 66 0a 0a 2f 2a 0a 2a 2a 20 45 6e 61 62 6c 65 20  f../*.** Enable 
3530: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58  SQLITE_ENABLE_EX
3540: 50 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 69  PLAIN_COMMENTS i
3550: 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 69  f SQLITE_DEBUG i
3560: 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f 0a  s turned on..*/.
3570: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3580: 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41  ITE_ENABLE_EXPLA
3590: 49 4e 5f 43 4f 4d 4d 45 4e 54 53 29 20 26 26 20  IN_COMMENTS) && 
35a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
35b0: 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20 53  EBUG).# define S
35c0: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 45 58 50  QLITE_ENABLE_EXP
35d0: 4c 41 49 4e 5f 43 4f 4d 4d 45 4e 54 53 20 31 0a  LAIN_COMMENTS 1.
35e0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
35f0: 65 20 74 65 73 74 63 61 73 65 28 29 20 6d 61 63  e testcase() mac
3600: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 61 69  ro is used to ai
3610: 64 20 69 6e 20 63 6f 76 65 72 61 67 65 20 74 65  d in coverage te
3620: 73 74 69 6e 67 2e 20 20 57 68 65 6e 0a 2a 2a 20  sting.  When.** 
3630: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3640: 65 73 74 69 6e 67 2c 20 74 68 65 20 63 6f 6e 64  esting, the cond
3650: 69 74 69 6f 6e 20 69 6e 73 69 64 65 20 74 68 65  ition inside the
3660: 20 61 72 67 75 6d 65 6e 74 20 74 6f 0a 2a 2a 20   argument to.** 
3670: 74 65 73 74 63 61 73 65 28 29 20 6d 75 73 74 20  testcase() must 
3680: 62 65 20 65 76 61 6c 75 61 74 65 64 20 62 6f 74  be evaluated bot
3690: 68 20 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65  h true and false
36a0: 20 69 6e 20 6f 72 64 65 72 20 74 6f 0a 2a 2a 20   in order to.** 
36b0: 67 65 74 20 66 75 6c 6c 20 62 72 61 6e 63 68 20  get full branch 
36c0: 63 6f 76 65 72 61 67 65 2e 20 20 54 68 65 20 74  coverage.  The t
36d0: 65 73 74 63 61 73 65 28 29 20 6d 61 63 72 6f 20  estcase() macro 
36e0: 69 73 20 69 6e 73 65 72 74 65 64 0a 2a 2a 20 74  is inserted.** t
36f0: 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 61 64  o help ensure ad
3700: 65 71 75 61 74 65 20 74 65 73 74 20 63 6f 76 65  equate test cove
3710: 72 61 67 65 20 69 6e 20 70 6c 61 63 65 73 20 77  rage in places w
3720: 68 65 72 65 20 73 69 6d 70 6c 65 0a 2a 2a 20 63  here simple.** c
3730: 6f 6e 64 69 74 69 6f 6e 2f 64 65 63 69 73 69 6f  ondition/decisio
3740: 6e 20 63 6f 76 65 72 61 67 65 20 69 73 20 69 6e  n coverage is in
3750: 61 64 65 71 75 61 74 65 2e 20 20 46 6f 72 20 65  adequate.  For e
3760: 78 61 6d 70 6c 65 2c 20 74 65 73 74 63 61 73 65  xample, testcase
3770: 28 29 0a 2a 2a 20 63 61 6e 20 62 65 20 75 73 65  ().** can be use
3780: 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 62  d to make sure b
3790: 6f 75 6e 64 61 72 79 20 76 61 6c 75 65 73 20 61  oundary values a
37a0: 72 65 20 74 65 73 74 65 64 2e 20 20 46 6f 72 0a  re tested.  For.
37b0: 2a 2a 20 62 69 74 6d 61 73 6b 20 74 65 73 74 73  ** bitmask tests
37c0: 2c 20 74 65 73 74 63 61 73 65 28 29 20 63 61 6e  , testcase() can
37d0: 20 62 65 20 75 73 65 64 20 74 6f 20 6d 61 6b 65   be used to make
37e0: 20 73 75 72 65 20 65 61 63 68 20 62 69 74 0a 2a   sure each bit.*
37f0: 2a 20 69 73 20 73 69 67 6e 69 66 69 63 61 6e 74  * is significant
3800: 20 61 6e 64 20 75 73 65 64 20 61 74 20 6c 65 61   and used at lea
3810: 73 74 20 6f 6e 63 65 2e 20 20 4f 6e 20 73 77 69  st once.  On swi
3820: 74 63 68 20 73 74 61 74 65 6d 65 6e 74 73 0a 2a  tch statements.*
3830: 2a 20 77 68 65 72 65 20 6d 75 6c 74 69 70 6c 65  * where multiple
3840: 20 63 61 73 65 73 20 67 6f 20 74 6f 20 74 68 65   cases go to the
3850: 20 73 61 6d 65 20 62 6c 6f 63 6b 20 6f 66 20 63   same block of c
3860: 6f 64 65 2c 20 74 65 73 74 63 61 73 65 28 29 0a  ode, testcase().
3870: 2a 2a 20 63 61 6e 20 69 6e 73 75 72 65 20 74 68  ** can insure th
3880: 61 74 20 61 6c 6c 20 63 61 73 65 73 20 61 72 65  at all cases are
3890: 20 65 76 61 6c 75 61 74 65 64 2e 0a 2a 2a 0a 2a   evaluated..**.*
38a0: 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
38b0: 43 4f 56 45 52 41 47 45 5f 54 45 53 54 0a 20 20  COVERAGE_TEST.  
38c0: 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 76 65  void sqlite3Cove
38d0: 72 61 67 65 28 69 6e 74 29 3b 0a 23 20 64 65 66  rage(int);.# def
38e0: 69 6e 65 20 74 65 73 74 63 61 73 65 28 58 29 20  ine testcase(X) 
38f0: 20 69 66 28 20 58 20 29 7b 20 73 71 6c 69 74 65   if( X ){ sqlite
3900: 33 43 6f 76 65 72 61 67 65 28 5f 5f 4c 49 4e 45  3Coverage(__LINE
3910: 5f 5f 29 3b 20 7d 0a 23 65 6c 73 65 0a 23 20 64  __); }.#else.# d
3920: 65 66 69 6e 65 20 74 65 73 74 63 61 73 65 28 58  efine testcase(X
3930: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3940: 54 68 65 20 54 45 53 54 4f 4e 4c 59 20 6d 61 63  The TESTONLY mac
3950: 72 6f 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e  ro is used to en
3960: 63 6c 6f 73 65 20 76 61 72 69 61 62 6c 65 20 64  close variable d
3970: 65 63 6c 61 72 61 74 69 6f 6e 73 20 6f 72 0a 2a  eclarations or.*
3980: 2a 20 6f 74 68 65 72 20 62 69 74 73 20 6f 66 20  * other bits of 
3990: 63 6f 64 65 20 74 68 61 74 20 61 72 65 20 6e 65  code that are ne
39a0: 65 64 65 64 20 74 6f 20 73 75 70 70 6f 72 74 20  eded to support 
39b0: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 0a 2a 2a  the arguments.**
39c0: 20 77 69 74 68 69 6e 20 74 65 73 74 63 61 73 65   within testcase
39d0: 28 29 20 61 6e 64 20 61 73 73 65 72 74 28 29 20  () and assert() 
39e0: 6d 61 63 72 6f 73 2e 0a 2a 2f 0a 23 69 66 20 21  macros..*/.#if !
39f0: 64 65 66 69 6e 65 64 28 4e 44 45 42 55 47 29 20  defined(NDEBUG) 
3a00: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
3a10: 45 5f 43 4f 56 45 52 41 47 45 5f 54 45 53 54 29  E_COVERAGE_TEST)
3a20: 0a 23 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e  .# define TESTON
3a30: 4c 59 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23  LY(X)  X.#else.#
3a40: 20 64 65 66 69 6e 65 20 54 45 53 54 4f 4e 4c 59   define TESTONLY
3a50: 28 58 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  (X).#endif../*.*
3a60: 2a 20 53 6f 6d 65 74 69 6d 65 73 20 77 65 20 6e  * Sometimes we n
3a70: 65 65 64 20 61 20 73 6d 61 6c 6c 20 61 6d 6f 75  eed a small amou
3a80: 6e 74 20 6f 66 20 63 6f 64 65 20 73 75 63 68 20  nt of code such 
3a90: 61 73 20 61 20 76 61 72 69 61 62 6c 65 20 69 6e  as a variable in
3aa0: 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a 2a 2a 20  itialization.** 
3ab0: 74 6f 20 73 65 74 75 70 20 66 6f 72 20 61 20 6c  to setup for a l
3ac0: 61 74 65 72 20 61 73 73 65 72 74 28 29 20 73 74  ater assert() st
3ad0: 61 74 65 6d 65 6e 74 2e 20 20 57 65 20 64 6f 20  atement.  We do 
3ae0: 6e 6f 74 20 77 61 6e 74 20 74 68 69 73 20 63 6f  not want this co
3af0: 64 65 20 74 6f 0a 2a 2a 20 61 70 70 65 61 72 20  de to.** appear 
3b00: 77 68 65 6e 20 61 73 73 65 72 74 28 29 20 69 73  when assert() is
3b10: 20 64 69 73 61 62 6c 65 64 2e 20 20 54 68 65 20   disabled.  The 
3b20: 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 20  following macro 
3b30: 69 73 20 74 68 65 72 65 66 6f 72 65 0a 2a 2a 20  is therefore.** 
3b40: 75 73 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  used to contain 
3b50: 74 68 61 74 20 73 65 74 75 70 20 63 6f 64 65 2e  that setup code.
3b60: 20 20 54 68 65 20 22 56 56 41 22 20 61 63 72 6f    The "VVA" acro
3b70: 6e 79 6d 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a  nym stands for.*
3b80: 2a 20 22 56 65 72 69 66 69 63 61 74 69 6f 6e 2c  * "Verification,
3b90: 20 56 61 6c 69 64 61 74 69 6f 6e 2c 20 61 6e 64   Validation, and
3ba0: 20 41 63 63 72 65 64 69 74 61 74 69 6f 6e 22 2e   Accreditation".
3bb0: 20 20 49 6e 20 6f 74 68 65 72 20 77 6f 72 64 73    In other words
3bc0: 2c 20 74 68 65 0a 2a 2a 20 63 6f 64 65 20 77 69  , the.** code wi
3bd0: 74 68 69 6e 20 56 56 41 5f 4f 4e 4c 59 28 29 20  thin VVA_ONLY() 
3be0: 77 69 6c 6c 20 6f 6e 6c 79 20 72 75 6e 20 64 75  will only run du
3bf0: 72 69 6e 67 20 76 65 72 69 66 69 63 61 74 69 6f  ring verificatio
3c00: 6e 20 70 72 6f 63 65 73 73 65 73 2e 0a 2a 2f 0a  n processes..*/.
3c10: 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 23  #ifndef NDEBUG.#
3c20: 20 64 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59   define VVA_ONLY
3c30: 28 58 29 20 20 58 0a 23 65 6c 73 65 0a 23 20 64  (X)  X.#else.# d
3c40: 65 66 69 6e 65 20 56 56 41 5f 4f 4e 4c 59 28 58  efine VVA_ONLY(X
3c50: 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
3c60: 54 68 65 20 41 4c 57 41 59 53 20 61 6e 64 20 4e  The ALWAYS and N
3c70: 45 56 45 52 20 6d 61 63 72 6f 73 20 73 75 72 72  EVER macros surr
3c80: 6f 75 6e 64 20 62 6f 6f 6c 65 61 6e 20 65 78 70  ound boolean exp
3c90: 72 65 73 73 69 6f 6e 73 20 77 68 69 63 68 0a 2a  ressions which.*
3ca0: 2a 20 61 72 65 20 69 6e 74 65 6e 64 65 64 20 74  * are intended t
3cb0: 6f 20 61 6c 77 61 79 73 20 62 65 20 74 72 75 65  o always be true
3cc0: 20 6f 72 20 66 61 6c 73 65 2c 20 72 65 73 70 65   or false, respe
3cd0: 63 74 69 76 65 6c 79 2e 20 20 53 75 63 68 0a 2a  ctively.  Such.*
3ce0: 2a 20 65 78 70 72 65 73 73 69 6f 6e 73 20 63 6f  * expressions co
3cf0: 75 6c 64 20 62 65 20 6f 6d 69 74 74 65 64 20 66  uld be omitted f
3d00: 72 6f 6d 20 74 68 65 20 63 6f 64 65 20 63 6f 6d  rom the code com
3d10: 70 6c 65 74 65 6c 79 2e 20 20 42 75 74 20 74 68  pletely.  But th
3d20: 65 79 0a 2a 2a 20 61 72 65 20 69 6e 63 6c 75 64  ey.** are includ
3d30: 65 64 20 69 6e 20 61 20 66 65 77 20 63 61 73 65  ed in a few case
3d40: 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 65 6e  s in order to en
3d50: 68 61 6e 63 65 20 74 68 65 20 72 65 73 69 6c 69  hance the resili
3d60: 65 6e 63 65 0a 2a 2a 20 6f 66 20 53 51 4c 69 74  ence.** of SQLit
3d70: 65 20 74 6f 20 75 6e 65 78 70 65 63 74 65 64 20  e to unexpected 
3d80: 62 65 68 61 76 69 6f 72 20 2d 20 74 6f 20 6d 61  behavior - to ma
3d90: 6b 65 20 74 68 65 20 63 6f 64 65 20 22 73 65 6c  ke the code "sel
3da0: 66 2d 68 65 61 6c 69 6e 67 22 0a 2a 2a 20 6f 72  f-healing".** or
3db0: 20 22 64 75 63 74 69 6c 65 22 20 72 61 74 68 65   "ductile" rathe
3dc0: 72 20 74 68 61 6e 20 62 65 69 6e 67 20 22 62 72  r than being "br
3dd0: 69 74 74 6c 65 22 20 61 6e 64 20 63 72 61 73 68  ittle" and crash
3de0: 69 6e 67 20 61 74 20 74 68 65 20 66 69 72 73 74  ing at the first
3df0: 0a 2a 2a 20 68 69 6e 74 20 6f 66 20 75 6e 70 6c  .** hint of unpl
3e00: 61 6e 6e 65 64 20 62 65 68 61 76 69 6f 72 2e 0a  anned behavior..
3e10: 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  **.** In other w
3e20: 6f 72 64 73 2c 20 41 4c 57 41 59 53 20 61 6e 64  ords, ALWAYS and
3e30: 20 4e 45 56 45 52 20 61 72 65 20 61 64 64 65 64   NEVER are added
3e40: 20 66 6f 72 20 64 65 66 65 6e 73 69 76 65 20 63   for defensive c
3e50: 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 57 68 65 6e 20  ode..**.** When 
3e60: 64 6f 69 6e 67 20 63 6f 76 65 72 61 67 65 20 74  doing coverage t
3e70: 65 73 74 69 6e 67 20 41 4c 57 41 59 53 20 61 6e  esting ALWAYS an
3e80: 64 20 4e 45 56 45 52 20 61 72 65 20 68 61 72 64  d NEVER are hard
3e90: 2d 63 6f 64 65 64 20 74 6f 0a 2a 2a 20 62 65 20  -coded to.** be 
3ea0: 74 72 75 65 20 61 6e 64 20 66 61 6c 73 65 20 73  true and false s
3eb0: 6f 20 74 68 61 74 20 74 68 65 20 75 6e 72 65 61  o that the unrea
3ec0: 63 68 61 62 6c 65 20 63 6f 64 65 20 74 68 65 79  chable code they
3ed0: 20 73 70 65 63 69 66 79 20 77 69 6c 6c 0a 2a 2a   specify will.**
3ee0: 20 6e 6f 74 20 62 65 20 63 6f 75 6e 74 65 64 20   not be counted 
3ef0: 61 73 20 75 6e 74 65 73 74 65 64 20 63 6f 64 65  as untested code
3f00: 2e 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  ..*/.#if defined
3f10: 28 53 51 4c 49 54 45 5f 43 4f 56 45 52 41 47 45  (SQLITE_COVERAGE
3f20: 5f 54 45 53 54 29 20 7c 7c 20 64 65 66 69 6e 65  _TEST) || define
3f30: 64 28 53 51 4c 49 54 45 5f 4d 55 54 41 54 49 4f  d(SQLITE_MUTATIO
3f40: 4e 5f 54 45 53 54 29 0a 23 20 64 65 66 69 6e 65  N_TEST).# define
3f50: 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20   ALWAYS(X)      
3f60: 28 31 29 0a 23 20 64 65 66 69 6e 65 20 4e 45 56  (1).# define NEV
3f70: 45 52 28 58 29 20 20 20 20 20 20 20 28 30 29 0a  ER(X)       (0).
3f80: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
3f90: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
3fa0: 41 4c 57 41 59 53 28 58 29 20 20 20 20 20 20 28  ALWAYS(X)      (
3fb0: 28 58 29 3f 31 3a 28 61 73 73 65 72 74 28 30 29  (X)?1:(assert(0)
3fc0: 2c 30 29 29 0a 23 20 64 65 66 69 6e 65 20 4e 45  ,0)).# define NE
3fd0: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 28 58  VER(X)       ((X
3fe0: 29 3f 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a  )?(assert(0),1):
3ff0: 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  0).#else.# defin
4000: 65 20 41 4c 57 41 59 53 28 58 29 20 20 20 20 20  e ALWAYS(X)     
4010: 20 28 58 29 0a 23 20 64 65 66 69 6e 65 20 4e 45   (X).# define NE
4020: 56 45 52 28 58 29 20 20 20 20 20 20 20 28 58 29  VER(X)       (X)
4030: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53  .#endif../*.** S
4040: 6f 6d 65 20 6d 61 6c 6c 6f 63 20 66 61 69 6c 75  ome malloc failu
4050: 72 65 73 20 61 72 65 20 6f 6e 6c 79 20 70 6f 73  res are only pos
4060: 73 69 62 6c 65 20 69 66 20 53 51 4c 49 54 45 5f  sible if SQLITE_
4070: 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54 52  TEST_REALLOC_STR
4080: 45 53 53 20 69 73 0a 2a 2a 20 64 65 66 69 6e 65  ESS is.** define
4090: 64 2e 20 20 57 65 20 6e 65 65 64 20 74 6f 20 64  d.  We need to d
40a0: 65 66 65 6e 64 20 61 67 61 69 6e 73 74 20 74 68  efend against th
40b0: 6f 73 65 20 66 61 69 6c 75 72 65 73 20 77 68 65  ose failures whe
40c0: 6e 20 74 65 73 74 69 6e 67 20 77 69 74 68 0a 2a  n testing with.*
40d0: 2a 20 53 51 4c 49 54 45 5f 54 45 53 54 5f 52 45  * SQLITE_TEST_RE
40e0: 41 4c 4c 4f 43 5f 53 54 52 45 53 53 2c 20 62 75  ALLOC_STRESS, bu
40f0: 74 20 77 65 20 64 6f 6e 27 74 20 77 61 6e 74 20  t we don't want 
4100: 74 68 65 20 75 6e 72 65 61 63 68 61 62 6c 65 20  the unreachable 
4110: 62 72 61 6e 63 68 65 73 0a 2a 2a 20 64 75 72 69  branches.** duri
4120: 6e 67 20 61 20 6e 6f 72 6d 61 6c 20 62 75 69 6c  ng a normal buil
4130: 64 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  d.  The followin
4140: 67 20 6d 61 63 72 6f 20 63 61 6e 20 62 65 20 75  g macro can be u
4150: 73 65 64 20 74 6f 20 64 69 73 61 62 6c 65 20 74  sed to disable t
4160: 65 73 74 73 0a 2a 2a 20 74 68 61 74 20 61 72 65  ests.** that are
4170: 20 61 6c 77 61 79 73 20 66 61 6c 73 65 20 65 78   always false ex
4180: 63 65 70 74 20 77 68 65 6e 20 53 51 4c 49 54 45  cept when SQLITE
4190: 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f 53 54  _TEST_REALLOC_ST
41a0: 52 45 53 53 20 69 73 20 73 65 74 2e 0a 2a 2f 0a  RESS is set..*/.
41b0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
41c0: 54 45 5f 54 45 53 54 5f 52 45 41 4c 4c 4f 43 5f  TE_TEST_REALLOC_
41d0: 53 54 52 45 53 53 29 0a 23 20 64 65 66 69 6e 65  STRESS).# define
41e0: 20 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43   ONLY_IF_REALLOC
41f0: 5f 53 54 52 45 53 53 28 58 29 20 20 28 58 29 0a  _STRESS(X)  (X).
4200: 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28 4e  #elif !defined(N
4210: 44 45 42 55 47 29 0a 23 20 64 65 66 69 6e 65 20  DEBUG).# define 
4220: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4230: 53 54 52 45 53 53 28 58 29 20 20 28 28 58 29 3f  STRESS(X)  ((X)?
4240: 28 61 73 73 65 72 74 28 30 29 2c 31 29 3a 30 29  (assert(0),1):0)
4250: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
4260: 4f 4e 4c 59 5f 49 46 5f 52 45 41 4c 4c 4f 43 5f  ONLY_IF_REALLOC_
4270: 53 54 52 45 53 53 28 58 29 20 20 28 30 29 0a 23  STRESS(X)  (0).#
4280: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 63  endif../*.** Dec
4290: 6c 61 72 61 74 69 6f 6e 73 20 75 73 65 64 20 66  larations used f
42a0: 6f 72 20 74 72 61 63 69 6e 67 20 74 68 65 20 6f  or tracing the o
42b0: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 20  perating system 
42c0: 69 6e 74 65 72 66 61 63 65 73 2e 0a 2a 2f 0a 23  interfaces..*/.#
42d0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
42e0: 45 5f 46 4f 52 43 45 5f 4f 53 5f 54 52 41 43 45  E_FORCE_OS_TRACE
42f0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
4300: 49 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20  ITE_TEST) || \. 
4310: 20 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49     (defined(SQLI
4320: 54 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c  TE_DEBUG) && SQL
4330: 49 54 45 5f 4f 53 5f 57 49 4e 29 0a 20 20 65 78  ITE_OS_WIN).  ex
4340: 74 65 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33  tern int sqlite3
4350: 4f 53 54 72 61 63 65 3b 0a 23 20 64 65 66 69 6e  OSTrace;.# defin
4360: 65 20 4f 53 54 52 41 43 45 28 58 29 20 20 20 20  e OSTRACE(X)    
4370: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
4380: 33 4f 53 54 72 61 63 65 20 29 20 73 71 6c 69 74  3OSTrace ) sqlit
4390: 65 33 44 65 62 75 67 50 72 69 6e 74 66 20 58 0a  e3DebugPrintf X.
43a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
43b0: 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 0a 23 65  HAVE_OS_TRACE.#e
43c0: 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 4f 53 54  lse.# define OST
43d0: 52 41 43 45 28 58 29 0a 23 20 75 6e 64 65 66 20  RACE(X).# undef 
43e0: 20 53 51 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f   SQLITE_HAVE_OS_
43f0: 54 52 41 43 45 0a 23 65 6e 64 69 66 0a 0a 2f 2a  TRACE.#endif../*
4400: 0a 2a 2a 20 49 73 20 74 68 65 20 73 71 6c 69 74  .** Is the sqlit
4410: 65 33 45 72 72 4e 61 6d 65 28 29 20 66 75 6e 63  e3ErrName() func
4420: 74 69 6f 6e 20 6e 65 65 64 65 64 20 69 6e 20 74  tion needed in t
4430: 68 65 20 62 75 69 6c 64 3f 20 20 43 75 72 72 65  he build?  Curre
4440: 6e 74 6c 79 2c 0a 2a 2a 20 69 74 20 69 73 20 6e  ntly,.** it is n
4450: 65 65 64 65 64 20 62 79 20 22 6d 75 74 65 78 5f  eeded by "mutex_
4460: 77 33 32 2e 63 22 20 28 77 68 65 6e 20 64 65 62  w32.c" (when deb
4470: 75 67 67 69 6e 67 29 2c 20 22 6f 73 5f 77 69 6e  ugging), "os_win
4480: 2e 63 22 20 28 77 68 65 6e 0a 2a 2a 20 4f 53 54  .c" (when.** OST
4490: 52 41 43 45 20 69 73 20 65 6e 61 62 6c 65 64 29  RACE is enabled)
44a0: 2c 20 61 6e 64 20 62 79 20 73 65 76 65 72 61 6c  , and by several
44b0: 20 22 74 65 73 74 2a 2e 63 22 20 66 69 6c 65 73   "test*.c" files
44c0: 20 28 77 68 69 63 68 20 61 72 65 0a 2a 2a 20 63   (which are.** c
44d0: 6f 6d 70 69 6c 65 64 20 75 73 69 6e 67 20 53 51  ompiled using SQ
44e0: 4c 49 54 45 5f 54 45 53 54 29 2e 0a 2a 2f 0a 23  LITE_TEST)..*/.#
44f0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
4500: 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41 43 45 29  E_HAVE_OS_TRACE)
4510: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
4520: 54 45 5f 54 45 53 54 29 20 7c 7c 20 5c 0a 20 20  TE_TEST) || \.  
4530: 20 20 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54    (defined(SQLIT
4540: 45 5f 44 45 42 55 47 29 20 26 26 20 53 51 4c 49  E_DEBUG) && SQLI
4550: 54 45 5f 4f 53 5f 57 49 4e 29 0a 23 20 64 65 66  TE_OS_WIN).# def
4560: 69 6e 65 20 53 51 4c 49 54 45 5f 4e 45 45 44 5f  ine SQLITE_NEED_
4570: 45 52 52 5f 4e 41 4d 45 0a 23 65 6c 73 65 0a 23  ERR_NAME.#else.#
4580: 20 75 6e 64 65 66 20 20 53 51 4c 49 54 45 5f 4e   undef  SQLITE_N
4590: 45 45 44 5f 45 52 52 5f 4e 41 4d 45 0a 23 65 6e  EED_ERR_NAME.#en
45a0: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 51 4c 49 54  dif../*.** SQLIT
45b0: 45 5f 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e  E_ENABLE_EXPLAIN
45c0: 5f 43 4f 4d 4d 45 4e 54 53 20 69 73 20 69 6e 63  _COMMENTS is inc
45d0: 6f 6d 70 61 74 69 62 6c 65 20 77 69 74 68 20 53  ompatible with S
45e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
45f0: 49 4e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  IN.*/.#ifdef SQL
4600: 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41 49 4e  ITE_OMIT_EXPLAIN
4610: 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f  .# undef SQLITE_
4620: 45 4e 41 42 4c 45 5f 45 58 50 4c 41 49 4e 5f 43  ENABLE_EXPLAIN_C
4630: 4f 4d 4d 45 4e 54 53 0a 23 65 6e 64 69 66 0a 0a  OMMENTS.#endif..
4640: 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75  /*.** Return tru
4650: 65 20 28 6e 6f 6e 2d 7a 65 72 6f 29 20 69 66 20  e (non-zero) if 
4660: 74 68 65 20 69 6e 70 75 74 20 69 73 20 61 6e 20  the input is an 
4670: 69 6e 74 65 67 65 72 20 74 68 61 74 20 69 73 20  integer that is 
4680: 74 6f 6f 20 6c 61 72 67 65 0a 2a 2a 20 74 6f 20  too large.** to 
4690: 66 69 74 20 69 6e 20 33 32 2d 62 69 74 73 2e 20  fit in 32-bits. 
46a0: 20 54 68 69 73 20 6d 61 63 72 6f 20 69 73 20 75   This macro is u
46b0: 73 65 64 20 69 6e 73 69 64 65 20 6f 66 20 76 61  sed inside of va
46c0: 72 69 6f 75 73 20 74 65 73 74 63 61 73 65 28 29  rious testcase()
46d0: 0a 2a 2a 20 6d 61 63 72 6f 73 20 74 6f 20 76 65  .** macros to ve
46e0: 72 69 66 79 20 74 68 61 74 20 77 65 20 68 61 76  rify that we hav
46f0: 65 20 74 65 73 74 65 64 20 53 51 4c 69 74 65 20  e tested SQLite 
4700: 66 6f 72 20 6c 61 72 67 65 2d 66 69 6c 65 20 73  for large-file s
4710: 75 70 70 6f 72 74 2e 0a 2a 2f 0a 23 64 65 66 69  upport..*/.#defi
4720: 6e 65 20 49 53 5f 42 49 47 5f 49 4e 54 28 58 29  ne IS_BIG_INT(X)
4730: 20 20 28 28 28 58 29 26 7e 28 69 36 34 29 30 78    (((X)&~(i64)0x
4740: 66 66 66 66 66 66 66 66 29 21 3d 30 29 0a 0a 2f  ffffffff)!=0)../
4750: 2a 0a 2a 2a 20 54 68 65 20 6d 61 63 72 6f 20 75  *.** The macro u
4760: 6e 6c 69 6b 65 6c 79 28 29 20 69 73 20 61 20 68  nlikely() is a h
4770: 69 6e 74 20 74 68 61 74 20 73 75 72 72 6f 75 6e  int that surroun
4780: 64 73 20 61 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20  ds a boolean.** 
4790: 65 78 70 72 65 73 73 69 6f 6e 20 74 68 61 74 20  expression that 
47a0: 69 73 20 75 73 75 61 6c 6c 79 20 66 61 6c 73 65  is usually false
47b0: 2e 20 20 4d 61 63 72 6f 20 6c 69 6b 65 6c 79 28  .  Macro likely(
47c0: 29 20 73 75 72 72 6f 75 6e 64 73 0a 2a 2a 20 61  ) surrounds.** a
47d0: 20 62 6f 6f 6c 65 61 6e 20 65 78 70 72 65 73 73   boolean express
47e0: 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73 75 61  ion that is usua
47f0: 6c 6c 79 20 74 72 75 65 2e 20 20 54 68 65 73 65  lly true.  These
4800: 20 68 69 6e 74 73 20 63 6f 75 6c 64 2c 0a 2a 2a   hints could,.**
4810: 20 69 6e 20 74 68 65 6f 72 79 2c 20 62 65 20 75   in theory, be u
4820: 73 65 64 20 62 79 20 74 68 65 20 63 6f 6d 70 69  sed by the compi
4830: 6c 65 72 20 74 6f 20 67 65 6e 65 72 61 74 65 20  ler to generate 
4840: 62 65 74 74 65 72 20 63 6f 64 65 2c 20 62 75 74  better code, but
4850: 0a 2a 2a 20 63 75 72 72 65 6e 74 6c 79 20 74 68  .** currently th
4860: 65 79 20 61 72 65 20 6a 75 73 74 20 63 6f 6d 6d  ey are just comm
4870: 65 6e 74 73 20 66 6f 72 20 68 75 6d 61 6e 20 72  ents for human r
4880: 65 61 64 65 72 73 2e 0a 2a 2f 0a 23 64 65 66 69  eaders..*/.#defi
4890: 6e 65 20 6c 69 6b 65 6c 79 28 58 29 20 20 20 20  ne likely(X)    
48a0: 28 58 29 0a 23 64 65 66 69 6e 65 20 75 6e 6c 69  (X).#define unli
48b0: 6b 65 6c 79 28 58 29 20 20 28 58 29 0a 0a 23 69  kely(X)  (X)..#i
48c0: 6e 63 6c 75 64 65 20 22 68 61 73 68 2e 68 22 0a  nclude "hash.h".
48d0: 23 69 6e 63 6c 75 64 65 20 22 70 61 72 73 65 2e  #include "parse.
48e0: 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64  h".#include <std
48f0: 69 6f 2e 68 3e 0a 23 69 6e 63 6c 75 64 65 20 3c  io.h>.#include <
4900: 73 74 64 6c 69 62 2e 68 3e 0a 23 69 6e 63 6c 75  stdlib.h>.#inclu
4910: 64 65 20 3c 73 74 72 69 6e 67 2e 68 3e 0a 23 69  de <string.h>.#i
4920: 6e 63 6c 75 64 65 20 3c 61 73 73 65 72 74 2e 68  nclude <assert.h
4930: 3e 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74 64 64  >.#include <stdd
4940: 65 66 2e 68 3e 0a 0a 2f 2a 0a 2a 2a 20 55 73 65  ef.h>../*.** Use
4950: 20 61 20 6d 61 63 72 6f 20 74 6f 20 72 65 70 6c   a macro to repl
4960: 61 63 65 20 6d 65 6d 63 70 79 28 29 20 69 66 20  ace memcpy() if 
4970: 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 53 51  compiled with SQ
4980: 4c 49 54 45 5f 49 4e 4c 49 4e 45 5f 4d 45 4d 43  LITE_INLINE_MEMC
4990: 50 59 2e 0a 2a 2a 20 54 68 69 73 20 61 6c 6c 6f  PY..** This allo
49a0: 77 73 20 62 65 74 74 65 72 20 6d 65 61 73 75 72  ws better measur
49b0: 65 6d 65 6e 74 73 20 6f 66 20 77 68 65 72 65 20  ements of where 
49c0: 6d 65 6d 63 70 79 28 29 20 69 73 20 75 73 65 64  memcpy() is used
49d0: 20 77 68 65 6e 20 72 75 6e 6e 69 6e 67 0a 2a 2a   when running.**
49e0: 20 63 61 63 68 65 67 72 69 6e 64 2e 20 20 42 75   cachegrind.  Bu
49f0: 74 20 74 68 69 73 20 6d 61 63 72 6f 20 76 65 72  t this macro ver
4a00: 73 69 6f 6e 20 6f 66 20 6d 65 6d 63 70 79 28 29  sion of memcpy()
4a10: 20 69 73 20 76 65 72 79 20 73 6c 6f 77 20 73 6f   is very slow so
4a20: 20 69 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 6e 6f   it.** should no
4a30: 74 20 62 65 20 75 73 65 64 20 69 6e 20 70 72 6f  t be used in pro
4a40: 64 75 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 69  duction.  This i
4a50: 73 20 61 20 70 65 72 66 6f 72 6d 61 6e 63 65 20  s a performance 
4a60: 6d 65 61 73 75 72 65 6d 65 6e 74 0a 2a 2a 20 68  measurement.** h
4a70: 61 63 6b 20 6f 6e 6c 79 2e 0a 2a 2f 0a 23 69 66  ack only..*/.#if
4a80: 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 4c 49 4e  def SQLITE_INLIN
4a90: 45 5f 4d 45 4d 43 50 59 0a 23 20 64 65 66 69 6e  E_MEMCPY.# defin
4aa0: 65 20 6d 65 6d 63 70 79 28 44 2c 53 2c 4e 29 20  e memcpy(D,S,N) 
4ab0: 7b 63 68 61 72 2a 78 78 64 3d 28 63 68 61 72 2a  {char*xxd=(char*
4ac0: 29 28 44 29 3b 63 6f 6e 73 74 20 63 68 61 72 2a  )(D);const char*
4ad0: 78 78 73 3d 28 63 6f 6e 73 74 20 63 68 61 72 2a  xxs=(const char*
4ae0: 29 28 53 29 3b 5c 0a 20 20 20 20 20 20 20 20 20  )(S);\.         
4af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4b00: 6e 74 20 78 78 6e 3d 28 4e 29 3b 77 68 69 6c 65  nt xxn=(N);while
4b10: 28 78 78 6e 2d 2d 3e 30 29 2a 28 78 78 64 2b 2b  (xxn-->0)*(xxd++
4b20: 29 3d 2a 28 78 78 73 2b 2b 29 3b 7d 0a 23 65 6e  )=*(xxs++);}.#en
4b30: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 49 66 20 63 6f  dif../*.** If co
4b40: 6d 70 69 6c 69 6e 67 20 66 6f 72 20 61 20 70 72  mpiling for a pr
4b50: 6f 63 65 73 73 6f 72 20 74 68 61 74 20 6c 61 63  ocessor that lac
4b60: 6b 73 20 66 6c 6f 61 74 69 6e 67 20 70 6f 69 6e  ks floating poin
4b70: 74 20 73 75 70 70 6f 72 74 2c 0a 2a 2a 20 73 75  t support,.** su
4b80: 62 73 74 69 74 75 74 65 20 69 6e 74 65 67 65 72  bstitute integer
4b90: 20 66 6f 72 20 66 6c 6f 61 74 69 6e 67 2d 70 6f   for floating-po
4ba0: 69 6e 74 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  int.*/.#ifdef SQ
4bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 4f 41 54 49  LITE_OMIT_FLOATI
4bc0: 4e 47 5f 50 4f 49 4e 54 0a 23 20 64 65 66 69 6e  NG_POINT.# defin
4bd0: 65 20 64 6f 75 62 6c 65 20 73 71 6c 69 74 65 5f  e double sqlite_
4be0: 69 6e 74 36 34 0a 23 20 64 65 66 69 6e 65 20 66  int64.# define f
4bf0: 6c 6f 61 74 20 73 71 6c 69 74 65 5f 69 6e 74 36  loat sqlite_int6
4c00: 34 0a 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44  4.# define LONGD
4c10: 4f 55 42 4c 45 5f 54 59 50 45 20 73 71 6c 69 74  OUBLE_TYPE sqlit
4c20: 65 5f 69 6e 74 36 34 0a 23 20 69 66 6e 64 65 66  e_int64.# ifndef
4c30: 20 53 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a   SQLITE_BIG_DBL.
4c40: 23 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54  #   define SQLIT
4c50: 45 5f 42 49 47 5f 44 42 4c 20 28 28 28 73 71 6c  E_BIG_DBL (((sql
4c60: 69 74 65 33 5f 69 6e 74 36 34 29 31 29 3c 3c 35  ite3_int64)1)<<5
4c70: 30 29 0a 23 20 65 6e 64 69 66 0a 23 20 64 65 66  0).# endif.# def
4c80: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ine SQLITE_OMIT_
4c90: 44 41 54 45 54 49 4d 45 5f 46 55 4e 43 53 20 31  DATETIME_FUNCS 1
4ca0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
4cb0: 5f 4f 4d 49 54 5f 54 52 41 43 45 20 31 0a 23 20  _OMIT_TRACE 1.# 
4cc0: 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 49 58  undef SQLITE_MIX
4cd0: 45 44 5f 45 4e 44 49 41 4e 5f 36 34 42 49 54 5f  ED_ENDIAN_64BIT_
4ce0: 46 4c 4f 41 54 0a 23 20 75 6e 64 65 66 20 53 51  FLOAT.# undef SQ
4cf0: 4c 49 54 45 5f 48 41 56 45 5f 49 53 4e 41 4e 0a  LITE_HAVE_ISNAN.
4d00: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
4d10: 51 4c 49 54 45 5f 42 49 47 5f 44 42 4c 0a 23 20  QLITE_BIG_DBL.# 
4d20: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
4d30: 47 5f 44 42 4c 20 28 31 65 39 39 29 0a 23 65 6e  G_DBL (1e99).#en
4d40: 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 4d 49 54 5f  dif../*.** OMIT_
4d50: 54 45 4d 50 44 42 20 69 73 20 73 65 74 20 74 6f  TEMPDB is set to
4d60: 20 31 20 69 66 20 53 51 4c 49 54 45 5f 4f 4d 49   1 if SQLITE_OMI
4d70: 54 5f 54 45 4d 50 44 42 20 69 73 20 64 65 66 69  T_TEMPDB is defi
4d80: 6e 65 64 2c 20 6f 72 20 30 0a 2a 2a 20 61 66 74  ned, or 0.** aft
4d90: 65 72 77 61 72 64 2e 20 48 61 76 69 6e 67 20 74  erward. Having t
4da0: 68 69 73 20 6d 61 63 72 6f 20 61 6c 6c 6f 77 73  his macro allows
4db0: 20 75 73 20 74 6f 20 63 61 75 73 65 20 74 68 65   us to cause the
4dc0: 20 43 20 63 6f 6d 70 69 6c 65 72 0a 2a 2a 20 74   C compiler.** t
4dd0: 6f 20 6f 6d 69 74 20 63 6f 64 65 20 75 73 65 64  o omit code used
4de0: 20 62 79 20 54 45 4d 50 20 74 61 62 6c 65 73 20   by TEMP tables 
4df0: 77 69 74 68 6f 75 74 20 6d 65 73 73 79 20 23 69  without messy #i
4e00: 66 6e 64 65 66 20 73 74 61 74 65 6d 65 6e 74 73  fndef statements
4e10: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
4e20: 54 45 5f 4f 4d 49 54 5f 54 45 4d 50 44 42 0a 23  TE_OMIT_TEMPDB.#
4e30: 64 65 66 69 6e 65 20 4f 4d 49 54 5f 54 45 4d 50  define OMIT_TEMP
4e40: 44 42 20 31 0a 23 65 6c 73 65 0a 23 64 65 66 69  DB 1.#else.#defi
4e50: 6e 65 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 30  ne OMIT_TEMPDB 0
4e60: 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54  .#endif../*.** T
4e70: 68 65 20 22 66 69 6c 65 20 66 6f 72 6d 61 74 22  he "file format"
4e80: 20 6e 75 6d 62 65 72 20 69 73 20 61 6e 20 69 6e   number is an in
4e90: 74 65 67 65 72 20 74 68 61 74 20 69 73 20 69 6e  teger that is in
4ea0: 63 72 65 6d 65 6e 74 65 64 20 77 68 65 6e 65 76  cremented whenev
4eb0: 65 72 0a 2a 2a 20 74 68 65 20 56 44 42 45 2d 6c  er.** the VDBE-l
4ec0: 65 76 65 6c 20 66 69 6c 65 20 66 6f 72 6d 61 74  evel file format
4ed0: 20 63 68 61 6e 67 65 73 2e 20 20 54 68 65 20 66   changes.  The f
4ee0: 6f 6c 6c 6f 77 69 6e 67 20 6d 61 63 72 6f 73 20  ollowing macros 
4ef0: 64 65 66 69 6e 65 20 74 68 65 0a 2a 2a 20 74 68  define the.** th
4f00: 65 20 64 65 66 61 75 6c 74 20 66 69 6c 65 20 66  e default file f
4f10: 6f 72 6d 61 74 20 66 6f 72 20 6e 65 77 20 64 61  ormat for new da
4f20: 74 61 62 61 73 65 73 20 61 6e 64 20 74 68 65 20  tabases and the 
4f30: 6d 61 78 69 6d 75 6d 20 66 69 6c 65 20 66 6f 72  maximum file for
4f40: 6d 61 74 0a 2a 2a 20 74 68 61 74 20 74 68 65 20  mat.** that the 
4f50: 6c 69 62 72 61 72 79 20 63 61 6e 20 72 65 61 64  library can read
4f60: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  ..*/.#define SQL
4f70: 49 54 45 5f 4d 41 58 5f 46 49 4c 45 5f 46 4f 52  ITE_MAX_FILE_FOR
4f80: 4d 41 54 20 34 0a 23 69 66 6e 64 65 66 20 53 51  MAT 4.#ifndef SQ
4f90: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 46 49 4c  LITE_DEFAULT_FIL
4fa0: 45 5f 46 4f 52 4d 41 54 0a 23 20 64 65 66 69 6e  E_FORMAT.# defin
4fb0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
4fc0: 5f 46 49 4c 45 5f 46 4f 52 4d 41 54 20 34 0a 23  _FILE_FORMAT 4.#
4fd0: 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 44 65 74  endif../*.** Det
4fe0: 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20 74  ermine whether t
4ff0: 72 69 67 67 65 72 73 20 61 72 65 20 72 65 63 75  riggers are recu
5000: 72 73 69 76 65 20 62 79 20 64 65 66 61 75 6c 74  rsive by default
5010: 2e 20 20 54 68 69 73 20 63 61 6e 20 62 65 0a 2a  .  This can be.*
5020: 2a 20 63 68 61 6e 67 65 64 20 61 74 20 72 75 6e  * changed at run
5030: 2d 74 69 6d 65 20 75 73 69 6e 67 20 61 20 70 72  -time using a pr
5040: 61 67 6d 61 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66  agma..*/.#ifndef
5050: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
5060: 52 45 43 55 52 53 49 56 45 5f 54 52 49 47 47 45  RECURSIVE_TRIGGE
5070: 52 53 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49  RS.# define SQLI
5080: 54 45 5f 44 45 46 41 55 4c 54 5f 52 45 43 55 52  TE_DEFAULT_RECUR
5090: 53 49 56 45 5f 54 52 49 47 47 45 52 53 20 30 0a  SIVE_TRIGGERS 0.
50a0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 50 72  #endif../*.** Pr
50b0: 6f 76 69 64 65 20 61 20 64 65 66 61 75 6c 74 20  ovide a default 
50c0: 76 61 6c 75 65 20 66 6f 72 20 53 51 4c 49 54 45  value for SQLITE
50d0: 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69 6e 20 63  _TEMP_STORE in c
50e0: 61 73 65 20 69 74 20 69 73 20 6e 6f 74 20 73 70  ase it is not sp
50f0: 65 63 69 66 69 65 64 0a 2a 2a 20 6f 6e 20 74 68  ecified.** on th
5100: 65 20 63 6f 6d 6d 61 6e 64 2d 6c 69 6e 65 0a 2a  e command-line.*
5110: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
5120: 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 23 20 64 65  _TEMP_STORE.# de
5130: 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 45 4d 50  fine SQLITE_TEMP
5140: 5f 53 54 4f 52 45 20 31 0a 23 65 6e 64 69 66 0a  _STORE 1.#endif.
5150: 0a 2f 2a 0a 2a 2a 20 49 66 20 6e 6f 20 76 61 6c  ./*.** If no val
5160: 75 65 20 68 61 73 20 62 65 65 6e 20 70 72 6f 76  ue has been prov
5170: 69 64 65 64 20 66 6f 72 20 53 51 4c 49 54 45 5f  ided for SQLITE_
5180: 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  MAX_WORKER_THREA
5190: 44 53 2c 20 6f 72 20 69 66 0a 2a 2a 20 53 51 4c  DS, or if.** SQL
51a0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 20 69  ITE_TEMP_STORE i
51b0: 73 20 73 65 74 20 74 6f 20 33 20 28 6e 65 76 65  s set to 3 (neve
51c0: 72 20 75 73 65 20 74 65 6d 70 6f 72 61 72 79 20  r use temporary 
51d0: 66 69 6c 65 73 29 2c 20 73 65 74 20 69 74 0a 2a  files), set it.*
51e0: 2a 20 74 6f 20 7a 65 72 6f 2e 0a 2a 2f 0a 23 69  * to zero..*/.#i
51f0: 66 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54  f SQLITE_TEMP_ST
5200: 4f 52 45 3d 3d 33 20 7c 7c 20 53 51 4c 49 54 45  ORE==3 || SQLITE
5210: 5f 54 48 52 45 41 44 53 41 46 45 3d 3d 30 0a 23  _THREADSAFE==0.#
5220: 20 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41   undef SQLITE_MA
5230: 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
5240: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
5250: 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45  _MAX_WORKER_THRE
5260: 41 44 53 20 30 0a 23 65 6e 64 69 66 0a 23 69 66  ADS 0.#endif.#if
5270: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5280: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5290: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
52a0: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
52b0: 53 20 38 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64  S 8.#endif.#ifnd
52c0: 65 66 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c  ef SQLITE_DEFAUL
52d0: 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
52e0: 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
52f0: 5f 44 45 46 41 55 4c 54 5f 57 4f 52 4b 45 52 5f  _DEFAULT_WORKER_
5300: 54 48 52 45 41 44 53 20 30 0a 23 65 6e 64 69 66  THREADS 0.#endif
5310: 0a 23 69 66 20 53 51 4c 49 54 45 5f 44 45 46 41  .#if SQLITE_DEFA
5320: 55 4c 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41  ULT_WORKER_THREA
5330: 44 53 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 57 4f  DS>SQLITE_MAX_WO
5340: 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23 20 75  RKER_THREADS.# u
5350: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  ndef SQLITE_MAX_
5360: 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a 23  WORKER_THREADS.#
5370: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d   define SQLITE_M
5380: 41 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44  AX_WORKER_THREAD
5390: 53 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  S SQLITE_DEFAULT
53a0: 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 0a  _WORKER_THREADS.
53b0: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
53c0: 65 20 64 65 66 61 75 6c 74 20 69 6e 69 74 69 61  e default initia
53d0: 6c 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66 6f 72  l allocation for
53e0: 20 74 68 65 20 70 61 67 65 63 61 63 68 65 20 77   the pagecache w
53f0: 68 65 6e 20 75 73 69 6e 67 20 73 65 70 61 72 61  hen using separa
5400: 74 65 0a 2a 2a 20 70 61 67 65 63 61 63 68 65 73  te.** pagecaches
5410: 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62 61   for each databa
5420: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  se connection.  
5430: 41 20 70 6f 73 69 74 69 76 65 20 6e 75 6d 62 65  A positive numbe
5440: 72 20 69 73 20 74 68 65 0a 2a 2a 20 6e 75 6d 62  r is the.** numb
5450: 65 72 20 6f 66 20 70 61 67 65 73 2e 20 20 41 20  er of pages.  A 
5460: 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 20  negative number 
5470: 4e 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73 20 6d  N translations m
5480: 65 61 6e 73 20 74 68 61 74 20 61 20 62 75 66 66  eans that a buff
5490: 65 72 0a 2a 2a 20 6f 66 20 2d 31 30 32 34 2a 4e  er.** of -1024*N
54a0: 20 62 79 74 65 73 20 69 73 20 61 6c 6c 6f 63 61   bytes is alloca
54b0: 74 65 64 20 61 6e 64 20 75 73 65 64 20 66 6f 72  ted and used for
54c0: 20 61 73 20 6d 61 6e 79 20 70 61 67 65 73 20 61   as many pages a
54d0: 73 20 69 74 20 77 69 6c 6c 20 68 6f 6c 64 2e 0a  s it will hold..
54e0: 2a 2a 0a 2a 2a 20 54 68 65 20 64 65 66 61 75 6c  **.** The defaul
54f0: 74 20 76 61 6c 75 65 20 6f 66 20 22 32 30 22 20  t value of "20" 
5500: 77 61 73 20 63 68 6f 6f 73 65 6e 20 74 6f 20 6d  was choosen to m
5510: 69 6e 69 6d 69 7a 65 20 74 68 65 20 72 75 6e 2d  inimize the run-
5520: 74 69 6d 65 20 6f 66 20 74 68 65 0a 2a 2a 20 73  time of the.** s
5530: 70 65 65 64 74 65 73 74 31 20 74 65 73 74 20 70  peedtest1 test p
5540: 72 6f 67 72 61 6d 20 77 69 74 68 20 6f 70 74 69  rogram with opti
5550: 6f 6e 73 3a 20 2d 2d 73 68 72 69 6e 6b 2d 6d 65  ons: --shrink-me
5560: 6d 6f 72 79 20 2d 2d 72 65 70 72 65 70 61 72 65  mory --reprepare
5570: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5580: 54 45 5f 44 45 46 41 55 4c 54 5f 50 43 41 43 48  TE_DEFAULT_PCACH
5590: 45 5f 49 4e 49 54 53 5a 0a 23 20 64 65 66 69 6e  E_INITSZ.# defin
55a0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
55b0: 5f 50 43 41 43 48 45 5f 49 4e 49 54 53 5a 20 32  _PCACHE_INITSZ 2
55c0: 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
55d0: 47 43 43 20 64 6f 65 73 20 6e 6f 74 20 64 65 66  GCC does not def
55e0: 69 6e 65 20 74 68 65 20 6f 66 66 73 65 74 6f 66  ine the offsetof
55f0: 28 29 20 6d 61 63 72 6f 20 73 6f 20 77 65 27 6c  () macro so we'l
5600: 6c 20 68 61 76 65 20 74 6f 20 64 6f 20 69 74 0a  l have to do it.
5610: 2a 2a 20 6f 75 72 73 65 6c 76 65 73 2e 0a 2a 2f  ** ourselves..*/
5620: 0a 23 69 66 6e 64 65 66 20 6f 66 66 73 65 74 6f  .#ifndef offseto
5630: 66 0a 23 64 65 66 69 6e 65 20 6f 66 66 73 65 74  f.#define offset
5640: 6f 66 28 53 54 52 55 43 54 55 52 45 2c 46 49 45  of(STRUCTURE,FIE
5650: 4c 44 29 20 28 28 69 6e 74 29 28 28 63 68 61 72  LD) ((int)((char
5660: 2a 29 26 28 28 53 54 52 55 43 54 55 52 45 2a 29  *)&((STRUCTURE*)
5670: 30 29 2d 3e 46 49 45 4c 44 29 29 0a 23 65 6e 64  0)->FIELD)).#end
5680: 69 66 0a 0a 2f 2a 0a 2a 2a 20 4d 61 63 72 6f 73  if../*.** Macros
5690: 20 74 6f 20 63 6f 6d 70 75 74 65 20 6d 69 6e 69   to compute mini
56a0: 6d 75 6d 20 61 6e 64 20 6d 61 78 69 6d 75 6d 20  mum and maximum 
56b0: 6f 66 20 74 77 6f 20 6e 75 6d 62 65 72 73 2e 0a  of two numbers..
56c0: 2a 2f 0a 23 69 66 6e 64 65 66 20 4d 49 4e 0a 23  */.#ifndef MIN.#
56d0: 20 64 65 66 69 6e 65 20 4d 49 4e 28 41 2c 42 29   define MIN(A,B)
56e0: 20 28 28 41 29 3c 28 42 29 3f 28 41 29 3a 28 42   ((A)<(B)?(A):(B
56f0: 29 29 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  )).#endif.#ifnde
5700: 66 20 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 4d  f MAX.# define M
5710: 41 58 28 41 2c 42 29 20 28 28 41 29 3e 28 42 29  AX(A,B) ((A)>(B)
5720: 3f 28 41 29 3a 28 42 29 29 0a 23 65 6e 64 69 66  ?(A):(B)).#endif
5730: 0a 0a 2f 2a 0a 2a 2a 20 53 77 61 70 20 74 77 6f  ../*.** Swap two
5740: 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 79 70 65   objects of type
5750: 20 54 59 50 45 2e 0a 2a 2f 0a 23 64 65 66 69 6e   TYPE..*/.#defin
5760: 65 20 53 57 41 50 28 54 59 50 45 2c 41 2c 42 29  e SWAP(TYPE,A,B)
5770: 20 7b 54 59 50 45 20 74 3d 41 3b 20 41 3d 42 3b   {TYPE t=A; A=B;
5780: 20 42 3d 74 3b 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68   B=t;}../*.** Ch
5790: 65 63 6b 20 74 6f 20 73 65 65 20 69 66 20 74 68  eck to see if th
57a0: 69 73 20 6d 61 63 68 69 6e 65 20 75 73 65 73 20  is machine uses 
57b0: 45 42 43 44 49 43 2e 20 20 28 59 65 73 2c 20 62  EBCDIC.  (Yes, b
57c0: 65 6c 69 65 76 65 20 69 74 20 6f 72 0a 2a 2a 20  elieve it or.** 
57d0: 6e 6f 74 2c 20 74 68 65 72 65 20 61 72 65 20 73  not, there are s
57e0: 74 69 6c 6c 20 6d 61 63 68 69 6e 65 73 20 6f 75  till machines ou
57f0: 74 20 74 68 65 72 65 20 74 68 61 74 20 75 73 65  t there that use
5800: 20 45 42 43 44 49 43 2e 29 0a 2a 2f 0a 23 69 66   EBCDIC.).*/.#if
5810: 20 27 41 27 20 3d 3d 20 27 5c 33 30 31 27 0a 23   'A' == '\301'.#
5820: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45   define SQLITE_E
5830: 42 43 44 49 43 20 31 0a 23 65 6c 73 65 0a 23 20  BCDIC 1.#else.# 
5840: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 53  define SQLITE_AS
5850: 43 49 49 20 31 0a 23 65 6e 64 69 66 0a 0a 2f 2a  CII 1.#endif../*
5860: 0a 2a 2a 20 49 6e 74 65 67 65 72 73 20 6f 66 20  .** Integers of 
5870: 6b 6e 6f 77 6e 20 73 69 7a 65 73 2e 20 20 54 68  known sizes.  Th
5880: 65 73 65 20 74 79 70 65 64 65 66 73 20 6d 69 67  ese typedefs mig
5890: 68 74 20 63 68 61 6e 67 65 20 66 6f 72 20 61 72  ht change for ar
58a0: 63 68 69 74 65 63 74 75 72 65 73 0a 2a 2a 20 77  chitectures.** w
58b0: 68 65 72 65 20 74 68 65 20 73 69 7a 65 73 20 76  here the sizes v
58c0: 65 72 79 2e 20 20 50 72 65 70 72 6f 63 65 73 73  ery.  Preprocess
58d0: 6f 72 20 6d 61 63 72 6f 73 20 61 72 65 20 61 76  or macros are av
58e0: 61 69 6c 61 62 6c 65 20 73 6f 20 74 68 61 74 20  ailable so that 
58f0: 74 68 65 0a 2a 2a 20 74 79 70 65 73 20 63 61 6e  the.** types can
5900: 20 62 65 20 63 6f 6e 76 65 6e 69 65 6e 74 6c 79   be conveniently
5910: 20 72 65 64 65 66 69 6e 65 64 20 61 74 20 63 6f   redefined at co
5920: 6d 70 69 6c 65 2d 74 79 70 65 2e 20 20 4c 69 6b  mpile-type.  Lik
5930: 65 20 74 68 69 73 3a 0a 2a 2a 0a 2a 2a 20 20 20  e this:.**.**   
5940: 20 20 20 20 20 20 63 63 20 27 2d 44 55 49 4e 54        cc '-DUINT
5950: 50 54 52 5f 54 59 50 45 3d 6c 6f 6e 67 20 6c 6f  PTR_TYPE=long lo
5960: 6e 67 20 69 6e 74 27 20 2e 2e 2e 0a 2a 2f 0a 23  ng int' ....*/.#
5970: 69 66 6e 64 65 66 20 55 49 4e 54 33 32 5f 54 59  ifndef UINT32_TY
5980: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5990: 55 49 4e 54 33 32 5f 54 0a 23 20 20 64 65 66 69  UINT32_T.#  defi
59a0: 6e 65 20 55 49 4e 54 33 32 5f 54 59 50 45 20 75  ne UINT32_TYPE u
59b0: 69 6e 74 33 32 5f 74 0a 23 20 65 6c 73 65 0a 23  int32_t.# else.#
59c0: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 33 32 5f    define UINT32_
59d0: 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20 69 6e  TYPE unsigned in
59e0: 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  t.# endif.#endif
59f0: 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 31 36 5f  .#ifndef UINT16_
5a00: 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41 56  TYPE.# ifdef HAV
5a10: 45 5f 55 49 4e 54 31 36 5f 54 0a 23 20 20 64 65  E_UINT16_T.#  de
5a20: 66 69 6e 65 20 55 49 4e 54 31 36 5f 54 59 50 45  fine UINT16_TYPE
5a30: 20 75 69 6e 74 31 36 5f 74 0a 23 20 65 6c 73 65   uint16_t.# else
5a40: 0a 23 20 20 64 65 66 69 6e 65 20 55 49 4e 54 31  .#  define UINT1
5a50: 36 5f 54 59 50 45 20 75 6e 73 69 67 6e 65 64 20  6_TYPE unsigned 
5a60: 73 68 6f 72 74 20 69 6e 74 0a 23 20 65 6e 64 69  short int.# endi
5a70: 66 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66  f.#endif.#ifndef
5a80: 20 49 4e 54 31 36 5f 54 59 50 45 0a 23 20 69 66   INT16_TYPE.# if
5a90: 64 65 66 20 48 41 56 45 5f 49 4e 54 31 36 5f 54  def HAVE_INT16_T
5aa0: 0a 23 20 20 64 65 66 69 6e 65 20 49 4e 54 31 36  .#  define INT16
5ab0: 5f 54 59 50 45 20 69 6e 74 31 36 5f 74 0a 23 20  _TYPE int16_t.# 
5ac0: 65 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49  else.#  define I
5ad0: 4e 54 31 36 5f 54 59 50 45 20 73 68 6f 72 74 20  NT16_TYPE short 
5ae0: 69 6e 74 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  int.# endif.#end
5af0: 69 66 0a 23 69 66 6e 64 65 66 20 55 49 4e 54 38  if.#ifndef UINT8
5b00: 5f 54 59 50 45 0a 23 20 69 66 64 65 66 20 48 41  _TYPE.# ifdef HA
5b10: 56 45 5f 55 49 4e 54 38 5f 54 0a 23 20 20 64 65  VE_UINT8_T.#  de
5b20: 66 69 6e 65 20 55 49 4e 54 38 5f 54 59 50 45 20  fine UINT8_TYPE 
5b30: 75 69 6e 74 38 5f 74 0a 23 20 65 6c 73 65 0a 23  uint8_t.# else.#
5b40: 20 20 64 65 66 69 6e 65 20 55 49 4e 54 38 5f 54    define UINT8_T
5b50: 59 50 45 20 75 6e 73 69 67 6e 65 64 20 63 68 61  YPE unsigned cha
5b60: 72 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64 69 66  r.# endif.#endif
5b70: 0a 23 69 66 6e 64 65 66 20 49 4e 54 38 5f 54 59  .#ifndef INT8_TY
5b80: 50 45 0a 23 20 69 66 64 65 66 20 48 41 56 45 5f  PE.# ifdef HAVE_
5b90: 49 4e 54 38 5f 54 0a 23 20 20 64 65 66 69 6e 65  INT8_T.#  define
5ba0: 20 49 4e 54 38 5f 54 59 50 45 20 69 6e 74 38 5f   INT8_TYPE int8_
5bb0: 74 0a 23 20 65 6c 73 65 0a 23 20 20 64 65 66 69  t.# else.#  defi
5bc0: 6e 65 20 49 4e 54 38 5f 54 59 50 45 20 73 69 67  ne INT8_TYPE sig
5bd0: 6e 65 64 20 63 68 61 72 0a 23 20 65 6e 64 69 66  ned char.# endif
5be0: 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20  .#endif.#ifndef 
5bf0: 4c 4f 4e 47 44 4f 55 42 4c 45 5f 54 59 50 45 0a  LONGDOUBLE_TYPE.
5c00: 23 20 64 65 66 69 6e 65 20 4c 4f 4e 47 44 4f 55  # define LONGDOU
5c10: 42 4c 45 5f 54 59 50 45 20 6c 6f 6e 67 20 64 6f  BLE_TYPE long do
5c20: 75 62 6c 65 0a 23 65 6e 64 69 66 0a 74 79 70 65  uble.#endif.type
5c30: 64 65 66 20 73 71 6c 69 74 65 5f 69 6e 74 36 34  def sqlite_int64
5c40: 20 69 36 34 3b 20 20 20 20 20 20 20 20 20 20 2f   i64;          /
5c50: 2a 20 38 2d 62 79 74 65 20 73 69 67 6e 65 64 20  * 8-byte signed 
5c60: 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65 64  integer */.typed
5c70: 65 66 20 73 71 6c 69 74 65 5f 75 69 6e 74 36 34  ef sqlite_uint64
5c80: 20 75 36 34 3b 20 20 20 20 20 20 20 20 20 2f 2a   u64;         /*
5c90: 20 38 2d 62 79 74 65 20 75 6e 73 69 67 6e 65 64   8-byte unsigned
5ca0: 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70 65   integer */.type
5cb0: 64 65 66 20 55 49 4e 54 33 32 5f 54 59 50 45 20  def UINT32_TYPE 
5cc0: 75 33 32 3b 20 20 20 20 20 20 20 20 20 20 20 2f  u32;           /
5cd0: 2a 20 34 2d 62 79 74 65 20 75 6e 73 69 67 6e 65  * 4-byte unsigne
5ce0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5cf0: 65 64 65 66 20 55 49 4e 54 31 36 5f 54 59 50 45  edef UINT16_TYPE
5d00: 20 75 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   u16;           
5d10: 2f 2a 20 32 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 2-byte unsign
5d20: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5d30: 70 65 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45  pedef INT16_TYPE
5d40: 20 69 31 36 3b 20 20 20 20 20 20 20 20 20 20 20   i16;           
5d50: 20 2f 2a 20 32 2d 62 79 74 65 20 73 69 67 6e 65   /* 2-byte signe
5d60: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79 70  d integer */.typ
5d70: 65 64 65 66 20 55 49 4e 54 38 5f 54 59 50 45 20  edef UINT8_TYPE 
5d80: 75 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  u8;             
5d90: 2f 2a 20 31 2d 62 79 74 65 20 75 6e 73 69 67 6e  /* 1-byte unsign
5da0: 65 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 74 79  ed integer */.ty
5db0: 70 65 64 65 66 20 49 4e 54 38 5f 54 59 50 45 20  pedef INT8_TYPE 
5dc0: 69 38 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  i8;             
5dd0: 20 2f 2a 20 31 2d 62 79 74 65 20 73 69 67 6e 65   /* 1-byte signe
5de0: 64 20 69 6e 74 65 67 65 72 20 2a 2f 0a 0a 2f 2a  d integer */../*
5df0: 0a 2a 2a 20 53 51 4c 49 54 45 5f 4d 41 58 5f 55  .** SQLITE_MAX_U
5e00: 33 32 20 69 73 20 61 20 75 36 34 20 63 6f 6e 73  32 is a u64 cons
5e10: 74 61 6e 74 20 74 68 61 74 20 69 73 20 74 68 65  tant that is the
5e20: 20 6d 61 78 69 6d 75 6d 20 75 36 34 20 76 61 6c   maximum u64 val
5e30: 75 65 0a 2a 2a 20 74 68 61 74 20 63 61 6e 20 62  ue.** that can b
5e40: 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 75 33  e stored in a u3
5e50: 32 20 77 69 74 68 6f 75 74 20 6c 6f 73 73 20 6f  2 without loss o
5e60: 66 20 64 61 74 61 2e 20 20 54 68 65 20 76 61 6c  f data.  The val
5e70: 75 65 0a 2a 2a 20 69 73 20 30 78 30 30 30 30 30  ue.** is 0x00000
5e80: 30 30 30 66 66 66 66 66 66 66 66 2e 20 20 42 75  000ffffffff.  Bu
5e90: 74 20 62 65 63 61 75 73 65 20 6f 66 20 71 75 69  t because of qui
5ea0: 72 6b 73 20 6f 66 20 73 6f 6d 65 20 63 6f 6d 70  rks of some comp
5eb0: 69 6c 65 72 73 2c 20 77 65 0a 2a 2a 20 68 61 76  ilers, we.** hav
5ec0: 65 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 65  e to specify the
5ed0: 20 76 61 6c 75 65 20 69 6e 20 74 68 65 20 6c 65   value in the le
5ee0: 73 73 20 69 6e 74 75 69 74 69 76 65 20 6d 61 6e  ss intuitive man
5ef0: 6e 65 72 20 73 68 6f 77 6e 3a 0a 2a 2f 0a 23 64  ner shown:.*/.#d
5f00: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58  efine SQLITE_MAX
5f10: 5f 55 33 32 20 20 28 28 28 28 75 36 34 29 31 29  _U32  ((((u64)1)
5f20: 3c 3c 33 32 29 2d 31 29 0a 0a 2f 2a 0a 2a 2a 20  <<32)-1)../*.** 
5f30: 54 68 65 20 64 61 74 61 74 79 70 65 20 75 73 65  The datatype use
5f40: 64 20 74 6f 20 73 74 6f 72 65 20 65 73 74 69 6d  d to store estim
5f50: 61 74 65 73 20 6f 66 20 74 68 65 20 6e 75 6d 62  ates of the numb
5f60: 65 72 20 6f 66 20 72 6f 77 73 20 69 6e 20 61 0a  er of rows in a.
5f70: 2a 2a 20 74 61 62 6c 65 20 6f 72 20 69 6e 64 65  ** table or inde
5f80: 78 2e 20 20 54 68 69 73 20 69 73 20 61 6e 20 75  x.  This is an u
5f90: 6e 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 20  nsigned integer 
5fa0: 74 79 70 65 2e 20 20 46 6f 72 20 39 39 2e 39 25  type.  For 99.9%
5fb0: 20 6f 66 0a 2a 2a 20 74 68 65 20 77 6f 72 6c 64   of.** the world
5fc0: 2c 20 61 20 33 32 2d 62 69 74 20 69 6e 74 65 67  , a 32-bit integ
5fd0: 65 72 20 69 73 20 73 75 66 66 69 63 69 65 6e 74  er is sufficient
5fe0: 2e 20 20 42 75 74 20 61 20 36 34 2d 62 69 74 20  .  But a 64-bit 
5ff0: 69 6e 74 65 67 65 72 0a 2a 2a 20 63 61 6e 20 62  integer.** can b
6000: 65 20 75 73 65 64 20 61 74 20 63 6f 6d 70 69 6c  e used at compil
6010: 65 2d 74 69 6d 65 20 69 66 20 64 65 73 69 72 65  e-time if desire
6020: 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  d..*/.#ifdef SQL
6030: 49 54 45 5f 36 34 42 49 54 5f 53 54 41 54 53 0a  ITE_64BIT_STATS.
6040: 20 74 79 70 65 64 65 66 20 75 36 34 20 74 52 6f   typedef u64 tRo
6050: 77 63 6e 74 3b 20 20 20 20 2f 2a 20 36 34 2d 62  wcnt;    /* 64-b
6060: 69 74 20 6f 6e 6c 79 20 69 66 20 72 65 71 75 65  it only if reque
6070: 73 74 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d  sted at compile-
6080: 74 69 6d 65 20 2a 2f 0a 23 65 6c 73 65 0a 20 74  time */.#else. t
6090: 79 70 65 64 65 66 20 75 33 32 20 74 52 6f 77 63  ypedef u32 tRowc
60a0: 6e 74 3b 20 20 20 20 2f 2a 20 33 32 2d 62 69 74  nt;    /* 32-bit
60b0: 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default 
60c0: 2a 2f 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  */.#endif../*.**
60d0: 20 45 73 74 69 6d 61 74 65 64 20 71 75 61 6e 74   Estimated quant
60e0: 69 74 69 65 73 20 75 73 65 64 20 66 6f 72 20 71  ities used for q
60f0: 75 65 72 79 20 70 6c 61 6e 6e 69 6e 67 20 61 72  uery planning ar
6100: 65 20 73 74 6f 72 65 64 20 61 73 20 31 36 2d 62  e stored as 16-b
6110: 69 74 0a 2a 2a 20 6c 6f 67 61 72 69 74 68 6d 73  it.** logarithms
6120: 2e 20 20 46 6f 72 20 71 75 61 6e 74 69 74 79 20  .  For quantity 
6130: 58 2c 20 74 68 65 20 76 61 6c 75 65 20 73 74 6f  X, the value sto
6140: 72 65 64 20 69 73 20 31 30 2a 6c 6f 67 32 28 58  red is 10*log2(X
6150: 29 2e 20 20 54 68 69 73 0a 2a 2a 20 67 69 76 65  ).  This.** give
6160: 73 20 61 20 70 6f 73 73 69 62 6c 65 20 72 61 6e  s a possible ran
6170: 67 65 20 6f 66 20 76 61 6c 75 65 73 20 6f 66 20  ge of values of 
6180: 61 70 70 72 6f 78 69 6d 61 74 65 6c 79 20 31 2e  approximately 1.
6190: 30 65 39 38 36 20 74 6f 20 31 65 2d 39 38 36 2e  0e986 to 1e-986.
61a0: 0a 2a 2a 20 42 75 74 20 74 68 65 20 61 6c 6c 6f  .** But the allo
61b0: 77 65 64 20 76 61 6c 75 65 73 20 61 72 65 20 22  wed values are "
61c0: 67 72 61 69 6e 79 22 2e 20 20 4e 6f 74 20 65 76  grainy".  Not ev
61d0: 65 72 79 20 76 61 6c 75 65 20 69 73 20 72 65 70  ery value is rep
61e0: 72 65 73 65 6e 74 61 62 6c 65 2e 0a 2a 2a 20 46  resentable..** F
61f0: 6f 72 20 65 78 61 6d 70 6c 65 2c 20 71 75 61 6e  or example, quan
6200: 74 69 74 69 65 73 20 31 36 20 61 6e 64 20 31 37  tities 16 and 17
6210: 20 61 72 65 20 62 6f 74 68 20 72 65 70 72 65 73   are both repres
6220: 65 6e 74 65 64 20 62 79 20 61 20 4c 6f 67 45 73  ented by a LogEs
6230: 74 0a 2a 2a 20 6f 66 20 34 30 2e 20 20 48 6f 77  t.** of 40.  How
6240: 65 76 65 72 2c 20 73 69 6e 63 65 20 4c 6f 67 45  ever, since LogE
6250: 73 74 20 71 75 61 6e 74 69 74 69 65 73 20 61 72  st quantities ar
6260: 65 20 73 75 70 70 6f 73 65 20 74 6f 20 62 65 20  e suppose to be 
6270: 65 73 74 69 6d 61 74 65 73 2c 0a 2a 2a 20 6e 6f  estimates,.** no
6280: 74 20 65 78 61 63 74 20 76 61 6c 75 65 73 2c 20  t exact values, 
6290: 74 68 69 73 20 69 6d 70 72 65 63 69 73 69 6f 6e  this imprecision
62a0: 20 69 73 20 6e 6f 74 20 61 20 70 72 6f 62 6c 65   is not a proble
62b0: 6d 2e 0a 2a 2a 0a 2a 2a 20 22 4c 6f 67 45 73 74  m..**.** "LogEst
62c0: 22 20 69 73 20 73 68 6f 72 74 20 66 6f 72 20 22  " is short for "
62d0: 4c 6f 67 61 72 69 74 68 6d 69 63 20 45 73 74 69  Logarithmic Esti
62e0: 6d 61 74 65 22 2e 0a 2a 2a 0a 2a 2a 20 45 78 61  mate"..**.** Exa
62f0: 6d 70 6c 65 73 3a 0a 2a 2a 20 20 20 20 20 20 31  mples:.**      1
6300: 20 2d 3e 20 30 20 20 20 20 20 20 20 20 20 20 20   -> 0           
6310: 20 20 20 32 30 20 2d 3e 20 34 33 20 20 20 20 20     20 -> 43     
6320: 20 20 20 20 20 31 30 30 30 30 20 2d 3e 20 31 33       10000 -> 13
6330: 32 0a 2a 2a 20 20 20 20 20 20 32 20 2d 3e 20 31  2.**      2 -> 1
6340: 30 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35  0             25
6350: 20 2d 3e 20 34 36 20 20 20 20 20 20 20 20 20 20   -> 46          
6360: 32 35 30 30 30 20 2d 3e 20 31 34 36 0a 2a 2a 20  25000 -> 146.** 
6370: 20 20 20 20 20 33 20 2d 3e 20 31 36 20 20 20 20       3 -> 16    
6380: 20 20 20 20 20 20 20 20 31 30 30 20 2d 3e 20 36          100 -> 6
6390: 36 20 20 20 20 20 20 20 20 31 30 30 30 30 30 30  6        1000000
63a0: 20 2d 3e 20 31 39 39 0a 2a 2a 20 20 20 20 20 20   -> 199.**      
63b0: 34 20 2d 3e 20 32 30 20 20 20 20 20 20 20 20 20  4 -> 20         
63c0: 20 20 31 30 30 30 20 2d 3e 20 39 39 20 20 20 20    1000 -> 99    
63d0: 20 20 20 20 31 30 34 38 35 37 36 20 2d 3e 20 32      1048576 -> 2
63e0: 30 30 0a 2a 2a 20 20 20 20 20 31 30 20 2d 3e 20  00.**     10 -> 
63f0: 33 33 20 20 20 20 20 20 20 20 20 20 20 31 30 32  33           102
6400: 34 20 2d 3e 20 31 30 30 20 20 20 20 34 32 39 34  4 -> 100    4294
6410: 39 36 37 32 39 36 20 2d 3e 20 33 32 30 0a 2a 2a  967296 -> 320.**
6420: 0a 2a 2a 20 54 68 65 20 4c 6f 67 45 73 74 20 63  .** The LogEst c
6430: 61 6e 20 62 65 20 6e 65 67 61 74 69 76 65 20 74  an be negative t
6440: 6f 20 69 6e 64 69 63 61 74 65 20 66 72 61 63 74  o indicate fract
6450: 69 6f 6e 61 6c 20 76 61 6c 75 65 73 2e 0a 2a 2a  ional values..**
6460: 20 45 78 61 6d 70 6c 65 73 3a 0a 2a 2a 0a 2a 2a   Examples:.**.**
6470: 20 20 20 20 30 2e 35 20 2d 3e 20 2d 31 30 20 20      0.5 -> -10  
6480: 20 20 20 20 20 20 20 20 20 30 2e 31 20 2d 3e 20           0.1 -> 
6490: 2d 33 33 20 20 20 20 20 20 20 20 30 2e 30 36 32  -33        0.062
64a0: 35 20 2d 3e 20 2d 34 30 0a 2a 2f 0a 74 79 70 65  5 -> -40.*/.type
64b0: 64 65 66 20 49 4e 54 31 36 5f 54 59 50 45 20 4c  def INT16_TYPE L
64c0: 6f 67 45 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 53 65  ogEst;../*.** Se
64d0: 74 20 74 68 65 20 53 51 4c 49 54 45 5f 50 54 52  t the SQLITE_PTR
64e0: 53 49 5a 45 20 6d 61 63 72 6f 20 74 6f 20 74 68  SIZE macro to th
64f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 62 79 74 65  e number of byte
6500: 73 20 69 6e 20 61 20 70 6f 69 6e 74 65 72 0a 2a  s in a pointer.*
6510: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
6520: 5f 50 54 52 53 49 5a 45 0a 23 20 69 66 20 64 65  _PTRSIZE.# if de
6530: 66 69 6e 65 64 28 5f 5f 53 49 5a 45 4f 46 5f 50  fined(__SIZEOF_P
6540: 4f 49 4e 54 45 52 5f 5f 29 0a 23 20 20 20 64 65  OINTER__).#   de
6550: 66 69 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53  fine SQLITE_PTRS
6560: 49 5a 45 20 5f 5f 53 49 5a 45 4f 46 5f 50 4f 49  IZE __SIZEOF_POI
6570: 4e 54 45 52 5f 5f 0a 23 20 65 6c 69 66 20 64 65  NTER__.# elif de
6580: 66 69 6e 65 64 28 69 33 38 36 29 20 20 20 20 20  fined(i386)     
6590: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 69 33 38  || defined(__i38
65a0: 36 5f 5f 29 20 20 20 7c 7c 20 64 65 66 69 6e 65  6__)   || define
65b0: 64 28 5f 4d 5f 49 58 38 36 29 20 7c 7c 20 20 20  d(_M_IX86) ||   
65c0: 20 5c 0a 20 20 20 20 20 20 20 64 65 66 69 6e 65   \.       define
65d0: 64 28 5f 4d 5f 41 52 4d 29 20 20 20 7c 7c 20 64  d(_M_ARM)   || d
65e0: 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f 5f 29 20  efined(__arm__) 
65f0: 20 20 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f     || defined(__
6600: 78 38 36 29 0a 23 20 20 20 64 65 66 69 6e 65 20  x86).#   define 
6610: 53 51 4c 49 54 45 5f 50 54 52 53 49 5a 45 20 34  SQLITE_PTRSIZE 4
6620: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
6630: 6e 65 20 53 51 4c 49 54 45 5f 50 54 52 53 49 5a  ne SQLITE_PTRSIZ
6640: 45 20 38 0a 23 20 65 6e 64 69 66 0a 23 65 6e 64  E 8.# endif.#end
6650: 69 66 0a 0a 2f 2a 20 54 68 65 20 75 70 74 72 20  if../* The uptr 
6660: 74 79 70 65 20 69 73 20 61 6e 20 75 6e 73 69 67  type is an unsig
6670: 6e 65 64 20 69 6e 74 65 67 65 72 20 6c 61 72 67  ned integer larg
6680: 65 20 65 6e 6f 75 67 68 20 74 6f 20 68 6f 6c 64  e enough to hold
6690: 20 61 20 70 6f 69 6e 74 65 72 0a 2a 2f 0a 23 69   a pointer.*/.#i
66a0: 66 20 64 65 66 69 6e 65 64 28 48 41 56 45 5f 53  f defined(HAVE_S
66b0: 54 44 49 4e 54 5f 48 29 0a 20 20 74 79 70 65 64  TDINT_H).  typed
66c0: 65 66 20 75 69 6e 74 70 74 72 5f 74 20 75 70 74  ef uintptr_t upt
66d0: 72 3b 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f  r;.#elif SQLITE_
66e0: 50 54 52 53 49 5a 45 3d 3d 34 0a 20 20 74 79 70  PTRSIZE==4.  typ
66f0: 65 64 65 66 20 75 33 32 20 75 70 74 72 3b 0a 23  edef u32 uptr;.#
6700: 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66 20 75  else.  typedef u
6710: 36 34 20 75 70 74 72 3b 0a 23 65 6e 64 69 66 0a  64 uptr;.#endif.
6720: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54  ./*.** The SQLIT
6730: 45 5f 57 49 54 48 49 4e 28 50 2c 53 2c 45 29 20  E_WITHIN(P,S,E) 
6740: 6d 61 63 72 6f 20 63 68 65 63 6b 73 20 74 6f 20  macro checks to 
6750: 73 65 65 20 69 66 20 70 6f 69 6e 74 65 72 20 50  see if pointer P
6760: 20 70 6f 69 6e 74 73 20 74 6f 0a 2a 2a 20 73 6f   points to.** so
6770: 6d 65 74 68 69 6e 67 20 62 65 74 77 65 65 6e 20  mething between 
6780: 53 20 28 69 6e 63 6c 75 73 69 76 65 29 20 61 6e  S (inclusive) an
6790: 64 20 45 20 28 65 78 63 6c 75 73 69 76 65 29 2e  d E (exclusive).
67a0: 0a 2a 2a 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20  .**.** In other 
67b0: 77 6f 72 64 73 2c 20 53 20 69 73 20 61 20 62 75  words, S is a bu
67c0: 66 66 65 72 20 61 6e 64 20 45 20 69 73 20 61 20  ffer and E is a 
67d0: 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66  pointer to the f
67e0: 69 72 73 74 20 62 79 74 65 20 61 66 74 65 72 0a  irst byte after.
67f0: 2a 2a 20 74 68 65 20 65 6e 64 20 6f 66 20 62 75  ** the end of bu
6800: 66 66 65 72 20 53 2e 20 20 54 68 69 73 20 6d 61  ffer S.  This ma
6810: 63 72 6f 20 72 65 74 75 72 6e 73 20 74 72 75 65  cro returns true
6820: 20 69 66 20 50 20 70 6f 69 6e 74 73 20 74 6f 20   if P points to 
6830: 73 6f 6d 65 74 68 69 6e 67 0a 2a 2a 20 63 6f 6e  something.** con
6840: 74 61 69 6e 65 64 20 77 69 74 68 69 6e 20 74 68  tained within th
6850: 65 20 62 75 66 66 65 72 20 53 2e 0a 2a 2f 0a 23  e buffer S..*/.#
6860: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 49  define SQLITE_WI
6870: 54 48 49 4e 28 50 2c 53 2c 45 29 20 28 28 28 75  THIN(P,S,E) (((u
6880: 70 74 72 29 28 50 29 3e 3d 28 75 70 74 72 29 28  ptr)(P)>=(uptr)(
6890: 53 29 29 26 26 28 28 75 70 74 72 29 28 50 29 3c  S))&&((uptr)(P)<
68a0: 28 75 70 74 72 29 28 45 29 29 29 0a 0a 0a 2f 2a  (uptr)(E))).../*
68b0: 0a 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65  .** Macros to de
68c0: 74 65 72 6d 69 6e 65 20 77 68 65 74 68 65 72 20  termine whether 
68d0: 74 68 65 20 6d 61 63 68 69 6e 65 20 69 73 20 62  the machine is b
68e0: 69 67 20 6f 72 20 6c 69 74 74 6c 65 20 65 6e 64  ig or little end
68f0: 69 61 6e 2c 0a 2a 2a 20 61 6e 64 20 77 68 65 74  ian,.** and whet
6900: 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 61 74 20  her or not that 
6910: 64 65 74 65 72 6d 69 6e 61 74 69 6f 6e 20 69 73  determination is
6920: 20 72 75 6e 2d 74 69 6d 65 20 6f 72 20 63 6f 6d   run-time or com
6930: 70 69 6c 65 2d 74 69 6d 65 2e 0a 2a 2a 0a 2a 2a  pile-time..**.**
6940: 20 46 6f 72 20 62 65 73 74 20 70 65 72 66 6f 72   For best perfor
6950: 6d 61 6e 63 65 2c 20 61 6e 20 61 74 74 65 6d 70  mance, an attemp
6960: 74 20 69 73 20 6d 61 64 65 20 74 6f 20 67 75 65  t is made to gue
6970: 73 73 20 61 74 20 74 68 65 20 62 79 74 65 2d 6f  ss at the byte-o
6980: 72 64 65 72 0a 2a 2a 20 75 73 69 6e 67 20 43 2d  rder.** using C-
6990: 70 72 65 70 72 6f 63 65 73 73 6f 72 20 6d 61 63  preprocessor mac
69a0: 72 6f 73 2e 20 20 49 66 20 74 68 61 74 20 69 73  ros.  If that is
69b0: 20 75 6e 73 75 63 63 65 73 73 66 75 6c 2c 20 6f   unsuccessful, o
69c0: 72 20 69 66 0a 2a 2a 20 2d 44 53 51 4c 49 54 45  r if.** -DSQLITE
69d0: 5f 42 59 54 45 4f 52 44 45 52 3d 30 20 69 73 20  _BYTEORDER=0 is 
69e0: 73 65 74 2c 20 74 68 65 6e 20 62 79 74 65 2d 6f  set, then byte-o
69f0: 72 64 65 72 20 69 73 20 64 65 74 65 72 6d 69 6e  rder is determin
6a00: 65 64 0a 2a 2a 20 61 74 20 72 75 6e 2d 74 69 6d  ed.** at run-tim
6a10: 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  e..*/.#ifndef SQ
6a20: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 0a 23  LITE_BYTEORDER.#
6a30: 20 69 66 20 64 65 66 69 6e 65 64 28 69 33 38 36   if defined(i386
6a40: 29 20 20 20 20 20 7c 7c 20 64 65 66 69 6e 65 64  )     || defined
6a50: 28 5f 5f 69 33 38 36 5f 5f 29 20 20 20 7c 7c 20  (__i386__)   || 
6a60: 64 65 66 69 6e 65 64 28 5f 4d 5f 49 58 38 36 29  defined(_M_IX86)
6a70: 20 7c 7c 20 20 20 20 5c 0a 20 20 20 20 20 64 65   ||    \.     de
6a80: 66 69 6e 65 64 28 5f 5f 78 38 36 5f 36 34 29 20  fined(__x86_64) 
6a90: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38 36  || defined(__x86
6aa0: 5f 36 34 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65  _64__) || define
6ab0: 64 28 5f 4d 5f 58 36 34 29 20 20 7c 7c 20 20 20  d(_M_X64)  ||   
6ac0: 20 5c 0a 20 20 20 20 20 64 65 66 69 6e 65 64 28   \.     defined(
6ad0: 5f 4d 5f 41 4d 44 36 34 29 20 7c 7c 20 64 65 66  _M_AMD64) || def
6ae0: 69 6e 65 64 28 5f 4d 5f 41 52 4d 29 20 20 20 20  ined(_M_ARM)    
6af0: 20 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 78 38   || defined(__x8
6b00: 36 29 20 20 20 7c 7c 20 20 20 20 5c 0a 20 20 20  6)   ||    \.   
6b10: 20 20 64 65 66 69 6e 65 64 28 5f 5f 61 72 6d 5f    defined(__arm_
6b20: 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53 51  _).#   define SQ
6b30: 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20 20  LITE_BYTEORDER  
6b40: 20 20 31 32 33 34 0a 23 20 65 6c 69 66 20 64 65    1234.# elif de
6b50: 66 69 6e 65 64 28 73 70 61 72 63 29 20 20 20 20  fined(sparc)    
6b60: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 5f 70 70 63  || defined(__ppc
6b70: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
6b80: 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52 20  QLITE_BYTEORDER 
6b90: 20 20 20 34 33 32 31 0a 23 20 65 6c 73 65 0a 23     4321.# else.#
6ba0: 20 20 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45     define SQLITE
6bb0: 5f 42 59 54 45 4f 52 44 45 52 20 30 0a 23 20 65  _BYTEORDER 0.# e
6bc0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20  ndif.#endif.#if 
6bd0: 53 51 4c 49 54 45 5f 42 59 54 45 4f 52 44 45 52  SQLITE_BYTEORDER
6be0: 3d 3d 34 33 32 31 0a 23 20 64 65 66 69 6e 65 20  ==4321.# define 
6bf0: 53 51 4c 49 54 45 5f 42 49 47 45 4e 44 49 41 4e  SQLITE_BIGENDIAN
6c00: 20 20 20 20 31 0a 23 20 64 65 66 69 6e 65 20 53      1.# define S
6c10: 51 4c 49 54 45 5f 4c 49 54 54 4c 45 45 4e 44 49  QLITE_LITTLEENDI
6c20: 41 4e 20 30 0a 23 20 64 65 66 69 6e 65 20 53 51  AN 0.# define SQ
6c30: 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
6c40: 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
6c50: 0a 23 65 6c 69 66 20 53 51 4c 49 54 45 5f 42 59  .#elif SQLITE_BY
6c60: 54 45 4f 52 44 45 52 3d 3d 31 32 33 34 0a 23 20  TEORDER==1234.# 
6c70: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 42 49  define SQLITE_BI
6c80: 47 45 4e 44 49 41 4e 20 20 20 20 30 0a 23 20 64  GENDIAN    0.# d
6c90: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
6ca0: 54 4c 45 45 4e 44 49 41 4e 20 31 0a 23 20 64 65  TLEENDIAN 1.# de
6cb0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 55 54 46 31  fine SQLITE_UTF1
6cc0: 36 4e 41 54 49 56 45 20 20 53 51 4c 49 54 45 5f  6NATIVE  SQLITE_
6cd0: 55 54 46 31 36 4c 45 0a 23 65 6c 73 65 0a 23 20  UTF16LE.#else.# 
6ce0: 69 66 64 65 66 20 53 51 4c 49 54 45 5f 41 4d 41  ifdef SQLITE_AMA
6cf0: 4c 47 41 4d 41 54 49 4f 4e 0a 20 20 63 6f 6e 73  LGAMATION.  cons
6d00: 74 20 69 6e 74 20 73 71 6c 69 74 65 33 6f 6e 65  t int sqlite3one
6d10: 20 3d 20 31 3b 0a 23 20 65 6c 73 65 0a 20 20 65   = 1;.# else.  e
6d20: 78 74 65 72 6e 20 63 6f 6e 73 74 20 69 6e 74 20  xtern const int 
6d30: 73 71 6c 69 74 65 33 6f 6e 65 3b 0a 23 20 65 6e  sqlite3one;.# en
6d40: 64 69 66 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  dif.# define SQL
6d50: 49 54 45 5f 42 49 47 45 4e 44 49 41 4e 20 20 20  ITE_BIGENDIAN   
6d60: 20 28 2a 28 63 68 61 72 20 2a 29 28 26 73 71 6c   (*(char *)(&sql
6d70: 69 74 65 33 6f 6e 65 29 3d 3d 30 29 0a 23 20 64  ite3one)==0).# d
6d80: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4c 49 54  efine SQLITE_LIT
6d90: 54 4c 45 45 4e 44 49 41 4e 20 28 2a 28 63 68 61  TLEENDIAN (*(cha
6da0: 72 20 2a 29 28 26 73 71 6c 69 74 65 33 6f 6e 65  r *)(&sqlite3one
6db0: 29 3d 3d 31 29 0a 23 20 64 65 66 69 6e 65 20 53  )==1).# define S
6dc0: 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
6dd0: 45 20 20 28 53 51 4c 49 54 45 5f 42 49 47 45 4e  E  (SQLITE_BIGEN
6de0: 44 49 41 4e 3f 53 51 4c 49 54 45 5f 55 54 46 31  DIAN?SQLITE_UTF1
6df0: 36 42 45 3a 53 51 4c 49 54 45 5f 55 54 46 31 36  6BE:SQLITE_UTF16
6e00: 4c 45 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  LE).#endif../*.*
6e10: 2a 20 43 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20  * Constants for 
6e20: 74 68 65 20 6c 61 72 67 65 73 74 20 61 6e 64 20  the largest and 
6e30: 73 6d 61 6c 6c 65 73 74 20 70 6f 73 73 69 62 6c  smallest possibl
6e40: 65 20 36 34 2d 62 69 74 20 73 69 67 6e 65 64 20  e 64-bit signed 
6e50: 69 6e 74 65 67 65 72 73 2e 0a 2a 2a 20 54 68 65  integers..** The
6e60: 73 65 20 6d 61 63 72 6f 73 20 61 72 65 20 64 65  se macros are de
6e70: 73 69 67 6e 65 64 20 74 6f 20 77 6f 72 6b 20 63  signed to work c
6e80: 6f 72 72 65 63 74 6c 79 20 6f 6e 20 62 6f 74 68  orrectly on both
6e90: 20 33 32 2d 62 69 74 20 61 6e 64 20 36 34 2d 62   32-bit and 64-b
6ea0: 69 74 0a 2a 2a 20 63 6f 6d 70 69 6c 65 72 73 2e  it.** compilers.
6eb0: 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4c 41 52 47  .*/.#define LARG
6ec0: 45 53 54 5f 49 4e 54 36 34 20 20 28 30 78 66 66  EST_INT64  (0xff
6ed0: 66 66 66 66 66 66 7c 28 28 28 69 36 34 29 30 78  ffffff|(((i64)0x
6ee0: 37 66 66 66 66 66 66 66 29 3c 3c 33 32 29 29 0a  7fffffff)<<32)).
6ef0: 23 64 65 66 69 6e 65 20 53 4d 41 4c 4c 45 53 54  #define SMALLEST
6f00: 5f 49 4e 54 36 34 20 28 28 28 69 36 34 29 2d 31  _INT64 (((i64)-1
6f10: 29 20 2d 20 4c 41 52 47 45 53 54 5f 49 4e 54 36  ) - LARGEST_INT6
6f20: 34 29 0a 0a 2f 2a 0a 2a 2a 20 52 6f 75 6e 64 20  4)../*.** Round 
6f30: 75 70 20 61 20 6e 75 6d 62 65 72 20 74 6f 20 74  up a number to t
6f40: 68 65 20 6e 65 78 74 20 6c 61 72 67 65 72 20 6d  he next larger m
6f50: 75 6c 74 69 70 6c 65 20 6f 66 20 38 2e 20 20 54  ultiple of 8.  T
6f60: 68 69 73 20 69 73 20 75 73 65 64 0a 2a 2a 20 74  his is used.** t
6f70: 6f 20 66 6f 72 63 65 20 38 2d 62 79 74 65 20 61  o force 8-byte a
6f80: 6c 69 67 6e 6d 65 6e 74 20 6f 6e 20 36 34 2d 62  lignment on 64-b
6f90: 69 74 20 61 72 63 68 69 74 65 63 74 75 72 65 73  it architectures
6fa0: 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 52 4f 55  ..*/.#define ROU
6fb0: 4e 44 38 28 78 29 20 20 20 20 20 28 28 28 78 29  ND8(x)     (((x)
6fc0: 2b 37 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20 52  +7)&~7)../*.** R
6fd0: 6f 75 6e 64 20 64 6f 77 6e 20 74 6f 20 74 68 65  ound down to the
6fe0: 20 6e 65 61 72 65 73 74 20 6d 75 6c 74 69 70 6c   nearest multipl
6ff0: 65 20 6f 66 20 38 0a 2a 2f 0a 23 64 65 66 69 6e  e of 8.*/.#defin
7000: 65 20 52 4f 55 4e 44 44 4f 57 4e 38 28 78 29 20  e ROUNDDOWN8(x) 
7010: 28 28 78 29 26 7e 37 29 0a 0a 2f 2a 0a 2a 2a 20  ((x)&~7)../*.** 
7020: 41 73 73 65 72 74 20 74 68 61 74 20 74 68 65 20  Assert that the 
7030: 70 6f 69 6e 74 65 72 20 58 20 69 73 20 61 6c 69  pointer X is ali
7040: 67 6e 65 64 20 74 6f 20 61 6e 20 38 2d 62 79 74  gned to an 8-byt
7050: 65 20 62 6f 75 6e 64 61 72 79 2e 20 20 54 68 69  e boundary.  Thi
7060: 73 0a 2a 2a 20 6d 61 63 72 6f 20 69 73 20 75 73  s.** macro is us
7070: 65 64 20 6f 6e 6c 79 20 77 69 74 68 69 6e 20 61  ed only within a
7080: 73 73 65 72 74 28 29 20 74 6f 20 76 65 72 69 66  ssert() to verif
7090: 79 20 74 68 61 74 20 74 68 65 20 63 6f 64 65 20  y that the code 
70a0: 67 65 74 73 0a 2a 2a 20 61 6c 6c 20 61 6c 69 67  gets.** all alig
70b0: 6e 6d 65 6e 74 20 72 65 73 74 72 69 63 74 69 6f  nment restrictio
70c0: 6e 73 20 63 6f 72 72 65 63 74 2e 0a 2a 2a 0a 2a  ns correct..**.*
70d0: 2a 20 45 78 63 65 70 74 2c 20 69 66 20 53 51 4c  * Except, if SQL
70e0: 49 54 45 5f 34 5f 42 59 54 45 5f 41 4c 49 47 4e  ITE_4_BYTE_ALIGN
70f0: 45 44 5f 4d 41 4c 4c 4f 43 20 69 73 20 64 65 66  ED_MALLOC is def
7100: 69 6e 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 2a  ined, then the.*
7110: 2a 20 75 6e 64 65 72 6c 79 69 6e 67 20 6d 61 6c  * underlying mal
7120: 6c 6f 63 28 29 20 69 6d 70 6c 65 6d 65 6e 74 61  loc() implementa
7130: 74 69 6f 6e 20 6d 69 67 68 74 20 72 65 74 75 72  tion might retur
7140: 6e 20 75 73 20 34 2d 62 79 74 65 20 61 6c 69 67  n us 4-byte alig
7150: 6e 65 64 0a 2a 2a 20 70 6f 69 6e 74 65 72 73 2e  ned.** pointers.
7160: 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20    In that case, 
7170: 6f 6e 6c 79 20 76 65 72 69 66 79 20 34 2d 62 79  only verify 4-by
7180: 74 65 20 61 6c 69 67 6e 6d 65 6e 74 2e 0a 2a 2f  te alignment..*/
7190: 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 34  .#ifdef SQLITE_4
71a0: 5f 42 59 54 45 5f 41 4c 49 47 4e 45 44 5f 4d 41  _BYTE_ALIGNED_MA
71b0: 4c 4c 4f 43 0a 23 20 64 65 66 69 6e 65 20 45 49  LLOC.# define EI
71c0: 47 48 54 5f 42 59 54 45 5f 41 4c 49 47 4e 4d 45  GHT_BYTE_ALIGNME
71d0: 4e 54 28 58 29 20 20 20 28 28 28 28 63 68 61 72  NT(X)   ((((char
71e0: 2a 29 28 58 29 20 2d 20 28 63 68 61 72 2a 29 30  *)(X) - (char*)0
71f0: 29 26 33 29 3d 3d 30 29 0a 23 65 6c 73 65 0a 23  )&3)==0).#else.#
7200: 20 64 65 66 69 6e 65 20 45 49 47 48 54 5f 42 59   define EIGHT_BY
7210: 54 45 5f 41 4c 49 47 4e 4d 45 4e 54 28 58 29 20  TE_ALIGNMENT(X) 
7220: 20 20 28 28 28 28 63 68 61 72 2a 29 28 58 29 20    ((((char*)(X) 
7230: 2d 20 28 63 68 61 72 2a 29 30 29 26 37 29 3d 3d  - (char*)0)&7)==
7240: 30 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  0).#endif../*.**
7250: 20 44 69 73 61 62 6c 65 20 4d 4d 41 50 20 6f 6e   Disable MMAP on
7260: 20 70 6c 61 74 66 6f 72 6d 73 20 77 68 65 72 65   platforms where
7270: 20 69 74 20 69 73 20 6b 6e 6f 77 6e 20 74 6f 20   it is known to 
7280: 6e 6f 74 20 77 6f 72 6b 0a 2a 2f 0a 23 69 66 20  not work.*/.#if 
7290: 64 65 66 69 6e 65 64 28 5f 5f 4f 70 65 6e 42 53  defined(__OpenBS
72a0: 44 5f 5f 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  D__) || defined(
72b0: 5f 5f 51 4e 58 4e 54 4f 5f 5f 29 0a 23 20 75 6e  __QNXNTO__).# un
72c0: 64 65 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  def SQLITE_MAX_M
72d0: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
72e0: 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41  e SQLITE_MAX_MMA
72f0: 50 5f 53 49 5a 45 20 30 0a 23 65 6e 64 69 66 0a  P_SIZE 0.#endif.
7300: 0a 2f 2a 0a 2a 2a 20 44 65 66 61 75 6c 74 20 6d  ./*.** Default m
7310: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 6d  aximum size of m
7320: 65 6d 6f 72 79 20 75 73 65 64 20 62 79 20 6d 65  emory used by me
7330: 6d 6f 72 79 2d 6d 61 70 70 65 64 20 49 2f 4f 20  mory-mapped I/O 
7340: 69 6e 20 74 68 65 20 56 46 53 0a 2a 2f 0a 23 69  in the VFS.*/.#i
7350: 66 64 65 66 20 5f 5f 41 50 50 4c 45 5f 5f 0a 23  fdef __APPLE__.#
7360: 20 69 6e 63 6c 75 64 65 20 3c 54 61 72 67 65 74   include <Target
7370: 43 6f 6e 64 69 74 69 6f 6e 61 6c 73 2e 68 3e 0a  Conditionals.h>.
7380: 23 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53  #endif.#ifndef S
7390: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
73a0: 49 5a 45 0a 23 20 69 66 20 64 65 66 69 6e 65 64  IZE.# if defined
73b0: 28 5f 5f 6c 69 6e 75 78 5f 5f 29 20 5c 0a 20 20  (__linux__) \.  
73c0: 7c 7c 20 64 65 66 69 6e 65 64 28 5f 57 49 4e 33  || defined(_WIN3
73d0: 32 29 20 5c 0a 20 20 7c 7c 20 28 64 65 66 69 6e  2) \.  || (defin
73e0: 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29 20 26 26  ed(__APPLE__) &&
73f0: 20 64 65 66 69 6e 65 64 28 5f 5f 4d 41 43 48 5f   defined(__MACH_
7400: 5f 29 29 20 5c 0a 20 20 7c 7c 20 64 65 66 69 6e  _)) \.  || defin
7410: 65 64 28 5f 5f 73 75 6e 29 20 5c 0a 20 20 7c 7c  ed(__sun) \.  ||
7420: 20 64 65 66 69 6e 65 64 28 5f 5f 46 72 65 65 42   defined(__FreeB
7430: 53 44 5f 5f 29 20 5c 0a 20 20 7c 7c 20 64 65 66  SD__) \.  || def
7440: 69 6e 65 64 28 5f 5f 44 72 61 67 6f 6e 46 6c 79  ined(__DragonFly
7450: 5f 5f 29 0a 23 20 20 20 64 65 66 69 6e 65 20 53  __).#   define S
7460: 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50 5f 53  QLITE_MAX_MMAP_S
7470: 49 5a 45 20 30 78 37 66 66 66 30 30 30 30 20 20  IZE 0x7fff0000  
7480: 2f 2a 20 32 31 34 37 34 31 38 31 31 32 20 2a 2f  /* 2147418112 */
7490: 0a 23 20 65 6c 73 65 0a 23 20 20 20 64 65 66 69  .# else.#   defi
74a0: 6e 65 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  ne SQLITE_MAX_MM
74b0: 41 50 5f 53 49 5a 45 20 30 0a 23 20 65 6e 64 69  AP_SIZE 0.# endi
74c0: 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  f.#endif../*.** 
74d0: 54 68 65 20 64 65 66 61 75 6c 74 20 4d 4d 41 50  The default MMAP
74e0: 5f 53 49 5a 45 20 69 73 20 7a 65 72 6f 20 6f 6e  _SIZE is zero on
74f0: 20 61 6c 6c 20 70 6c 61 74 66 6f 72 6d 73 2e 20   all platforms. 
7500: 20 4f 72 2c 20 65 76 65 6e 20 69 66 20 61 20 6c   Or, even if a l
7510: 61 72 67 65 72 0a 2a 2a 20 64 65 66 61 75 6c 74  arger.** default
7520: 20 4d 4d 41 50 5f 53 49 5a 45 20 69 73 20 73 70   MMAP_SIZE is sp
7530: 65 63 69 66 69 65 64 20 61 74 20 63 6f 6d 70 69  ecified at compi
7540: 6c 65 2d 74 69 6d 65 2c 20 6d 61 6b 65 20 73 75  le-time, make su
7550: 72 65 20 74 68 61 74 20 69 74 20 64 6f 65 73 0a  re that it does.
7560: 2a 2a 20 6e 6f 74 20 65 78 63 65 65 64 20 74 68  ** not exceed th
7570: 65 20 6d 61 78 69 6d 75 6d 20 6d 6d 61 70 20 73  e maximum mmap s
7580: 69 7a 65 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ize..*/.#ifndef 
7590: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
75a0: 4d 41 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e  MAP_SIZE.# defin
75b0: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
75c0: 5f 4d 4d 41 50 5f 53 49 5a 45 20 30 0a 23 65 6e  _MMAP_SIZE 0.#en
75d0: 64 69 66 0a 23 69 66 20 53 51 4c 49 54 45 5f 44  dif.#if SQLITE_D
75e0: 45 46 41 55 4c 54 5f 4d 4d 41 50 5f 53 49 5a 45  EFAULT_MMAP_SIZE
75f0: 3e 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50  >SQLITE_MAX_MMAP
7600: 5f 53 49 5a 45 0a 23 20 75 6e 64 65 66 20 53 51  _SIZE.# undef SQ
7610: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d 4d 41  LITE_DEFAULT_MMA
7620: 50 5f 53 49 5a 45 0a 23 20 64 65 66 69 6e 65 20  P_SIZE.# define 
7630: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 4d  SQLITE_DEFAULT_M
7640: 4d 41 50 5f 53 49 5a 45 20 53 51 4c 49 54 45 5f  MAP_SIZE SQLITE_
7650: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 0a 23 65  MAX_MMAP_SIZE.#e
7660: 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 4f 6e 6c 79  ndif../*.** Only
7670: 20 6f 6e 65 20 6f 66 20 53 51 4c 49 54 45 5f 45   one of SQLITE_E
7680: 4e 41 42 4c 45 5f 53 54 41 54 33 20 6f 72 20 53  NABLE_STAT3 or S
7690: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
76a0: 54 34 20 63 61 6e 20 62 65 20 64 65 66 69 6e 65  T4 can be define
76b0: 64 2e 0a 2a 2a 20 50 72 69 6f 72 69 74 79 20 69  d..** Priority i
76c0: 73 20 67 69 76 65 6e 20 74 6f 20 53 51 4c 49 54  s given to SQLIT
76d0: 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 34 2e 20  E_ENABLE_STAT4. 
76e0: 20 49 66 20 65 69 74 68 65 72 20 61 72 65 20 64   If either are d
76f0: 65 66 69 6e 65 64 2c 20 61 6c 73 6f 0a 2a 2a 20  efined, also.** 
7700: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
7710: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7720: 41 54 34 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  AT4.*/.#ifdef SQ
7730: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
7740: 34 0a 23 20 75 6e 64 65 66 20 53 51 4c 49 54 45  4.# undef SQLITE
7750: 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a 23 20  _ENABLE_STAT3.# 
7760: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 4e  define SQLITE_EN
7770: 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f 53 54  ABLE_STAT3_OR_ST
7780: 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51 4c 49  AT4 1.#elif SQLI
7790: 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 0a  TE_ENABLE_STAT3.
77a0: 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
77b0: 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f 4f 52 5f  ENABLE_STAT3_OR_
77c0: 53 54 41 54 34 20 31 0a 23 65 6c 69 66 20 53 51  STAT4 1.#elif SQ
77d0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54  LITE_ENABLE_STAT
77e0: 33 5f 4f 52 5f 53 54 41 54 34 0a 23 20 75 6e 64  3_OR_STAT4.# und
77f0: 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
7800: 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
7810: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 53 45  #endif../*.** SE
7820: 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45  LECTTRACE_ENABLE
7830: 44 20 77 69 6c 6c 20 62 65 20 65 69 74 68 65 72  D will be either
7840: 20 31 20 6f 72 20 30 20 64 65 70 65 6e 64 69 6e   1 or 0 dependin
7850: 67 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20  g on whether or 
7860: 6e 6f 74 0a 2a 2a 20 74 68 65 20 53 65 6c 65 63  not.** the Selec
7870: 74 20 71 75 65 72 79 20 67 65 6e 65 72 61 74 6f  t query generato
7880: 72 20 74 72 61 63 69 6e 67 20 6c 6f 67 69 63 20  r tracing logic 
7890: 69 73 20 74 75 72 6e 65 64 20 6f 6e 2e 0a 2a 2f  is turned on..*/
78a0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
78b0: 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
78c0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
78d0: 42 4c 45 5f 53 45 4c 45 43 54 54 52 41 43 45 29  BLE_SELECTTRACE)
78e0: 0a 23 20 64 65 66 69 6e 65 20 53 45 4c 45 43 54  .# define SELECT
78f0: 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 20 31 0a  TRACE_ENABLED 1.
7900: 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 53  #else.# define S
7910: 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
7920: 45 44 20 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  ED 0.#endif../*.
7930: 2a 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ** An instance o
7940: 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  f the following 
7950: 73 74 72 75 63 74 75 72 65 20 69 73 20 75 73 65  structure is use
7960: 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 62  d to store the b
7970: 75 73 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63  usy-handler.** c
7980: 61 6c 6c 62 61 63 6b 20 66 6f 72 20 61 20 67 69  allback for a gi
7990: 76 65 6e 20 73 71 6c 69 74 65 20 68 61 6e 64 6c  ven sqlite handl
79a0: 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 73 71 6c  e..**.** The sql
79b0: 69 74 65 2e 62 75 73 79 48 61 6e 64 6c 65 72 20  ite.busyHandler 
79c0: 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 73 71  member of the sq
79d0: 6c 69 74 65 20 73 74 72 75 63 74 20 63 6f 6e 74  lite struct cont
79e0: 61 69 6e 73 20 74 68 65 20 62 75 73 79 0a 2a 2a  ains the busy.**
79f0: 20 63 61 6c 6c 62 61 63 6b 20 66 6f 72 20 74 68   callback for th
7a00: 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
7a10: 65 2e 20 45 61 63 68 20 70 61 67 65 72 20 6f 70  e. Each pager op
7a20: 65 6e 65 64 20 76 69 61 20 74 68 65 20 73 71 6c  ened via the sql
7a30: 69 74 65 0a 2a 2a 20 68 61 6e 64 6c 65 20 69 73  ite.** handle is
7a40: 20 70 61 73 73 65 64 20 61 20 70 6f 69 6e 74 65   passed a pointe
7a50: 72 20 74 6f 20 73 71 6c 69 74 65 2e 62 75 73 79  r to sqlite.busy
7a60: 48 61 6e 64 6c 65 72 2e 20 54 68 65 20 62 75 73  Handler. The bus
7a70: 79 2d 68 61 6e 64 6c 65 72 0a 2a 2a 20 63 61 6c  y-handler.** cal
7a80: 6c 62 61 63 6b 20 69 73 20 63 75 72 72 65 6e 74  lback is current
7a90: 6c 79 20 69 6e 76 6f 6b 65 64 20 6f 6e 6c 79 20  ly invoked only 
7aa0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 70 61 67 65  from within page
7ab0: 72 2e 63 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20  r.c..*/.typedef 
7ac0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
7ad0: 65 72 20 42 75 73 79 48 61 6e 64 6c 65 72 3b 0a  er BusyHandler;.
7ae0: 73 74 72 75 63 74 20 42 75 73 79 48 61 6e 64 6c  struct BusyHandl
7af0: 65 72 20 7b 0a 20 20 69 6e 74 20 28 2a 78 46 75  er {.  int (*xFu
7b00: 6e 63 29 28 76 6f 69 64 20 2a 2c 69 6e 74 29 3b  nc)(void *,int);
7b10: 20 20 2f 2a 20 54 68 65 20 62 75 73 79 20 63 61    /* The busy ca
7b20: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76 6f 69 64  llback */.  void
7b30: 20 2a 70 41 72 67 3b 20 20 20 20 20 20 20 20 20   *pArg;         
7b40: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
7b50: 61 72 67 20 74 6f 20 62 75 73 79 20 63 61 6c 6c  arg to busy call
7b60: 62 61 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 6e 42  back */.  int nB
7b70: 75 73 79 3b 20 20 20 20 20 20 20 20 20 20 20 20  usy;            
7b80: 20 20 20 20 20 2f 2a 20 49 6e 63 72 65 6d 65 6e       /* Incremen
7b90: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 62 75  ted with each bu
7ba0: 73 79 20 63 61 6c 6c 20 2a 2f 0a 7d 3b 0a 0a 2f  sy call */.};../
7bb0: 2a 0a 2a 2a 20 4e 61 6d 65 20 6f 66 20 74 68 65  *.** Name of the
7bc0: 20 6d 61 73 74 65 72 20 64 61 74 61 62 61 73 65   master database
7bd0: 20 74 61 62 6c 65 2e 20 20 54 68 65 20 6d 61 73   table.  The mas
7be0: 74 65 72 20 64 61 74 61 62 61 73 65 20 74 61 62  ter database tab
7bf0: 6c 65 0a 2a 2a 20 69 73 20 61 20 73 70 65 63 69  le.** is a speci
7c00: 61 6c 20 74 61 62 6c 65 20 74 68 61 74 20 68 6f  al table that ho
7c10: 6c 64 73 20 74 68 65 20 6e 61 6d 65 73 20 61 6e  lds the names an
7c20: 64 20 61 74 74 72 69 62 75 74 65 73 20 6f 66 20  d attributes of 
7c30: 61 6c 6c 0a 2a 2a 20 75 73 65 72 20 74 61 62 6c  all.** user tabl
7c40: 65 73 20 61 6e 64 20 69 6e 64 69 63 65 73 2e 0a  es and indices..
7c50: 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45  */.#define MASTE
7c60: 52 5f 4e 41 4d 45 20 20 20 20 20 20 20 22 73 71  R_NAME       "sq
7c70: 6c 69 74 65 5f 6d 61 73 74 65 72 22 0a 23 64 65  lite_master".#de
7c80: 66 69 6e 65 20 54 45 4d 50 5f 4d 41 53 54 45 52  fine TEMP_MASTER
7c90: 5f 4e 41 4d 45 20 20 22 73 71 6c 69 74 65 5f 74  _NAME  "sqlite_t
7ca0: 65 6d 70 5f 6d 61 73 74 65 72 22 0a 0a 2f 2a 0a  emp_master"../*.
7cb0: 2a 2a 20 54 68 65 20 72 6f 6f 74 2d 70 61 67 65  ** The root-page
7cc0: 20 6f 66 20 74 68 65 20 6d 61 73 74 65 72 20 64   of the master d
7cd0: 61 74 61 62 61 73 65 20 74 61 62 6c 65 2e 0a 2a  atabase table..*
7ce0: 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 54 45 52  /.#define MASTER
7cf0: 5f 52 4f 4f 54 20 20 20 20 20 20 20 31 0a 0a 2f  _ROOT       1../
7d00: 2a 0a 2a 2a 20 54 68 65 20 6e 61 6d 65 20 6f 66  *.** The name of
7d10: 20 74 68 65 20 73 63 68 65 6d 61 20 74 61 62 6c   the schema tabl
7d20: 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 43  e..*/.#define SC
7d30: 48 45 4d 41 5f 54 41 42 4c 45 28 78 29 20 20 28  HEMA_TABLE(x)  (
7d40: 28 21 4f 4d 49 54 5f 54 45 4d 50 44 42 29 26 26  (!OMIT_TEMPDB)&&
7d50: 28 78 3d 3d 31 29 3f 54 45 4d 50 5f 4d 41 53 54  (x==1)?TEMP_MAST
7d60: 45 52 5f 4e 41 4d 45 3a 4d 41 53 54 45 52 5f 4e  ER_NAME:MASTER_N
7d70: 41 4d 45 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 63 6f  AME)../*.** A co
7d80: 6e 76 65 6e 69 65 6e 63 65 20 6d 61 63 72 6f 20  nvenience macro 
7d90: 74 68 61 74 20 72 65 74 75 72 6e 73 20 74 68 65  that returns the
7da0: 20 6e 75 6d 62 65 72 20 6f 66 20 65 6c 65 6d 65   number of eleme
7db0: 6e 74 73 20 69 6e 0a 2a 2a 20 61 6e 20 61 72 72  nts in.** an arr
7dc0: 61 79 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 41  ay..*/.#define A
7dd0: 72 72 61 79 53 69 7a 65 28 58 29 20 20 20 20 28  rraySize(X)    (
7de0: 28 69 6e 74 29 28 73 69 7a 65 6f 66 28 58 29 2f  (int)(sizeof(X)/
7df0: 73 69 7a 65 6f 66 28 58 5b 30 5d 29 29 29 0a 0a  sizeof(X[0])))..
7e00: 2f 2a 0a 2a 2a 20 44 65 74 65 72 6d 69 6e 65 20  /*.** Determine 
7e10: 69 66 20 74 68 65 20 61 72 67 75 6d 65 6e 74 20  if the argument 
7e20: 69 73 20 61 20 70 6f 77 65 72 20 6f 66 20 74 77  is a power of tw
7e30: 6f 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 49 73 50  o.*/.#define IsP
7e40: 6f 77 65 72 4f 66 54 77 6f 28 58 29 20 28 28 28  owerOfTwo(X) (((
7e50: 58 29 26 28 28 58 29 2d 31 29 29 3d 3d 30 29 0a  X)&((X)-1))==0).
7e60: 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f  ./*.** The follo
7e70: 77 69 6e 67 20 76 61 6c 75 65 20 61 73 20 61 20  wing value as a 
7e80: 64 65 73 74 72 75 63 74 6f 72 20 6d 65 61 6e 73  destructor means
7e90: 20 74 6f 20 75 73 65 20 73 71 6c 69 74 65 33 44   to use sqlite3D
7ea0: 62 46 72 65 65 28 29 2e 0a 2a 2a 20 54 68 65 20  bFree()..** The 
7eb0: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 29 20  sqlite3DbFree() 
7ec0: 72 6f 75 74 69 6e 65 20 72 65 71 75 69 72 65 73  routine requires
7ed0: 20 74 77 6f 20 70 61 72 61 6d 65 74 65 72 73 20   two parameters 
7ee0: 69 6e 73 74 65 61 64 20 6f 66 20 74 68 65 0a 2a  instead of the.*
7ef0: 2a 20 6f 6e 65 20 70 61 72 61 6d 65 74 65 72 20  * one parameter 
7f00: 74 68 61 74 20 64 65 73 74 72 75 63 74 6f 72 73  that destructors
7f10: 20 6e 6f 72 6d 61 6c 6c 79 20 77 61 6e 74 2e 20   normally want. 
7f20: 20 53 6f 20 77 65 20 68 61 76 65 20 74 6f 20 69   So we have to i
7f30: 6e 74 72 6f 64 75 63 65 0a 2a 2a 20 74 68 69 73  ntroduce.** this
7f40: 20 6d 61 67 69 63 20 76 61 6c 75 65 20 74 68 61   magic value tha
7f50: 74 20 74 68 65 20 63 6f 64 65 20 6b 6e 6f 77 73  t the code knows
7f60: 20 74 6f 20 68 61 6e 64 6c 65 20 64 69 66 66 65   to handle diffe
7f70: 72 65 6e 74 6c 79 2e 20 20 41 6e 79 0a 2a 2a 20  rently.  Any.** 
7f80: 70 6f 69 6e 74 65 72 20 77 69 6c 6c 20 77 6f 72  pointer will wor
7f90: 6b 20 68 65 72 65 20 61 73 20 6c 6f 6e 67 20 61  k here as long a
7fa0: 73 20 69 74 20 69 73 20 64 69 73 74 69 6e 63 74  s it is distinct
7fb0: 20 66 72 6f 6d 20 53 51 4c 49 54 45 5f 53 54 41   from SQLITE_STA
7fc0: 54 49 43 0a 2a 2a 20 61 6e 64 20 53 51 4c 49 54  TIC.** and SQLIT
7fd0: 45 5f 54 52 41 4e 53 49 45 4e 54 2e 0a 2a 2f 0a  E_TRANSIENT..*/.
7fe0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44  #define SQLITE_D
7ff0: 59 4e 41 4d 49 43 20 20 20 28 28 73 71 6c 69 74  YNAMIC   ((sqlit
8000: 65 33 5f 64 65 73 74 72 75 63 74 6f 72 5f 74 79  e3_destructor_ty
8010: 70 65 29 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  pe)sqlite3Malloc
8020: 53 69 7a 65 29 0a 0a 2f 2a 0a 2a 2a 20 57 68 65  Size)../*.** Whe
8030: 6e 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  n SQLITE_OMIT_WS
8040: 44 20 69 73 20 64 65 66 69 6e 65 64 2c 20 69 74  D is defined, it
8050: 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65 20   means that the 
8060: 74 61 72 67 65 74 20 70 6c 61 74 66 6f 72 6d 20  target platform 
8070: 64 6f 65 73 0a 2a 2a 20 6e 6f 74 20 73 75 70 70  does.** not supp
8080: 6f 72 74 20 57 72 69 74 61 62 6c 65 20 53 74 61  ort Writable Sta
8090: 74 69 63 20 44 61 74 61 20 28 57 53 44 29 20 73  tic Data (WSD) s
80a0: 75 63 68 20 61 73 20 67 6c 6f 62 61 6c 20 61 6e  uch as global an
80b0: 64 20 73 74 61 74 69 63 20 76 61 72 69 61 62 6c  d static variabl
80c0: 65 73 2e 0a 2a 2a 20 41 6c 6c 20 76 61 72 69 61  es..** All varia
80d0: 62 6c 65 73 20 6d 75 73 74 20 65 69 74 68 65 72  bles must either
80e0: 20 62 65 20 6f 6e 20 74 68 65 20 73 74 61 63 6b   be on the stack
80f0: 20 6f 72 20 64 79 6e 61 6d 69 63 61 6c 6c 79 20   or dynamically 
8100: 61 6c 6c 6f 63 61 74 65 64 20 66 72 6f 6d 0a 2a  allocated from.*
8110: 2a 20 74 68 65 20 68 65 61 70 2e 20 20 57 68 65  * the heap.  Whe
8120: 6e 20 57 53 44 20 69 73 20 75 6e 73 75 70 70 6f  n WSD is unsuppo
8130: 72 74 65 64 2c 20 74 68 65 20 76 61 72 69 61 62  rted, the variab
8140: 6c 65 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20  le declarations 
8150: 73 63 61 74 74 65 72 65 64 0a 2a 2a 20 74 68 72  scattered.** thr
8160: 6f 75 67 68 6f 75 74 20 74 68 65 20 53 51 4c 69  oughout the SQLi
8170: 74 65 20 63 6f 64 65 20 6d 75 73 74 20 62 65 63  te code must bec
8180: 6f 6d 65 20 63 6f 6e 73 74 61 6e 74 73 20 69 6e  ome constants in
8190: 73 74 65 61 64 2e 20 20 54 68 65 20 53 51 4c 49  stead.  The SQLI
81a0: 54 45 5f 57 53 44 0a 2a 2a 20 6d 61 63 72 6f 20  TE_WSD.** macro 
81b0: 69 73 20 75 73 65 64 20 66 6f 72 20 74 68 69 73  is used for this
81c0: 20 70 75 72 70 6f 73 65 2e 20 20 41 6e 64 20 69   purpose.  And i
81d0: 6e 73 74 65 61 64 20 6f 66 20 72 65 66 65 72 65  nstead of refere
81e0: 6e 63 69 6e 67 20 74 68 65 20 76 61 72 69 61 62  ncing the variab
81f0: 6c 65 0a 2a 2a 20 64 69 72 65 63 74 6c 79 2c 20  le.** directly, 
8200: 77 65 20 75 73 65 20 69 74 73 20 63 6f 6e 73 74  we use its const
8210: 61 6e 74 20 61 73 20 61 20 6b 65 79 20 74 6f 20  ant as a key to 
8220: 6c 6f 6f 6b 75 70 20 74 68 65 20 72 75 6e 2d 74  lookup the run-t
8230: 69 6d 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a  ime allocated.**
8240: 20 62 75 66 66 65 72 20 74 68 61 74 20 68 6f 6c   buffer that hol
8250: 64 73 20 72 65 61 6c 20 76 61 72 69 61 62 6c 65  ds real variable
8260: 2e 20 20 54 68 65 20 63 6f 6e 73 74 61 6e 74 20  .  The constant 
8270: 69 73 20 61 6c 73 6f 20 74 68 65 20 69 6e 69 74  is also the init
8280: 69 61 6c 69 7a 65 72 0a 2a 2a 20 66 6f 72 20 74  ializer.** for t
8290: 68 65 20 72 75 6e 2d 74 69 6d 65 20 61 6c 6c 6f  he run-time allo
82a0: 63 61 74 65 64 20 62 75 66 66 65 72 2e 0a 2a 2a  cated buffer..**
82b0: 0a 2a 2a 20 49 6e 20 74 68 65 20 75 73 75 61 6c  .** In the usual
82c0: 20 63 61 73 65 20 77 68 65 72 65 20 57 53 44 20   case where WSD 
82d0: 69 73 20 73 75 70 70 6f 72 74 65 64 2c 20 74 68  is supported, th
82e0: 65 20 53 51 4c 49 54 45 5f 57 53 44 20 61 6e 64  e SQLITE_WSD and
82f0: 20 47 4c 4f 42 41 4c 0a 2a 2a 20 6d 61 63 72 6f   GLOBAL.** macro
8300: 73 20 62 65 63 6f 6d 65 20 6e 6f 2d 6f 70 73 20  s become no-ops 
8310: 61 6e 64 20 68 61 76 65 20 7a 65 72 6f 20 70 65  and have zero pe
8320: 72 66 6f 72 6d 61 6e 63 65 20 69 6d 70 61 63 74  rformance impact
8330: 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ..*/.#ifdef SQLI
8340: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 23 64  TE_OMIT_WSD.  #d
8350: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53 44  efine SQLITE_WSD
8360: 20 63 6f 6e 73 74 0a 20 20 23 64 65 66 69 6e 65   const.  #define
8370: 20 47 4c 4f 42 41 4c 28 74 2c 76 29 20 28 2a 28   GLOBAL(t,v) (*(
8380: 74 2a 29 73 71 6c 69 74 65 33 5f 77 73 64 5f 66  t*)sqlite3_wsd_f
8390: 69 6e 64 28 28 76 6f 69 64 2a 29 26 28 76 29 2c  ind((void*)&(v),
83a0: 20 73 69 7a 65 6f 66 28 76 29 29 29 0a 20 20 23   sizeof(v))).  #
83b0: 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 47 6c  define sqlite3Gl
83c0: 6f 62 61 6c 43 6f 6e 66 69 67 20 47 4c 4f 42 41  obalConfig GLOBA
83d0: 4c 28 73 74 72 75 63 74 20 53 71 6c 69 74 65 33  L(struct Sqlite3
83e0: 43 6f 6e 66 69 67 2c 20 73 71 6c 69 74 65 33 43  Config, sqlite3C
83f0: 6f 6e 66 69 67 29 0a 20 20 69 6e 74 20 73 71 6c  onfig).  int sql
8400: 69 74 65 33 5f 77 73 64 5f 69 6e 69 74 28 69 6e  ite3_wsd_init(in
8410: 74 20 4e 2c 20 69 6e 74 20 4a 29 3b 0a 20 20 76  t N, int J);.  v
8420: 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 77 73 64  oid *sqlite3_wsd
8430: 5f 66 69 6e 64 28 76 6f 69 64 20 2a 4b 2c 20 69  _find(void *K, i
8440: 6e 74 20 4c 29 3b 0a 23 65 6c 73 65 0a 20 20 23  nt L);.#else.  #
8450: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 57 53  define SQLITE_WS
8460: 44 0a 20 20 23 64 65 66 69 6e 65 20 47 4c 4f 42  D.  #define GLOB
8470: 41 4c 28 74 2c 76 29 20 76 0a 20 20 23 64 65 66  AL(t,v) v.  #def
8480: 69 6e 65 20 73 71 6c 69 74 65 33 47 6c 6f 62 61  ine sqlite3Globa
8490: 6c 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33 43  lConfig sqlite3C
84a0: 6f 6e 66 69 67 0a 23 65 6e 64 69 66 0a 0a 2f 2a  onfig.#endif../*
84b0: 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
84c0: 67 20 6d 61 63 72 6f 73 20 61 72 65 20 75 73 65  g macros are use
84d0: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 63 6f  d to suppress co
84e0: 6d 70 69 6c 65 72 20 77 61 72 6e 69 6e 67 73 20  mpiler warnings 
84f0: 61 6e 64 20 74 6f 0a 2a 2a 20 6d 61 6b 65 20 69  and to.** make i
8500: 74 20 63 6c 65 61 72 20 74 6f 20 68 75 6d 61 6e  t clear to human
8510: 20 72 65 61 64 65 72 73 20 77 68 65 6e 20 61 20   readers when a 
8520: 66 75 6e 63 74 69 6f 6e 20 70 61 72 61 6d 65 74  function paramet
8530: 65 72 20 69 73 20 64 65 6c 69 62 65 72 61 74 65  er is deliberate
8540: 6c 79 0a 2a 2a 20 6c 65 66 74 20 75 6e 75 73 65  ly.** left unuse
8550: 64 20 77 69 74 68 69 6e 20 74 68 65 20 62 6f 64  d within the bod
8560: 79 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 2e  y of a function.
8570: 20 54 68 69 73 20 75 73 75 61 6c 6c 79 20 68 61   This usually ha
8580: 70 70 65 6e 73 20 77 68 65 6e 0a 2a 2a 20 61 20  ppens when.** a 
8590: 66 75 6e 63 74 69 6f 6e 20 69 73 20 63 61 6c 6c  function is call
85a0: 65 64 20 76 69 61 20 61 20 66 75 6e 63 74 69 6f  ed via a functio
85b0: 6e 20 70 6f 69 6e 74 65 72 2e 20 46 6f 72 20 65  n pointer. For e
85c0: 78 61 6d 70 6c 65 20 74 68 65 0a 2a 2a 20 69 6d  xample the.** im
85d0: 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20  plementation of 
85e0: 61 6e 20 53 51 4c 20 61 67 67 72 65 67 61 74 65  an SQL aggregate
85f0: 20 73 74 65 70 20 63 61 6c 6c 62 61 63 6b 20 6d   step callback m
8600: 61 79 20 6e 6f 74 20 75 73 65 20 74 68 65 0a 2a  ay not use the.*
8610: 2a 20 70 61 72 61 6d 65 74 65 72 20 69 6e 64 69  * parameter indi
8620: 63 61 74 69 6e 67 20 74 68 65 20 6e 75 6d 62 65  cating the numbe
8630: 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 70  r of arguments p
8640: 61 73 73 65 64 20 74 6f 20 74 68 65 20 61 67 67  assed to the agg
8650: 72 65 67 61 74 65 2c 0a 2a 2a 20 69 66 20 69 74  regate,.** if it
8660: 20 6b 6e 6f 77 73 20 74 68 61 74 20 74 68 69 73   knows that this
8670: 20 69 73 20 65 6e 66 6f 72 63 65 64 20 65 6c 73   is enforced els
8680: 65 77 68 65 72 65 2e 0a 2a 2a 0a 2a 2a 20 57 68  ewhere..**.** Wh
8690: 65 6e 20 61 20 66 75 6e 63 74 69 6f 6e 20 70 61  en a function pa
86a0: 72 61 6d 65 74 65 72 20 69 73 20 6e 6f 74 20 75  rameter is not u
86b0: 73 65 64 20 61 74 20 61 6c 6c 20 77 69 74 68 69  sed at all withi
86c0: 6e 20 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20  n the body of a 
86d0: 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 69 74 20  function,.** it 
86e0: 69 73 20 67 65 6e 65 72 61 6c 6c 79 20 6e 61 6d  is generally nam
86f0: 65 64 20 22 4e 6f 74 55 73 65 64 22 20 6f 72 20  ed "NotUsed" or 
8700: 22 4e 6f 74 55 73 65 64 32 22 20 74 6f 20 6d 61  "NotUsed2" to ma
8710: 6b 65 20 74 68 69 6e 67 73 20 65 76 65 6e 20 63  ke things even c
8720: 6c 65 61 72 65 72 2e 0a 2a 2a 20 48 6f 77 65 76  learer..** Howev
8730: 65 72 2c 20 74 68 65 73 65 20 6d 61 63 72 6f 73  er, these macros
8740: 20 6d 61 79 20 61 6c 73 6f 20 62 65 20 75 73 65   may also be use
8750: 64 20 74 6f 20 73 75 70 70 72 65 73 73 20 77 61  d to suppress wa
8760: 72 6e 69 6e 67 73 20 72 65 6c 61 74 65 64 20 74  rnings related t
8770: 6f 0a 2a 2a 20 70 61 72 61 6d 65 74 65 72 73 20  o.** parameters 
8780: 74 68 61 74 20 6d 61 79 20 6f 72 20 6d 61 79 20  that may or may 
8790: 6e 6f 74 20 62 65 20 75 73 65 64 20 64 65 70 65  not be used depe
87a0: 6e 64 69 6e 67 20 6f 6e 20 63 6f 6d 70 69 6c 61  nding on compila
87b0: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 0a 2a 2a  tion options..**
87c0: 20 46 6f 72 20 65 78 61 6d 70 6c 65 20 74 68 6f   For example tho
87d0: 73 65 20 70 61 72 61 6d 65 74 65 72 73 20 6f 6e  se parameters on
87e0: 6c 79 20 75 73 65 64 20 69 6e 20 61 73 73 65 72  ly used in asser
87f0: 74 28 29 20 73 74 61 74 65 6d 65 6e 74 73 2e 20  t() statements. 
8800: 49 6e 20 74 68 65 73 65 0a 2a 2a 20 63 61 73 65  In these.** case
8810: 73 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73  s the parameters
8820: 20 61 72 65 20 6e 61 6d 65 64 20 61 73 20 70 65   are named as pe
8830: 72 20 74 68 65 20 75 73 75 61 6c 20 63 6f 6e 76  r the usual conv
8840: 65 6e 74 69 6f 6e 73 2e 0a 2a 2f 0a 23 64 65 66  entions..*/.#def
8850: 69 6e 65 20 55 4e 55 53 45 44 5f 50 41 52 41 4d  ine UNUSED_PARAM
8860: 45 54 45 52 28 78 29 20 28 76 6f 69 64 29 28 78  ETER(x) (void)(x
8870: 29 0a 23 64 65 66 69 6e 65 20 55 4e 55 53 45 44  ).#define UNUSED
8880: 5f 50 41 52 41 4d 45 54 45 52 32 28 78 2c 79 29  _PARAMETER2(x,y)
8890: 20 55 4e 55 53 45 44 5f 50 41 52 41 4d 45 54 45   UNUSED_PARAMETE
88a0: 52 28 78 29 2c 55 4e 55 53 45 44 5f 50 41 52 41  R(x),UNUSED_PARA
88b0: 4d 45 54 45 52 28 79 29 0a 0a 2f 2a 0a 2a 2a 20  METER(y)../*.** 
88c0: 46 6f 72 77 61 72 64 20 72 65 66 65 72 65 6e 63  Forward referenc
88d0: 65 73 20 74 6f 20 73 74 72 75 63 74 75 72 65 73  es to structures
88e0: 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72 75  .*/.typedef stru
88f0: 63 74 20 41 67 67 49 6e 66 6f 20 41 67 67 49 6e  ct AggInfo AggIn
8900: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8910: 63 74 20 41 75 74 68 43 6f 6e 74 65 78 74 20 41  ct AuthContext A
8920: 75 74 68 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  uthContext;.type
8930: 64 65 66 20 73 74 72 75 63 74 20 41 75 74 6f 69  def struct Autoi
8940: 6e 63 49 6e 66 6f 20 41 75 74 6f 69 6e 63 49 6e  ncInfo AutoincIn
8950: 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  fo;.typedef stru
8960: 63 74 20 42 69 74 76 65 63 20 42 69 74 76 65 63  ct Bitvec Bitvec
8970: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8980: 20 43 6f 6c 6c 53 65 71 20 43 6f 6c 6c 53 65 71   CollSeq CollSeq
8990: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
89a0: 20 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 3b 0a   Column Column;.
89b0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44  typedef struct D
89c0: 62 20 44 62 3b 0a 74 79 70 65 64 65 66 20 73 74  b Db;.typedef st
89d0: 72 75 63 74 20 53 63 68 65 6d 61 20 53 63 68 65  ruct Schema Sche
89e0: 6d 61 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  ma;.typedef stru
89f0: 63 74 20 45 78 70 72 20 45 78 70 72 3b 0a 74 79  ct Expr Expr;.ty
8a00: 70 65 64 65 66 20 73 74 72 75 63 74 20 45 78 70  pedef struct Exp
8a10: 72 4c 69 73 74 20 45 78 70 72 4c 69 73 74 3b 0a  rList ExprList;.
8a20: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 45  typedef struct E
8a30: 78 70 72 53 70 61 6e 20 45 78 70 72 53 70 61 6e  xprSpan ExprSpan
8a40: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8a50: 20 46 4b 65 79 20 46 4b 65 79 3b 0a 74 79 70 65   FKey FKey;.type
8a60: 64 65 66 20 73 74 72 75 63 74 20 46 75 6e 63 44  def struct FuncD
8a70: 65 73 74 72 75 63 74 6f 72 20 46 75 6e 63 44 65  estructor FuncDe
8a80: 73 74 72 75 63 74 6f 72 3b 0a 74 79 70 65 64 65  structor;.typede
8a90: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
8aa0: 20 46 75 6e 63 44 65 66 3b 0a 74 79 70 65 64 65   FuncDef;.typede
8ab0: 66 20 73 74 72 75 63 74 20 46 75 6e 63 44 65 66  f struct FuncDef
8ac0: 48 61 73 68 20 46 75 6e 63 44 65 66 48 61 73 68  Hash FuncDefHash
8ad0: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8ae0: 20 49 64 4c 69 73 74 20 49 64 4c 69 73 74 3b 0a   IdList IdList;.
8af0: 74 79 70 65 64 65 66 20 73 74 72 75 63 74 20 49  typedef struct I
8b00: 6e 64 65 78 20 49 6e 64 65 78 3b 0a 74 79 70 65  ndex Index;.type
8b10: 64 65 66 20 73 74 72 75 63 74 20 49 6e 64 65 78  def struct Index
8b20: 53 61 6d 70 6c 65 20 49 6e 64 65 78 53 61 6d 70  Sample IndexSamp
8b30: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
8b40: 63 74 20 4b 65 79 43 6c 61 73 73 20 4b 65 79 43  ct KeyClass KeyC
8b50: 6c 61 73 73 3b 0a 74 79 70 65 64 65 66 20 73 74  lass;.typedef st
8b60: 72 75 63 74 20 4b 65 79 49 6e 66 6f 20 4b 65 79  ruct KeyInfo Key
8b70: 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20 73 74  Info;.typedef st
8b80: 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64 65 20 4c  ruct Lookaside L
8b90: 6f 6f 6b 61 73 69 64 65 3b 0a 74 79 70 65 64 65  ookaside;.typede
8ba0: 66 20 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69  f struct Lookasi
8bb0: 64 65 53 6c 6f 74 20 4c 6f 6f 6b 61 73 69 64 65  deSlot Lookaside
8bc0: 53 6c 6f 74 3b 0a 74 79 70 65 64 65 66 20 73 74  Slot;.typedef st
8bd0: 72 75 63 74 20 4d 6f 64 75 6c 65 20 4d 6f 64 75  ruct Module Modu
8be0: 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  le;.typedef stru
8bf0: 63 74 20 4e 61 6d 65 43 6f 6e 74 65 78 74 20 4e  ct NameContext N
8c00: 61 6d 65 43 6f 6e 74 65 78 74 3b 0a 74 79 70 65  ameContext;.type
8c10: 64 65 66 20 73 74 72 75 63 74 20 50 61 72 73 65  def struct Parse
8c20: 20 50 61 72 73 65 3b 0a 74 79 70 65 64 65 66 20   Parse;.typedef 
8c30: 73 74 72 75 63 74 20 50 72 65 55 70 64 61 74 65  struct PreUpdate
8c40: 20 50 72 65 55 70 64 61 74 65 3b 0a 74 79 70 65   PreUpdate;.type
8c50: 64 65 66 20 73 74 72 75 63 74 20 50 72 69 6e 74  def struct Print
8c60: 66 41 72 67 75 6d 65 6e 74 73 20 50 72 69 6e 74  fArguments Print
8c70: 66 41 72 67 75 6d 65 6e 74 73 3b 0a 74 79 70 65  fArguments;.type
8c80: 64 65 66 20 73 74 72 75 63 74 20 52 6f 77 53 65  def struct RowSe
8c90: 74 20 52 6f 77 53 65 74 3b 0a 74 79 70 65 64 65  t RowSet;.typede
8ca0: 66 20 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  f struct Savepoi
8cb0: 6e 74 20 53 61 76 65 70 6f 69 6e 74 3b 0a 74 79  nt Savepoint;.ty
8cc0: 70 65 64 65 66 20 73 74 72 75 63 74 20 53 65 6c  pedef struct Sel
8cd0: 65 63 74 20 53 65 6c 65 63 74 3b 0a 74 79 70 65  ect Select;.type
8ce0: 64 65 66 20 73 74 72 75 63 74 20 53 51 4c 69 74  def struct SQLit
8cf0: 65 54 68 72 65 61 64 20 53 51 4c 69 74 65 54 68  eThread SQLiteTh
8d00: 72 65 61 64 3b 0a 74 79 70 65 64 65 66 20 73 74  read;.typedef st
8d10: 72 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20  ruct SelectDest 
8d20: 53 65 6c 65 63 74 44 65 73 74 3b 0a 74 79 70 65  SelectDest;.type
8d30: 64 65 66 20 73 74 72 75 63 74 20 53 72 63 4c 69  def struct SrcLi
8d40: 73 74 20 53 72 63 4c 69 73 74 3b 0a 74 79 70 65  st SrcList;.type
8d50: 64 65 66 20 73 74 72 75 63 74 20 53 74 72 41 63  def struct StrAc
8d60: 63 75 6d 20 53 74 72 41 63 63 75 6d 3b 0a 74 79  cum StrAccum;.ty
8d70: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 61 62  pedef struct Tab
8d80: 6c 65 20 54 61 62 6c 65 3b 0a 74 79 70 65 64 65  le Table;.typede
8d90: 66 20 73 74 72 75 63 74 20 54 61 62 6c 65 4c 6f  f struct TableLo
8da0: 63 6b 20 54 61 62 6c 65 4c 6f 63 6b 3b 0a 74 79  ck TableLock;.ty
8db0: 70 65 64 65 66 20 73 74 72 75 63 74 20 54 6f 6b  pedef struct Tok
8dc0: 65 6e 20 54 6f 6b 65 6e 3b 0a 74 79 70 65 64 65  en Token;.typede
8dd0: 66 20 73 74 72 75 63 74 20 54 72 65 65 56 69 65  f struct TreeVie
8de0: 77 20 54 72 65 65 56 69 65 77 3b 0a 74 79 70 65  w TreeView;.type
8df0: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
8e00: 65 72 20 54 72 69 67 67 65 72 3b 0a 74 79 70 65  er Trigger;.type
8e10: 64 65 66 20 73 74 72 75 63 74 20 54 72 69 67 67  def struct Trigg
8e20: 65 72 50 72 67 20 54 72 69 67 67 65 72 50 72 67  erPrg TriggerPrg
8e30: 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75 63 74  ;.typedef struct
8e40: 20 54 72 69 67 67 65 72 53 74 65 70 20 54 72 69   TriggerStep Tri
8e50: 67 67 65 72 53 74 65 70 3b 0a 74 79 70 65 64 65  ggerStep;.typede
8e60: 66 20 73 74 72 75 63 74 20 55 6e 70 61 63 6b 65  f struct Unpacke
8e70: 64 52 65 63 6f 72 64 20 55 6e 70 61 63 6b 65 64  dRecord Unpacked
8e80: 52 65 63 6f 72 64 3b 0a 74 79 70 65 64 65 66 20  Record;.typedef 
8e90: 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 56 54  struct VTable VT
8ea0: 61 62 6c 65 3b 0a 74 79 70 65 64 65 66 20 73 74  able;.typedef st
8eb0: 72 75 63 74 20 56 74 61 62 43 74 78 20 56 74 61  ruct VtabCtx Vta
8ec0: 62 43 74 78 3b 0a 74 79 70 65 64 65 66 20 73 74  bCtx;.typedef st
8ed0: 72 75 63 74 20 57 61 6c 6b 65 72 20 57 61 6c 6b  ruct Walker Walk
8ee0: 65 72 3b 0a 74 79 70 65 64 65 66 20 73 74 72 75  er;.typedef stru
8ef0: 63 74 20 57 68 65 72 65 49 6e 66 6f 20 57 68 65  ct WhereInfo Whe
8f00: 72 65 49 6e 66 6f 3b 0a 74 79 70 65 64 65 66 20  reInfo;.typedef 
8f10: 73 74 72 75 63 74 20 57 69 74 68 20 57 69 74 68  struct With With
8f20: 3b 0a 0a 2f 2a 20 41 20 56 4c 69 73 74 20 6f 62  ;../* A VList ob
8f30: 6a 65 63 74 20 72 65 63 6f 72 64 73 20 61 20 6d  ject records a m
8f40: 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e 20 70  apping between p
8f50: 61 72 61 6d 65 74 65 72 73 2f 76 61 72 69 61 62  arameters/variab
8f60: 6c 65 73 2f 77 69 6c 64 63 61 72 64 73 0a 2a 2a  les/wildcards.**
8f70: 20 69 6e 20 74 68 65 20 53 51 4c 20 73 74 61 74   in the SQL stat
8f80: 65 6d 65 6e 74 20 28 73 75 63 68 20 61 73 20 24  ement (such as $
8f90: 61 62 63 2c 20 40 70 71 72 2c 20 6f 72 20 3a 78  abc, @pqr, or :x
8fa0: 79 7a 29 20 61 6e 64 20 74 68 65 20 69 6e 74 65  yz) and the inte
8fb0: 67 65 72 0a 2a 2a 20 76 61 72 69 61 62 6c 65 20  ger.** variable 
8fc0: 6e 75 6d 62 65 72 20 61 73 73 6f 63 69 61 74 65  number associate
8fd0: 64 20 77 69 74 68 20 74 68 61 74 20 70 61 72 61  d with that para
8fe0: 6d 65 74 65 72 2e 20 20 53 65 65 20 74 68 65 20  meter.  See the 
8ff0: 66 6f 72 6d 61 74 20 64 65 73 63 72 69 70 74 69  format descripti
9000: 6f 6e 0a 2a 2a 20 6f 6e 20 74 68 65 20 73 71 6c  on.** on the sql
9010: 69 74 65 33 56 4c 69 73 74 41 64 64 28 29 20 72  ite3VListAdd() r
9020: 6f 75 74 69 6e 65 20 66 6f 72 20 6d 6f 72 65 20  outine for more 
9030: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 41 20  information.  A 
9040: 56 4c 69 73 74 20 69 73 20 72 65 61 6c 6c 79 0a  VList is really.
9050: 2a 2a 20 6a 75 73 74 20 61 6e 20 61 72 72 61 79  ** just an array
9060: 20 6f 66 20 69 6e 74 65 67 65 72 73 2e 0a 2a 2f   of integers..*/
9070: 0a 74 79 70 65 64 65 66 20 69 6e 74 20 56 4c 69  .typedef int VLi
9080: 73 74 3b 0a 0a 2f 2a 0a 2a 2a 20 44 65 66 65 72  st;../*.** Defer
9090: 20 73 6f 75 72 63 69 6e 67 20 76 64 62 65 2e 68   sourcing vdbe.h
90a0: 20 61 6e 64 20 62 74 72 65 65 2e 68 20 75 6e 74   and btree.h unt
90b0: 69 6c 20 61 66 74 65 72 20 74 68 65 20 22 75 38  il after the "u8
90c0: 22 20 61 6e 64 0a 2a 2a 20 22 42 75 73 79 48 61  " and.** "BusyHa
90d0: 6e 64 6c 65 72 22 20 74 79 70 65 64 65 66 73 2e  ndler" typedefs.
90e0: 20 76 64 62 65 2e 68 20 61 6c 73 6f 20 72 65 71   vdbe.h also req
90f0: 75 69 72 65 73 20 61 20 66 65 77 20 6f 66 20 74  uires a few of t
9100: 68 65 20 6f 70 61 71 75 65 0a 2a 2a 20 70 6f 69  he opaque.** poi
9110: 6e 74 65 72 20 74 79 70 65 73 20 28 69 2e 65 2e  nter types (i.e.
9120: 20 46 75 6e 63 44 65 66 29 20 64 65 66 69 6e 65   FuncDef) define
9130: 64 20 61 62 6f 76 65 2e 0a 2a 2f 0a 23 69 6e 63  d above..*/.#inc
9140: 6c 75 64 65 20 22 62 74 72 65 65 2e 68 22 0a 23  lude "btree.h".#
9150: 69 6e 63 6c 75 64 65 20 22 76 64 62 65 2e 68 22  include "vdbe.h"
9160: 0a 23 69 6e 63 6c 75 64 65 20 22 70 61 67 65 72  .#include "pager
9170: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 22 70 63  .h".#include "pc
9180: 61 63 68 65 2e 68 22 0a 23 69 6e 63 6c 75 64 65  ache.h".#include
9190: 20 22 6f 73 2e 68 22 0a 23 69 6e 63 6c 75 64 65   "os.h".#include
91a0: 20 22 6d 75 74 65 78 2e 68 22 0a 23 69 6e 63 6c   "mutex.h".#incl
91b0: 75 64 65 20 22 73 65 72 76 65 72 2e 68 22 0a 0a  ude "server.h"..
91c0: 2f 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 45 58  /* The SQLITE_EX
91d0: 54 52 41 5f 44 55 52 41 42 4c 45 20 63 6f 6d 70  TRA_DURABLE comp
91e0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20  ile-time option 
91f0: 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 20  used to set the 
9200: 64 65 66 61 75 6c 74 0a 2a 2a 20 73 79 6e 63 68  default.** synch
9210: 72 6f 6e 6f 75 73 20 73 65 74 74 69 6e 67 20 74  ronous setting t
9220: 6f 20 45 58 54 52 41 2e 20 20 49 74 20 69 73 20  o EXTRA.  It is 
9230: 6e 6f 20 6c 6f 6e 67 65 72 20 73 75 70 70 6f 72  no longer suppor
9240: 74 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ted..*/.#ifdef S
9250: 51 4c 49 54 45 5f 45 58 54 52 41 5f 44 55 52 41  QLITE_EXTRA_DURA
9260: 42 4c 45 0a 23 20 77 61 72 6e 69 6e 67 20 55 73  BLE.# warning Us
9270: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9280: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3d 33 20 69  _SYNCHRONOUS=3 i
9290: 6e 73 74 65 61 64 20 6f 66 20 53 51 4c 49 54 45  nstead of SQLITE
92a0: 5f 45 58 54 52 41 5f 44 55 52 41 42 4c 45 0a 23  _EXTRA_DURABLE.#
92b0: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44   define SQLITE_D
92c0: 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f  EFAULT_SYNCHRONO
92d0: 55 53 20 33 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  US 3.#endif../*.
92e0: 2a 2a 20 44 65 66 61 75 6c 74 20 73 79 6e 63 68  ** Default synch
92f0: 72 6f 6e 6f 75 73 20 6c 65 76 65 6c 73 2e 0a 2a  ronous levels..*
9300: 2a 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 28  *.** Note that (
9310: 66 6f 72 20 68 69 73 74 6f 72 63 61 6c 20 72 65  for historcal re
9320: 61 73 6f 6e 73 29 20 74 68 65 20 50 41 47 45 52  asons) the PAGER
9330: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 2a 20 6d  _SYNCHRONOUS_* m
9340: 61 63 72 6f 73 20 64 69 66 66 65 72 0a 2a 2a 20  acros differ.** 
9350: 66 72 6f 6d 20 74 68 65 20 53 51 4c 49 54 45 5f  from the SQLITE_
9360: 44 45 46 41 55 4c 54 5f 53 59 4e 43 48 52 4f 4e  DEFAULT_SYNCHRON
9370: 4f 55 53 20 76 61 6c 75 65 20 62 79 20 31 2e 0a  OUS value by 1..
9380: 2a 2a 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  **.**           
9390: 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f 55  PAGER_SYNCHRONOU
93a0: 53 20 20 20 20 20 20 20 44 45 46 41 55 4c 54 5f  S       DEFAULT_
93b0: 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 2a 2a 20 20  SYNCHRONOUS.**  
93c0: 20 4f 46 46 20 20 20 20 20 20 20 20 20 20 20 31   OFF           1
93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
93e0: 20 20 20 20 20 20 20 20 20 30 0a 2a 2a 20 20 20           0.**   
93f0: 4e 4f 52 4d 41 4c 20 20 20 20 20 20 20 20 32 20  NORMAL        2 
9400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9410: 20 20 20 20 20 20 20 20 31 0a 2a 2a 20 20 20 46          1.**   F
9420: 55 4c 4c 20 20 20 20 20 20 20 20 20 20 33 20 20  ULL          3  
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9440: 20 20 20 20 20 20 20 32 0a 2a 2a 20 20 20 45 58         2.**   EX
9450: 54 52 41 20 20 20 20 20 20 20 20 20 34 20 20 20  TRA         4   
9460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9470: 20 20 20 20 20 20 33 0a 2a 2a 0a 2a 2a 20 54 68        3.**.** Th
9480: 65 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72  e "PRAGMA synchr
9490: 6f 6e 6f 75 73 22 20 73 74 61 74 65 6d 65 6e 74  onous" statement
94a0: 20 61 6c 73 6f 20 75 73 65 73 20 74 68 65 20 7a   also uses the z
94b0: 65 72 6f 2d 62 61 73 65 64 20 6e 75 6d 62 65 72  ero-based number
94c0: 73 2e 0a 2a 2a 20 49 6e 20 6f 74 68 65 72 20 77  s..** In other w
94d0: 6f 72 64 73 2c 20 74 68 65 20 7a 65 72 6f 2d 62  ords, the zero-b
94e0: 61 73 65 64 20 6e 75 6d 62 65 72 73 20 61 72 65  ased numbers are
94f0: 20 75 73 65 64 20 66 6f 72 20 61 6c 6c 20 65 78   used for all ex
9500: 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65  ternal interface
9510: 73 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6f 6e 65  s.** and the one
9520: 2d 62 61 73 65 64 20 76 61 6c 75 65 73 20 61 72  -based values ar
9530: 65 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c  e used internall
9540: 79 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  y..*/.#ifndef SQ
9550: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 53 59 4e  LITE_DEFAULT_SYN
9560: 43 48 52 4f 4e 4f 55 53 0a 23 20 64 65 66 69 6e  CHRONOUS.# defin
9570: 65 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54  e SQLITE_DEFAULT
9580: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 32 0a 23  _SYNCHRONOUS 2.#
9590: 65 6e 64 69 66 0a 23 69 66 6e 64 65 66 20 53 51  endif.#ifndef SQ
95a0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41 4c  LITE_DEFAULT_WAL
95b0: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a 23 20 64  _SYNCHRONOUS.# d
95c0: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 45 46  efine SQLITE_DEF
95d0: 41 55 4c 54 5f 57 41 4c 5f 53 59 4e 43 48 52 4f  AULT_WAL_SYNCHRO
95e0: 4e 4f 55 53 20 53 51 4c 49 54 45 5f 44 45 46 41  NOUS SQLITE_DEFA
95f0: 55 4c 54 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 0a  ULT_SYNCHRONOUS.
9600: 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61  #endif../*.** Ea
9610: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
9620: 20 74 6f 20 62 65 20 61 63 63 65 73 73 65 64 20   to be accessed 
9630: 62 79 20 74 68 65 20 73 79 73 74 65 6d 20 69 73  by the system is
9640: 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a 2a 2a 20   an instance.** 
9650: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
9660: 20 73 74 72 75 63 74 75 72 65 2e 20 20 54 68 65   structure.  The
9670: 72 65 20 61 72 65 20 6e 6f 72 6d 61 6c 6c 79 20  re are normally 
9680: 74 77 6f 20 6f 66 20 74 68 65 73 65 20 73 74 72  two of these str
9690: 75 63 74 75 72 65 73 0a 2a 2a 20 69 6e 20 74 68  uctures.** in th
96a0: 65 20 73 71 6c 69 74 65 2e 61 44 62 5b 5d 20 61  e sqlite.aDb[] a
96b0: 72 72 61 79 2e 20 20 61 44 62 5b 30 5d 20 69 73  rray.  aDb[0] is
96c0: 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
96d0: 73 65 20 66 69 6c 65 20 61 6e 64 0a 2a 2a 20 61  se file and.** a
96e0: 44 62 5b 31 5d 20 69 73 20 74 68 65 20 64 61 74  Db[1] is the dat
96f0: 61 62 61 73 65 20 66 69 6c 65 20 75 73 65 64 20  abase file used 
9700: 74 6f 20 68 6f 6c 64 20 74 65 6d 70 6f 72 61 72  to hold temporar
9710: 79 20 74 61 62 6c 65 73 2e 20 20 41 64 64 69 74  y tables.  Addit
9720: 69 6f 6e 61 6c 0a 2a 2a 20 64 61 74 61 62 61 73  ional.** databas
9730: 65 73 20 6d 61 79 20 62 65 20 61 74 74 61 63 68  es may be attach
9740: 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 44 62  ed..*/.struct Db
9750: 20 7b 0a 20 20 63 68 61 72 20 2a 7a 44 62 53 4e   {.  char *zDbSN
9760: 61 6d 65 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d  ame;      /* Nam
9770: 65 20 6f 66 20 74 68 69 73 20 64 61 74 61 62 61  e of this databa
9780: 73 65 2e 20 28 73 63 68 65 6d 61 20 6e 61 6d 65  se. (schema name
9790: 2c 20 6e 6f 74 20 66 69 6c 65 6e 61 6d 65 29 20  , not filename) 
97a0: 2a 2f 0a 20 20 42 74 72 65 65 20 2a 70 42 74 3b  */.  Btree *pBt;
97b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
97c0: 20 42 2a 54 72 65 65 20 73 74 72 75 63 74 75 72   B*Tree structur
97d0: 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62  e for this datab
97e0: 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 75 38  ase file */.  u8
97f0: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 3b 20 20   safety_level;  
9800: 20 20 20 2f 2a 20 48 6f 77 20 61 67 67 72 65 73     /* How aggres
9810: 73 69 76 65 20 61 74 20 73 79 6e 63 69 6e 67 20  sive at syncing 
9820: 64 61 74 61 20 74 6f 20 64 69 73 6b 20 2a 2f 0a  data to disk */.
9830: 20 20 75 38 20 62 53 79 6e 63 53 65 74 3b 20 20    u8 bSyncSet;  
9840: 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69         /* True i
9850: 66 20 22 50 52 41 47 4d 41 20 73 79 6e 63 68 72  f "PRAGMA synchr
9860: 6f 6e 6f 75 73 3d 4e 22 20 68 61 73 20 62 65 65  onous=N" has bee
9870: 6e 20 72 75 6e 20 2a 2f 0a 20 20 53 63 68 65 6d  n run */.  Schem
9880: 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
9890: 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 64 61  /* Pointer to da
98a0: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 28 70  tabase schema (p
98b0: 6f 73 73 69 62 6c 79 20 73 68 61 72 65 64 29 20  ossibly shared) 
98c0: 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
98d0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
98e0: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
98f0: 75 72 65 20 73 74 6f 72 65 73 20 61 20 64 61 74  ure stores a dat
9900: 61 62 61 73 65 20 73 63 68 65 6d 61 2e 0a 2a 2a  abase schema..**
9910: 0a 2a 2a 20 4d 6f 73 74 20 53 63 68 65 6d 61 20  .** Most Schema 
9920: 6f 62 6a 65 63 74 73 20 61 72 65 20 61 73 73 6f  objects are asso
9930: 63 69 61 74 65 64 20 77 69 74 68 20 61 20 42 74  ciated with a Bt
9940: 72 65 65 2e 20 20 54 68 65 20 65 78 63 65 70 74  ree.  The except
9950: 69 6f 6e 20 69 73 0a 2a 2a 20 74 68 65 20 53 63  ion is.** the Sc
9960: 68 65 6d 61 20 66 6f 72 20 74 68 65 20 54 45 4d  hema for the TEM
9970: 50 20 64 61 74 61 62 61 65 73 20 28 73 71 6c 69  P databaes (sqli
9980: 74 65 33 2e 61 44 62 5b 31 5d 29 20 77 68 69 63  te3.aDb[1]) whic
9990: 68 20 69 73 20 66 72 65 65 2d 73 74 61 6e 64 69  h is free-standi
99a0: 6e 67 2e 0a 2a 2a 20 49 6e 20 73 68 61 72 65 64  ng..** In shared
99b0: 20 63 61 63 68 65 20 6d 6f 64 65 2c 20 61 20 73   cache mode, a s
99c0: 69 6e 67 6c 65 20 53 63 68 65 6d 61 20 6f 62 6a  ingle Schema obj
99d0: 65 63 74 20 63 61 6e 20 62 65 20 73 68 61 72 65  ect can be share
99e0: 64 20 62 79 20 6d 75 6c 74 69 70 6c 65 0a 2a 2a  d by multiple.**
99f0: 20 42 74 72 65 65 73 20 74 68 61 74 20 72 65 66   Btrees that ref
9a00: 65 72 20 74 6f 20 74 68 65 20 73 61 6d 65 20 75  er to the same u
9a10: 6e 64 65 72 6c 79 69 6e 67 20 42 74 53 68 61 72  nderlying BtShar
9a20: 65 64 20 6f 62 6a 65 63 74 2e 0a 2a 2a 0a 2a 2a  ed object..**.**
9a30: 20 53 63 68 65 6d 61 20 6f 62 6a 65 63 74 73 20   Schema objects 
9a40: 61 72 65 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  are automaticall
9a50: 79 20 64 65 61 6c 6c 6f 63 61 74 65 64 20 77 68  y deallocated wh
9a60: 65 6e 20 74 68 65 20 6c 61 73 74 20 42 74 72 65  en the last Btre
9a70: 65 20 74 68 61 74 0a 2a 2a 20 72 65 66 65 72 65  e that.** refere
9a80: 6e 63 65 73 20 74 68 65 6d 20 69 73 20 64 65 73  nces them is des
9a90: 74 72 6f 79 65 64 2e 20 20 20 54 68 65 20 54 45  troyed.   The TE
9aa0: 4d 50 20 53 63 68 65 6d 61 20 69 73 20 6d 61 6e  MP Schema is man
9ab0: 75 61 6c 6c 79 20 66 72 65 65 64 20 62 79 0a 2a  ually freed by.*
9ac0: 2a 20 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28  * sqlite3_close(
9ad0: 29 2e 0a 2a 0a 2a 2a 20 41 20 74 68 72 65 61 64  )..*.** A thread
9ae0: 20 6d 75 73 74 20 62 65 20 68 6f 6c 64 69 6e 67   must be holding
9af0: 20 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20   a mutex on the 
9b00: 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 42 74  corresponding Bt
9b10: 72 65 65 20 69 6e 20 6f 72 64 65 72 0a 2a 2a 20  ree in order.** 
9b20: 74 6f 20 61 63 63 65 73 73 20 53 63 68 65 6d 61  to access Schema
9b30: 20 63 6f 6e 74 65 6e 74 2e 20 20 54 68 69 73 20   content.  This 
9b40: 69 6d 70 6c 69 65 73 20 74 68 61 74 20 74 68 65  implies that the
9b50: 20 74 68 72 65 61 64 20 6d 75 73 74 20 61 6c 73   thread must als
9b60: 6f 20 62 65 0a 2a 2a 20 68 6f 6c 64 69 6e 67 20  o be.** holding 
9b70: 61 20 6d 75 74 65 78 20 6f 6e 20 74 68 65 20 73  a mutex on the s
9b80: 71 6c 69 74 65 33 20 63 6f 6e 6e 65 63 74 69 6f  qlite3 connectio
9b90: 6e 20 70 6f 69 6e 74 65 72 20 74 68 61 74 20 6f  n pointer that o
9ba0: 77 6e 73 20 74 68 65 20 42 74 72 65 65 2e 0a 2a  wns the Btree..*
9bb0: 2a 20 46 6f 72 20 61 20 54 45 4d 50 20 53 63 68  * For a TEMP Sch
9bc0: 65 6d 61 2c 20 6f 6e 6c 79 20 74 68 65 20 63 6f  ema, only the co
9bd0: 6e 6e 65 63 74 69 6f 6e 20 6d 75 74 65 78 20 69  nnection mutex i
9be0: 73 20 72 65 71 75 69 72 65 64 2e 0a 2a 2f 0a 73  s required..*/.s
9bf0: 74 72 75 63 74 20 53 63 68 65 6d 61 20 7b 0a 20  truct Schema {. 
9c00: 20 69 6e 74 20 73 63 68 65 6d 61 5f 63 6f 6f 6b   int schema_cook
9c10: 69 65 3b 20 20 20 2f 2a 20 44 61 74 61 62 61 73  ie;   /* Databas
9c20: 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
9c30: 20 6e 75 6d 62 65 72 20 66 6f 72 20 74 68 69 73   number for this
9c40: 20 66 69 6c 65 20 2a 2f 0a 20 20 69 6e 74 20 69   file */.  int i
9c50: 47 65 6e 65 72 61 74 69 6f 6e 3b 20 20 20 20 20  Generation;     
9c60: 2f 2a 20 47 65 6e 65 72 61 74 69 6f 6e 20 63 6f  /* Generation co
9c70: 75 6e 74 65 72 2e 20 20 49 6e 63 72 65 6d 65 6e  unter.  Incremen
9c80: 74 65 64 20 77 69 74 68 20 65 61 63 68 20 63 68  ted with each ch
9c90: 61 6e 67 65 20 2a 2f 0a 20 20 48 61 73 68 20 74  ange */.  Hash t
9ca0: 62 6c 48 61 73 68 3b 20 20 20 20 20 20 20 20 2f  blHash;        /
9cb0: 2a 20 41 6c 6c 20 74 61 62 6c 65 73 20 69 6e 64  * All tables ind
9cc0: 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f 0a  exed by name */.
9cd0: 20 20 48 61 73 68 20 69 64 78 48 61 73 68 3b 20    Hash idxHash; 
9ce0: 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 28 6e         /* All (n
9cf0: 61 6d 65 64 29 20 69 6e 64 69 63 65 73 20 69 6e  amed) indices in
9d00: 64 65 78 65 64 20 62 79 20 6e 61 6d 65 20 2a 2f  dexed by name */
9d10: 0a 20 20 48 61 73 68 20 74 72 69 67 48 61 73 68  .  Hash trigHash
9d20: 3b 20 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 74  ;       /* All t
9d30: 72 69 67 67 65 72 73 20 69 6e 64 65 78 65 64 20  riggers indexed 
9d40: 62 79 20 6e 61 6d 65 20 2a 2f 0a 20 20 48 61 73  by name */.  Has
9d50: 68 20 66 6b 65 79 48 61 73 68 3b 20 20 20 20 20  h fkeyHash;     
9d60: 20 20 2f 2a 20 41 6c 6c 20 66 6f 72 65 69 67 6e    /* All foreign
9d70: 20 6b 65 79 73 20 62 79 20 72 65 66 65 72 65 6e   keys by referen
9d80: 63 65 64 20 74 61 62 6c 65 20 6e 61 6d 65 20 2a  ced table name *
9d90: 2f 0a 20 20 54 61 62 6c 65 20 2a 70 53 65 71 54  /.  Table *pSeqT
9da0: 61 62 3b 20 20 20 20 20 20 2f 2a 20 54 68 65 20  ab;      /* The 
9db0: 73 71 6c 69 74 65 5f 73 65 71 75 65 6e 63 65 20  sqlite_sequence 
9dc0: 74 61 62 6c 65 20 75 73 65 64 20 62 79 20 41 55  table used by AU
9dd0: 54 4f 49 4e 43 52 45 4d 45 4e 54 20 2a 2f 0a 20  TOINCREMENT */. 
9de0: 20 75 38 20 66 69 6c 65 5f 66 6f 72 6d 61 74 3b   u8 file_format;
9df0: 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20        /* Schema 
9e00: 66 6f 72 6d 61 74 20 76 65 72 73 69 6f 6e 20 66  format version f
9e10: 6f 72 20 74 68 69 73 20 66 69 6c 65 20 2a 2f 0a  or this file */.
9e20: 20 20 75 38 20 65 6e 63 3b 20 20 20 20 20 20 20    u8 enc;       
9e30: 20 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65         /* Text e
9e40: 6e 63 6f 64 69 6e 67 20 75 73 65 64 20 62 79 20  ncoding used by 
9e50: 74 68 69 73 20 64 61 74 61 62 61 73 65 20 2a 2f  this database */
9e60: 0a 20 20 75 31 36 20 73 63 68 65 6d 61 46 6c 61  .  u16 schemaFla
9e70: 67 73 3b 20 20 20 20 20 2f 2a 20 46 6c 61 67 73  gs;     /* Flags
9e80: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
9e90: 20 74 68 69 73 20 73 63 68 65 6d 61 20 2a 2f 0a   this schema */.
9ea0: 20 20 69 6e 74 20 63 61 63 68 65 5f 73 69 7a 65    int cache_size
9eb0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72  ;      /* Number
9ec0: 20 6f 66 20 70 61 67 65 73 20 74 6f 20 75 73 65   of pages to use
9ed0: 20 69 6e 20 74 68 65 20 63 61 63 68 65 20 2a 2f   in the cache */
9ee0: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 73 65  .};../*.** These
9ef0: 20 6d 61 63 72 6f 73 20 63 61 6e 20 62 65 20 75   macros can be u
9f00: 73 65 64 20 74 6f 20 74 65 73 74 2c 20 73 65 74  sed to test, set
9f10: 2c 20 6f 72 20 63 6c 65 61 72 20 62 69 74 73 20  , or clear bits 
9f20: 69 6e 20 74 68 65 0a 2a 2a 20 44 62 2e 70 53 63  in the.** Db.pSc
9f30: 68 65 6d 61 2d 3e 66 6c 61 67 73 20 66 69 65 6c  hema->flags fiel
9f40: 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 44 62  d..*/.#define Db
9f50: 48 61 73 50 72 6f 70 65 72 74 79 28 44 2c 49 2c  HasProperty(D,I,
9f60: 50 29 20 20 20 20 20 28 28 28 44 29 2d 3e 61 44  P)     (((D)->aD
9f70: 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63  b[I].pSchema->sc
9f80: 68 65 6d 61 46 6c 61 67 73 26 28 50 29 29 3d 3d  hemaFlags&(P))==
9f90: 28 50 29 29 0a 23 64 65 66 69 6e 65 20 44 62 48  (P)).#define DbH
9fa0: 61 73 41 6e 79 50 72 6f 70 65 72 74 79 28 44 2c  asAnyProperty(D,
9fb0: 49 2c 50 29 20 20 28 28 28 44 29 2d 3e 61 44 62  I,P)  (((D)->aDb
9fc0: 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73 63 68  [I].pSchema->sch
9fd0: 65 6d 61 46 6c 61 67 73 26 28 50 29 29 21 3d 30  emaFlags&(P))!=0
9fe0: 29 0a 23 64 65 66 69 6e 65 20 44 62 53 65 74 50  ).#define DbSetP
9ff0: 72 6f 70 65 72 74 79 28 44 2c 49 2c 50 29 20 20  roperty(D,I,P)  
a000: 20 20 20 28 44 29 2d 3e 61 44 62 5b 49 5d 2e 70     (D)->aDb[I].p
a010: 53 63 68 65 6d 61 2d 3e 73 63 68 65 6d 61 46 6c  Schema->schemaFl
a020: 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
a030: 20 44 62 43 6c 65 61 72 50 72 6f 70 65 72 74 79   DbClearProperty
a040: 28 44 2c 49 2c 50 29 20 20 20 28 44 29 2d 3e 61  (D,I,P)   (D)->a
a050: 44 62 5b 49 5d 2e 70 53 63 68 65 6d 61 2d 3e 73  Db[I].pSchema->s
a060: 63 68 65 6d 61 46 6c 61 67 73 26 3d 7e 28 50 29  chemaFlags&=~(P)
a070: 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20  ../*.** Allowed 
a080: 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 44  values for the D
a090: 42 2e 70 53 63 68 65 6d 61 2d 3e 66 6c 61 67 73  B.pSchema->flags
a0a0: 20 66 69 65 6c 64 2e 0a 2a 2a 0a 2a 2a 20 54 68   field..**.** Th
a0b0: 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65  e DB_SchemaLoade
a0c0: 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 61 66  d flag is set af
a0d0: 74 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ter the database
a0e0: 20 73 63 68 65 6d 61 20 68 61 73 20 62 65 65 6e   schema has been
a0f0: 0a 2a 2a 20 72 65 61 64 20 69 6e 74 6f 20 69 6e  .** read into in
a100: 74 65 72 6e 61 6c 20 68 61 73 68 20 74 61 62 6c  ternal hash tabl
a110: 65 73 2e 0a 2a 2a 0a 2a 2a 20 44 42 5f 55 6e 72  es..**.** DB_Unr
a120: 65 73 65 74 56 69 65 77 73 20 6d 65 61 6e 73 20  esetViews means 
a130: 74 68 61 74 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  that one or more
a140: 20 76 69 65 77 73 20 68 61 76 65 20 63 6f 6c 75   views have colu
a150: 6d 6e 20 6e 61 6d 65 73 20 74 68 61 74 0a 2a 2a  mn names that.**
a160: 20 68 61 76 65 20 62 65 65 6e 20 66 69 6c 6c 65   have been fille
a170: 64 20 6f 75 74 2e 20 20 49 66 20 74 68 65 20 73  d out.  If the s
a180: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 2c 20 74  chema changes, t
a190: 68 65 73 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65  hese column name
a1a0: 73 20 6d 69 67 68 74 0a 2a 2a 20 63 68 61 6e 67  s might.** chang
a1b0: 65 73 20 61 6e 64 20 73 6f 20 74 68 65 20 76 69  es and so the vi
a1c0: 65 77 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  ew will need to 
a1d0: 62 65 20 72 65 73 65 74 2e 0a 2a 2f 0a 23 64 65  be reset..*/.#de
a1e0: 66 69 6e 65 20 44 42 5f 53 63 68 65 6d 61 4c 6f  fine DB_SchemaLo
a1f0: 61 64 65 64 20 20 20 20 30 78 30 30 30 31 20 20  aded    0x0001  
a200: 2f 2a 20 54 68 65 20 73 63 68 65 6d 61 20 68 61  /* The schema ha
a210: 73 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 2a 2f  s been loaded */
a220: 0a 23 64 65 66 69 6e 65 20 44 42 5f 55 6e 72 65  .#define DB_Unre
a230: 73 65 74 56 69 65 77 73 20 20 20 20 30 78 30 30  setViews    0x00
a240: 30 32 20 20 2f 2a 20 53 6f 6d 65 20 76 69 65 77  02  /* Some view
a250: 73 20 68 61 76 65 20 64 65 66 69 6e 65 64 20 63  s have defined c
a260: 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20 2a 2f 0a 23  olumn names */.#
a270: 64 65 66 69 6e 65 20 44 42 5f 45 6d 70 74 79 20  define DB_Empty 
a280: 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30 34            0x0004
a290: 20 20 2f 2a 20 54 68 65 20 66 69 6c 65 20 69 73    /* The file is
a2a0: 20 65 6d 70 74 79 20 28 6c 65 6e 67 74 68 20 30   empty (length 0
a2b0: 20 62 79 74 65 73 29 20 2a 2f 0a 0a 2f 2a 0a 2a   bytes) */../*.*
a2c0: 2a 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  * The number of 
a2d0: 64 69 66 66 65 72 65 6e 74 20 6b 69 6e 64 73 20  different kinds 
a2e0: 6f 66 20 74 68 69 6e 67 73 20 74 68 61 74 20 63  of things that c
a2f0: 61 6e 20 62 65 20 6c 69 6d 69 74 65 64 0a 2a 2a  an be limited.**
a300: 20 75 73 69 6e 67 20 74 68 65 20 73 71 6c 69 74   using the sqlit
a310: 65 33 5f 6c 69 6d 69 74 28 29 20 69 6e 74 65 72  e3_limit() inter
a320: 66 61 63 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  face..*/.#define
a330: 20 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 20   SQLITE_N_LIMIT 
a340: 28 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f  (SQLITE_LIMIT_WO
a350: 52 4b 45 52 5f 54 48 52 45 41 44 53 2b 31 29 0a  RKER_THREADS+1).
a360: 0a 2f 2a 0a 2a 2a 20 4c 6f 6f 6b 61 73 69 64 65  ./*.** Lookaside
a370: 20 6d 61 6c 6c 6f 63 20 69 73 20 61 20 73 65 74   malloc is a set
a380: 20 6f 66 20 66 69 78 65 64 2d 73 69 7a 65 20 62   of fixed-size b
a390: 75 66 66 65 72 73 20 74 68 61 74 20 63 61 6e 20  uffers that can 
a3a0: 62 65 20 75 73 65 64 0a 2a 2a 20 74 6f 20 73 61  be used.** to sa
a3b0: 74 69 73 66 79 20 73 6d 61 6c 6c 20 74 72 61 6e  tisfy small tran
a3c0: 73 69 65 6e 74 20 6d 65 6d 6f 72 79 20 61 6c 6c  sient memory all
a3d0: 6f 63 61 74 69 6f 6e 20 72 65 71 75 65 73 74 73  ocation requests
a3e0: 20 66 6f 72 20 6f 62 6a 65 63 74 73 0a 2a 2a 20   for objects.** 
a3f0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
a400: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
a410: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
a420: 2e 20 20 54 68 65 20 75 73 65 20 6f 66 0a 2a 2a  .  The use of.**
a430: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c 6f   lookaside mallo
a440: 63 20 70 72 6f 76 69 64 65 73 20 61 20 73 69 67  c provides a sig
a450: 6e 69 66 69 63 61 6e 74 20 70 65 72 66 6f 72 6d  nificant perform
a460: 61 6e 63 65 20 65 6e 68 61 6e 63 65 6d 65 6e 74  ance enhancement
a470: 0a 2a 2a 20 28 61 70 70 72 6f 78 20 31 30 25 29  .** (approx 10%)
a480: 20 62 79 20 61 76 6f 69 64 69 6e 67 20 6e 75 6d   by avoiding num
a490: 65 72 6f 75 73 20 6d 61 6c 6c 6f 63 2f 66 72 65  erous malloc/fre
a4a0: 65 20 72 65 71 75 65 73 74 73 20 77 68 69 6c 65  e requests while
a4b0: 20 70 61 72 73 69 6e 67 0a 2a 2a 20 53 51 4c 20   parsing.** SQL 
a4c0: 73 74 61 74 65 6d 65 6e 74 73 2e 0a 2a 2a 0a 2a  statements..**.*
a4d0: 2a 20 54 68 65 20 4c 6f 6f 6b 61 73 69 64 65 20  * The Lookaside 
a4e0: 73 74 72 75 63 74 75 72 65 20 68 6f 6c 64 73 20  structure holds 
a4f0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 69 6e  configuration in
a500: 66 6f 72 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20  formation about 
a510: 74 68 65 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65  the.** lookaside
a520: 20 6d 61 6c 6c 6f 63 20 73 75 62 73 79 73 74 65   malloc subsyste
a530: 6d 2e 20 20 45 61 63 68 20 61 76 61 69 6c 61 62  m.  Each availab
a540: 6c 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61  le memory alloca
a550: 74 69 6f 6e 20 69 6e 0a 2a 2a 20 74 68 65 20 6c  tion in.** the l
a560: 6f 6f 6b 61 73 69 64 65 20 73 75 62 73 79 73 74  ookaside subsyst
a570: 65 6d 20 69 73 20 73 74 6f 72 65 64 20 6f 6e 20  em is stored on 
a580: 61 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66  a linked list of
a590: 20 4c 6f 6f 6b 61 73 69 64 65 53 6c 6f 74 0a 2a   LookasideSlot.*
a5a0: 2a 20 6f 62 6a 65 63 74 73 2e 0a 2a 2a 0a 2a 2a  * objects..**.**
a5b0: 20 4c 6f 6f 6b 61 73 69 64 65 20 61 6c 6c 6f 63   Lookaside alloc
a5c0: 61 74 69 6f 6e 73 20 61 72 65 20 6f 6e 6c 79 20  ations are only 
a5d0: 61 6c 6c 6f 77 65 64 20 66 6f 72 20 6f 62 6a 65  allowed for obje
a5e0: 63 74 73 20 74 68 61 74 20 61 72 65 20 61 73 73  cts that are ass
a5f0: 6f 63 69 61 74 65 64 0a 2a 2a 20 77 69 74 68 20  ociated.** with 
a600: 61 20 70 61 72 74 69 63 75 6c 61 72 20 64 61 74  a particular dat
a610: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
a620: 2e 20 20 48 65 6e 63 65 2c 20 73 63 68 65 6d 61  .  Hence, schema
a630: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 63 61 6e   information can
a640: 6e 6f 74 0a 2a 2a 20 62 65 20 73 74 6f 72 65 64  not.** be stored
a650: 20 69 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 62 65   in lookaside be
a660: 63 61 75 73 65 20 69 6e 20 73 68 61 72 65 64 20  cause in shared 
a670: 63 61 63 68 65 20 6d 6f 64 65 20 74 68 65 20 73  cache mode the s
a680: 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f  chema informatio
a690: 6e 0a 2a 2a 20 69 73 20 73 68 61 72 65 64 20 62  n.** is shared b
a6a0: 79 20 6d 75 6c 74 69 70 6c 65 20 64 61 74 61 62  y multiple datab
a6b0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2e  ase connections.
a6c0: 20 20 54 68 65 72 65 66 6f 72 65 2c 20 77 68 69    Therefore, whi
a6d0: 6c 65 20 70 61 72 73 69 6e 67 0a 2a 2a 20 73 63  le parsing.** sc
a6e0: 68 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  hema information
a6f0: 2c 20 74 68 65 20 4c 6f 6f 6b 61 73 69 64 65 2e  , the Lookaside.
a700: 62 45 6e 61 62 6c 65 64 20 66 6c 61 67 20 69 73  bEnabled flag is
a710: 20 63 6c 65 61 72 65 64 20 73 6f 20 74 68 61 74   cleared so that
a720: 0a 2a 2a 20 6c 6f 6f 6b 61 73 69 64 65 20 61 6c  .** lookaside al
a730: 6c 6f 63 61 74 69 6f 6e 73 20 61 72 65 20 6e 6f  locations are no
a740: 74 20 75 73 65 64 20 74 6f 20 63 6f 6e 73 74 72  t used to constr
a750: 75 63 74 20 74 68 65 20 73 63 68 65 6d 61 20 6f  uct the schema o
a760: 62 6a 65 63 74 73 2e 0a 2a 2f 0a 73 74 72 75 63  bjects..*/.struc
a770: 74 20 4c 6f 6f 6b 61 73 69 64 65 20 7b 0a 20 20  t Lookaside {.  
a780: 75 33 32 20 62 44 69 73 61 62 6c 65 3b 20 20 20  u32 bDisable;   
a790: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20          /* Only 
a7a0: 6f 70 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b  operate the look
a7b0: 61 73 69 64 65 20 77 68 65 6e 20 7a 65 72 6f 20  aside when zero 
a7c0: 2a 2f 0a 20 20 75 31 36 20 73 7a 3b 20 20 20 20  */.  u16 sz;    
a7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
a7e0: 53 69 7a 65 20 6f 66 20 65 61 63 68 20 62 75 66  Size of each buf
a7f0: 66 65 72 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a  fer in bytes */.
a800: 20 20 75 38 20 62 4d 61 6c 6c 6f 63 65 64 3b 20    u8 bMalloced; 
a810: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
a820: 65 20 69 66 20 70 53 74 61 72 74 20 6f 62 74 61  e if pStart obta
a830: 69 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65  ined from sqlite
a840: 33 5f 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 20 20  3_malloc() */.  
a850: 69 6e 74 20 6e 4f 75 74 3b 20 20 20 20 20 20 20  int nOut;       
a860: 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
a870: 72 20 6f 66 20 62 75 66 66 65 72 73 20 63 75 72  r of buffers cur
a880: 72 65 6e 74 6c 79 20 63 68 65 63 6b 65 64 20 6f  rently checked o
a890: 75 74 20 2a 2f 0a 20 20 69 6e 74 20 6d 78 4f 75  ut */.  int mxOu
a8a0: 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
a8b0: 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61 72  /* Highwater mar
a8c0: 6b 20 66 6f 72 20 6e 4f 75 74 20 2a 2f 0a 20 20  k for nOut */.  
a8d0: 69 6e 74 20 61 6e 53 74 61 74 5b 33 5d 3b 20 20  int anStat[3];  
a8e0: 20 20 20 20 20 20 20 20 2f 2a 20 30 3a 20 68 69          /* 0: hi
a8f0: 74 73 2e 20 20 31 3a 20 73 69 7a 65 20 6d 69 73  ts.  1: size mis
a900: 73 65 73 2e 20 20 32 3a 20 66 75 6c 6c 20 6d 69  ses.  2: full mi
a910: 73 73 65 73 20 2a 2f 0a 20 20 4c 6f 6f 6b 61 73  sses */.  Lookas
a920: 69 64 65 53 6c 6f 74 20 2a 70 46 72 65 65 3b 20  ideSlot *pFree; 
a930: 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61 76 61    /* List of ava
a940: 69 6c 61 62 6c 65 20 62 75 66 66 65 72 73 20 2a  ilable buffers *
a950: 2f 0a 20 20 76 6f 69 64 20 2a 70 53 74 61 72 74  /.  void *pStart
a960: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46  ;           /* F
a970: 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 76 61  irst byte of ava
a980: 69 6c 61 62 6c 65 20 6d 65 6d 6f 72 79 20 73 70  ilable memory sp
a990: 61 63 65 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70  ace */.  void *p
a9a0: 45 6e 64 3b 20 20 20 20 20 20 20 20 20 20 20 20  End;            
a9b0: 20 2f 2a 20 46 69 72 73 74 20 62 79 74 65 20 70   /* First byte p
a9c0: 61 73 74 20 65 6e 64 20 6f 66 20 61 76 61 69 6c  ast end of avail
a9d0: 61 62 6c 65 20 73 70 61 63 65 20 2a 2f 0a 7d 3b  able space */.};
a9e0: 0a 73 74 72 75 63 74 20 4c 6f 6f 6b 61 73 69 64  .struct Lookasid
a9f0: 65 53 6c 6f 74 20 7b 0a 20 20 4c 6f 6f 6b 61 73  eSlot {.  Lookas
aa00: 69 64 65 53 6c 6f 74 20 2a 70 4e 65 78 74 3b 20  ideSlot *pNext; 
aa10: 20 20 20 2f 2a 20 4e 65 78 74 20 62 75 66 66 65     /* Next buffe
aa20: 72 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66  r in the list of
aa30: 20 66 72 65 65 20 62 75 66 66 65 72 73 20 2a 2f   free buffers */
aa40: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 20 68 61 73  .};../*.** A has
aa50: 68 20 74 61 62 6c 65 20 66 6f 72 20 62 75 69 6c  h table for buil
aa60: 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 20 64 65  t-in function de
aa70: 66 69 6e 69 74 69 6f 6e 73 2e 20 20 28 41 70 70  finitions.  (App
aa80: 6c 69 63 61 74 69 6f 6e 2d 64 65 66 69 6e 65 64  lication-defined
aa90: 0a 2a 2a 20 66 75 6e 63 74 69 6f 6e 73 20 75 73  .** functions us
aaa0: 65 20 61 20 72 65 67 75 6c 61 72 20 74 61 62 6c  e a regular tabl
aab0: 65 20 74 61 62 6c 65 20 66 72 6f 6d 20 68 61 73  e table from has
aac0: 68 2e 68 2e 29 0a 2a 2a 0a 2a 2a 20 48 61 73 68  h.h.).**.** Hash
aad0: 20 65 61 63 68 20 46 75 6e 63 44 65 66 20 73 74   each FuncDef st
aae0: 72 75 63 74 75 72 65 20 69 6e 74 6f 20 6f 6e 65  ructure into one
aaf0: 20 6f 66 20 74 68 65 20 46 75 6e 63 44 65 66 48   of the FuncDefH
ab00: 61 73 68 2e 61 5b 5d 20 73 6c 6f 74 73 2e 0a 2a  ash.a[] slots..*
ab10: 2a 20 43 6f 6c 6c 69 73 69 6f 6e 73 20 61 72 65  * Collisions are
ab20: 20 6f 6e 20 74 68 65 20 46 75 6e 63 44 65 66 2e   on the FuncDef.
ab30: 75 2e 70 48 61 73 68 20 63 68 61 69 6e 2e 0a 2a  u.pHash chain..*
ab40: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
ab50: 5f 46 55 4e 43 5f 48 41 53 48 5f 53 5a 20 32 33  _FUNC_HASH_SZ 23
ab60: 0a 73 74 72 75 63 74 20 46 75 6e 63 44 65 66 48  .struct FuncDefH
ab70: 61 73 68 20 7b 0a 20 20 46 75 6e 63 44 65 66 20  ash {.  FuncDef 
ab80: 2a 61 5b 53 51 4c 49 54 45 5f 46 55 4e 43 5f 48  *a[SQLITE_FUNC_H
ab90: 41 53 48 5f 53 5a 5d 3b 20 20 20 20 20 20 20 2f  ASH_SZ];       /
aba0: 2a 20 48 61 73 68 20 74 61 62 6c 65 20 66 6f 72  * Hash table for
abb0: 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 7d 3b   functions */.};
abc0: 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
abd0: 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43 41 54  USER_AUTHENTICAT
abe0: 49 4f 4e 0a 2f 2a 0a 2a 2a 20 49 6e 66 6f 72 6d  ION./*.** Inform
abf0: 61 74 69 6f 6e 20 68 65 6c 64 20 69 6e 20 74 68  ation held in th
ac00: 65 20 22 73 71 6c 69 74 65 33 22 20 64 61 74 61  e "sqlite3" data
ac10: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
ac20: 6f 62 6a 65 63 74 20 61 6e 64 20 75 73 65 64 0a  object and used.
ac30: 2a 2a 20 74 6f 20 6d 61 6e 61 67 65 20 75 73 65  ** to manage use
ac40: 72 20 61 75 74 68 65 6e 74 69 63 61 74 69 6f 6e  r authentication
ac50: 2e 0a 2a 2f 0a 74 79 70 65 64 65 66 20 73 74 72  ..*/.typedef str
ac60: 75 63 74 20 73 71 6c 69 74 65 33 5f 75 73 65 72  uct sqlite3_user
ac70: 61 75 74 68 20 73 71 6c 69 74 65 33 5f 75 73 65  auth sqlite3_use
ac80: 72 61 75 74 68 3b 0a 73 74 72 75 63 74 20 73 71  rauth;.struct sq
ac90: 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20 7b  lite3_userauth {
aca0: 0a 20 20 75 38 20 61 75 74 68 4c 65 76 65 6c 3b  .  u8 authLevel;
acb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
acc0: 20 2f 2a 20 43 75 72 72 65 6e 74 20 61 75 74 68   /* Current auth
acd0: 65 6e 74 69 63 61 74 69 6f 6e 20 6c 65 76 65 6c  entication level
ace0: 20 2a 2f 0a 20 20 69 6e 74 20 6e 41 75 74 68 50   */.  int nAuthP
acf0: 57 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  W;              
ad00: 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20 74      /* Size of t
ad10: 68 65 20 7a 41 75 74 68 50 57 20 69 6e 20 62 79  he zAuthPW in by
ad20: 74 65 73 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  tes */.  char *z
ad30: 41 75 74 68 50 57 3b 20 20 20 20 20 20 20 20 20  AuthPW;         
ad40: 20 20 20 20 20 20 20 2f 2a 20 50 61 73 73 77 6f         /* Passwo
ad50: 72 64 20 75 73 65 64 20 74 6f 20 61 75 74 68 65  rd used to authe
ad60: 6e 74 69 63 61 74 65 20 2a 2f 0a 20 20 63 68 61  nticate */.  cha
ad70: 72 20 2a 7a 41 75 74 68 55 73 65 72 3b 20 20 20  r *zAuthUser;   
ad80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 55 73             /* Us
ad90: 65 72 20 6e 61 6d 65 20 75 73 65 64 20 74 6f 20  er name used to 
ada0: 61 75 74 68 65 6e 74 69 63 61 74 65 20 2a 2f 0a  authenticate */.
adb0: 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 76  };../* Allowed v
adc0: 61 6c 75 65 73 20 66 6f 72 20 73 71 6c 69 74 65  alues for sqlite
add0: 33 5f 75 73 65 72 61 75 74 68 2e 61 75 74 68 4c  3_userauth.authL
ade0: 65 76 65 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  evel */.#define 
adf0: 55 41 55 54 48 5f 55 6e 6b 6e 6f 77 6e 20 20 20  UAUTH_Unknown   
ae00: 20 20 30 20 20 20 20 20 2f 2a 20 41 75 74 68 65    0     /* Authe
ae10: 6e 74 69 63 61 74 69 6f 6e 20 6e 6f 74 20 79 65  ntication not ye
ae20: 74 20 63 68 65 63 6b 65 64 20 2a 2f 0a 23 64 65  t checked */.#de
ae30: 66 69 6e 65 20 55 41 55 54 48 5f 46 61 69 6c 20  fine UAUTH_Fail 
ae40: 20 20 20 20 20 20 20 31 20 20 20 20 20 2f 2a 20         1     /* 
ae50: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
ae60: 69 6f 6e 20 66 61 69 6c 65 64 20 2a 2f 0a 23 64  ion failed */.#d
ae70: 65 66 69 6e 65 20 55 41 55 54 48 5f 55 73 65 72  efine UAUTH_User
ae80: 20 20 20 20 20 20 20 20 32 20 20 20 20 20 2f 2a          2     /*
ae90: 20 41 75 74 68 65 6e 74 69 63 61 74 65 64 20 61   Authenticated a
aea0: 73 20 61 20 6e 6f 72 6d 61 6c 20 75 73 65 72 20  s a normal user 
aeb0: 2a 2f 0a 23 64 65 66 69 6e 65 20 55 41 55 54 48  */.#define UAUTH
aec0: 5f 41 64 6d 69 6e 20 20 20 20 20 20 20 33 20 20  _Admin       3  
aed0: 20 20 20 2f 2a 20 41 75 74 68 65 6e 74 69 63 61     /* Authentica
aee0: 74 65 64 20 61 73 20 61 6e 20 61 64 6d 69 6e 69  ted as an admini
aef0: 73 74 72 61 74 6f 72 20 2a 2f 0a 0a 2f 2a 20 46  strator */../* F
af00: 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 6f 6e  unctions used on
af10: 6c 79 20 62 79 20 75 73 65 72 20 61 75 74 68 6f  ly by user autho
af20: 72 69 7a 61 74 69 6f 6e 20 6c 6f 67 69 63 20 2a  rization logic *
af30: 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 55 73 65  /.int sqlite3Use
af40: 72 41 75 74 68 54 61 62 6c 65 28 63 6f 6e 73 74  rAuthTable(const
af50: 20 63 68 61 72 2a 29 3b 0a 69 6e 74 20 73 71 6c   char*);.int sql
af60: 69 74 65 33 55 73 65 72 41 75 74 68 43 68 65 63  ite3UserAuthChec
af70: 6b 4c 6f 67 69 6e 28 73 71 6c 69 74 65 33 2a 2c  kLogin(sqlite3*,
af80: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 38 2a 29  const char*,u8*)
af90: 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 73  ;.void sqlite3Us
afa0: 65 72 41 75 74 68 49 6e 69 74 28 73 71 6c 69 74  erAuthInit(sqlit
afb0: 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
afc0: 65 33 43 72 79 70 74 46 75 6e 63 28 73 71 6c 69  e3CryptFunc(sqli
afd0: 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74  te3_context*,int
afe0: 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 2a  ,sqlite3_value**
aff0: 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  );..#endif /* SQ
b000: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b010: 54 49 43 41 54 49 4f 4e 20 2a 2f 0a 0a 2f 2a 0a  TICATION */../*.
b020: 2a 2a 20 74 79 70 65 64 65 66 20 66 6f 72 20 74  ** typedef for t
b030: 68 65 20 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e  he authorization
b040: 20 63 61 6c 6c 62 61 63 6b 20 66 75 6e 63 74 69   callback functi
b050: 6f 6e 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51  on..*/.#ifdef SQ
b060: 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e  LITE_USER_AUTHEN
b070: 54 49 43 41 54 49 4f 4e 0a 20 20 74 79 70 65 64  TICATION.  typed
b080: 65 66 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33  ef int (*sqlite3
b090: 5f 78 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e  _xauth)(void*,in
b0a0: 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f  t,const char*,co
b0b0: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
b0c0: 63 68 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20  char*,.         
b0d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0e0: 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
b0f0: 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  *, const char*);
b100: 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
b110: 20 69 6e 74 20 28 2a 73 71 6c 69 74 65 33 5f 78   int (*sqlite3_x
b120: 61 75 74 68 29 28 76 6f 69 64 2a 2c 69 6e 74 2c  auth)(void*,int,
b130: 63 6f 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73  const char*,cons
b140: 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20 63 68  t char*,const ch
b150: 61 72 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ar*,.           
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b170: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 2a 29      const char*)
b180: 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  ;.#endif..#ifnde
b190: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  f SQLITE_OMIT_DE
b1a0: 50 52 45 43 41 54 45 44 0a 2f 2a 20 54 68 69 73  PRECATED./* This
b1b0: 20 69 73 20 61 6e 20 65 78 74 72 61 20 53 51 4c   is an extra SQL
b1c0: 49 54 45 5f 54 52 41 43 45 20 6d 61 63 72 6f 20  ITE_TRACE macro 
b1d0: 74 68 61 74 20 69 6e 64 69 63 61 74 65 73 20 22  that indicates "
b1e0: 6c 65 67 61 63 79 22 20 74 72 61 63 69 6e 67 0a  legacy" tracing.
b1f0: 2a 2a 20 69 6e 20 74 68 65 20 73 74 79 6c 65 20  ** in the style 
b200: 6f 66 20 73 71 6c 69 74 65 33 5f 74 72 61 63 65  of sqlite3_trace
b210: 28 29 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ().*/.#define SQ
b220: 4c 49 54 45 5f 54 52 41 43 45 5f 4c 45 47 41 43  LITE_TRACE_LEGAC
b230: 59 20 20 30 78 38 30 0a 23 65 6c 73 65 0a 23 64  Y  0x80.#else.#d
b240: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 54 52 41  efine SQLITE_TRA
b250: 43 45 5f 4c 45 47 41 43 59 20 20 30 0a 23 65 6e  CE_LEGACY  0.#en
b260: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b270: 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f  IT_DEPRECATED */
b280: 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 64 61  .../*.** Each da
b290: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
b2a0: 6e 20 69 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  n is an instance
b2b0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
b2c0: 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a  g structure..*/.
b2d0: 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 20 7b  struct sqlite3 {
b2e0: 0a 20 20 73 71 6c 69 74 65 33 5f 76 66 73 20 2a  .  sqlite3_vfs *
b2f0: 70 56 66 73 3b 20 20 20 20 20 20 20 20 20 20 20  pVfs;           
b300: 20 2f 2a 20 4f 53 20 49 6e 74 65 72 66 61 63 65   /* OS Interface
b310: 20 2a 2f 0a 20 20 73 74 72 75 63 74 20 56 64 62   */.  struct Vdb
b320: 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20 20 20  e *pVdbe;       
b330: 20 20 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 61      /* List of a
b340: 63 74 69 76 65 20 76 69 72 74 75 61 6c 20 6d 61  ctive virtual ma
b350: 63 68 69 6e 65 73 20 2a 2f 0a 20 20 43 6f 6c 6c  chines */.  Coll
b360: 53 65 71 20 2a 70 44 66 6c 74 43 6f 6c 6c 3b 20  Seq *pDfltColl; 
b370: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
b380: 20 64 65 66 61 75 6c 74 20 63 6f 6c 6c 61 74 69   default collati
b390: 6e 67 20 73 65 71 75 65 6e 63 65 20 28 42 49 4e  ng sequence (BIN
b3a0: 41 52 59 29 20 2a 2f 0a 20 20 73 71 6c 69 74 65  ARY) */.  sqlite
b3b0: 33 5f 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20  3_mutex *mutex; 
b3c0: 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 6e 65          /* Conne
b3d0: 63 74 69 6f 6e 20 6d 75 74 65 78 20 2a 2f 0a 20  ction mutex */. 
b3e0: 20 44 62 20 2a 61 44 62 3b 20 20 20 20 20 20 20   Db *aDb;       
b3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b400: 2a 20 41 6c 6c 20 62 61 63 6b 65 6e 64 73 20 2a  * All backends *
b410: 2f 0a 20 20 69 6e 74 20 6e 44 62 3b 20 20 20 20  /.  int nDb;    
b420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b430: 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 62    /* Number of b
b440: 61 63 6b 65 6e 64 73 20 63 75 72 72 65 6e 74 6c  ackends currentl
b450: 79 20 69 6e 20 75 73 65 20 2a 2f 0a 20 20 69 6e  y in use */.  in
b460: 74 20 66 6c 61 67 73 3b 20 20 20 20 20 20 20 20  t flags;        
b470: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
b480: 69 73 63 65 6c 6c 61 6e 65 6f 75 73 20 66 6c 61  iscellaneous fla
b490: 67 73 2e 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f  gs. See below */
b4a0: 0a 20 20 69 36 34 20 6c 61 73 74 52 6f 77 69 64  .  i64 lastRowid
b4b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b4c0: 20 2f 2a 20 52 4f 57 49 44 20 6f 66 20 6d 6f 73   /* ROWID of mos
b4d0: 74 20 72 65 63 65 6e 74 20 69 6e 73 65 72 74 20  t recent insert 
b4e0: 28 73 65 65 20 61 62 6f 76 65 29 20 2a 2f 0a 20  (see above) */. 
b4f0: 20 69 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20   i64 szMmap;    
b500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
b510: 2a 20 44 65 66 61 75 6c 74 20 6d 6d 61 70 5f 73  * Default mmap_s
b520: 69 7a 65 20 73 65 74 74 69 6e 67 20 2a 2f 0a 20  ize setting */. 
b530: 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 6f 70   unsigned int op
b540: 65 6e 46 6c 61 67 73 3b 20 20 20 20 20 20 20 2f  enFlags;       /
b550: 2a 20 46 6c 61 67 73 20 70 61 73 73 65 64 20 74  * Flags passed t
b560: 6f 20 73 71 6c 69 74 65 33 5f 76 66 73 2e 78 4f  o sqlite3_vfs.xO
b570: 70 65 6e 28 29 20 2a 2f 0a 20 20 69 6e 74 20 65  pen() */.  int e
b580: 72 72 43 6f 64 65 3b 20 20 20 20 20 20 20 20 20  rrCode;         
b590: 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 6f 73 74           /* Most
b5a0: 20 72 65 63 65 6e 74 20 65 72 72 6f 72 20 63 6f   recent error co
b5b0: 64 65 20 28 53 51 4c 49 54 45 5f 2a 29 20 2a 2f  de (SQLITE_*) */
b5c0: 0a 20 20 69 6e 74 20 65 72 72 4d 61 73 6b 3b 20  .  int errMask; 
b5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b5e0: 20 2f 2a 20 26 20 72 65 73 75 6c 74 20 63 6f 64   /* & result cod
b5f0: 65 73 20 77 69 74 68 20 74 68 69 73 20 62 65 66  es with this bef
b600: 6f 72 65 20 72 65 74 75 72 6e 69 6e 67 20 2a 2f  ore returning */
b610: 0a 20 20 69 6e 74 20 69 53 79 73 45 72 72 6e 6f  .  int iSysErrno
b620: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
b630: 20 2f 2a 20 45 72 72 6e 6f 20 76 61 6c 75 65 20   /* Errno value 
b640: 66 72 6f 6d 20 6c 61 73 74 20 73 79 73 74 65 6d  from last system
b650: 20 65 72 72 6f 72 20 2a 2f 0a 20 20 75 31 36 20   error */.  u16 
b660: 64 62 4f 70 74 46 6c 61 67 73 3b 20 20 20 20 20  dbOptFlags;     
b670: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6c 61            /* Fla
b680: 67 73 20 74 6f 20 65 6e 61 62 6c 65 2f 64 69 73  gs to enable/dis
b690: 61 62 6c 65 20 6f 70 74 69 6d 69 7a 61 74 69 6f  able optimizatio
b6a0: 6e 73 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b 20  ns */.  u8 enc; 
b6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6c0: 20 20 20 20 20 20 2f 2a 20 54 65 78 74 20 65 6e        /* Text en
b6d0: 63 6f 64 69 6e 67 20 2a 2f 0a 20 20 75 38 20 61  coding */.  u8 a
b6e0: 75 74 6f 43 6f 6d 6d 69 74 3b 20 20 20 20 20 20  utoCommit;      
b6f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65            /* The
b700: 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 66 6c 61   auto-commit fla
b710: 67 2e 20 2a 2f 0a 20 20 75 38 20 72 65 61 64 6f  g. */.  u8 reado
b720: 6e 6c 79 54 72 61 6e 73 3b 20 20 20 20 20 20 20  nlyTrans;       
b730: 20 20 20 20 20 20 2f 2a 20 54 72 61 6e 73 61 63        /* Transac
b740: 74 69 6f 6e 20 6f 70 65 6e 65 64 20 77 69 74 68  tion opened with
b750: 20 42 45 47 49 4e 20 52 45 41 44 4f 4e 4c 59 20   BEGIN READONLY 
b760: 2a 2f 0a 20 20 75 38 20 74 65 6d 70 5f 73 74 6f  */.  u8 temp_sto
b770: 72 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  re;             
b780: 20 20 20 2f 2a 20 31 3a 20 66 69 6c 65 20 32 3a     /* 1: file 2:
b790: 20 6d 65 6d 6f 72 79 20 30 3a 20 64 65 66 61 75   memory 0: defau
b7a0: 6c 74 20 2a 2f 0a 20 20 75 38 20 6d 61 6c 6c 6f  lt */.  u8 mallo
b7b0: 63 46 61 69 6c 65 64 3b 20 20 20 20 20 20 20 20  cFailed;        
b7c0: 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66        /* True if
b7d0: 20 77 65 20 68 61 76 65 20 73 65 65 6e 20 61 20   we have seen a 
b7e0: 6d 61 6c 6c 6f 63 20 66 61 69 6c 75 72 65 20 2a  malloc failure *
b7f0: 2f 0a 20 20 75 38 20 62 42 65 6e 69 67 6e 4d 61  /.  u8 bBenignMa
b800: 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 20 20  lloc;           
b810: 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 72 65 71 75    /* Do not requ
b820: 69 72 65 20 4f 4f 4d 73 20 69 66 20 74 72 75 65  ire OOMs if true
b830: 20 2a 2f 0a 20 20 75 38 20 64 66 6c 74 4c 6f 63   */.  u8 dfltLoc
b840: 6b 4d 6f 64 65 3b 20 20 20 20 20 20 20 20 20 20  kMode;          
b850: 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c      /* Default l
b860: 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 66 6f 72 20  ocking-mode for 
b870: 61 74 74 61 63 68 65 64 20 64 62 73 20 2a 2f 0a  attached dbs */.
b880: 20 20 73 69 67 6e 65 64 20 63 68 61 72 20 6e 65    signed char ne
b890: 78 74 41 75 74 6f 76 61 63 3b 20 20 20 20 20 20  xtAutovac;      
b8a0: 2f 2a 20 41 75 74 6f 76 61 63 20 73 65 74 74 69  /* Autovac setti
b8b0: 6e 67 20 61 66 74 65 72 20 56 41 43 55 55 4d 20  ng after VACUUM 
b8c0: 69 66 20 3e 3d 30 20 2a 2f 0a 20 20 75 38 20 73  if >=0 */.  u8 s
b8d0: 75 70 70 72 65 73 73 45 72 72 3b 20 20 20 20 20  uppressErr;     
b8e0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20            /* Do 
b8f0: 6e 6f 74 20 69 73 73 75 65 20 65 72 72 6f 72 20  not issue error 
b900: 6d 65 73 73 61 67 65 73 20 69 66 20 74 72 75 65  messages if true
b910: 20 2a 2f 0a 20 20 75 38 20 76 74 61 62 4f 6e 43   */.  u8 vtabOnC
b920: 6f 6e 66 6c 69 63 74 3b 20 20 20 20 20 20 20 20  onflict;        
b930: 20 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20      /* Value to 
b940: 72 65 74 75 72 6e 20 66 6f 72 20 73 33 5f 76 74  return for s3_vt
b950: 61 62 5f 6f 6e 5f 63 6f 6e 66 6c 69 63 74 28 29  ab_on_conflict()
b960: 20 2a 2f 0a 20 20 75 38 20 69 73 54 72 61 6e 73   */.  u8 isTrans
b970: 61 63 74 69 6f 6e 53 61 76 65 70 6f 69 6e 74 3b  actionSavepoint;
b980: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74      /* True if t
b990: 68 65 20 6f 75 74 65 72 6d 6f 73 74 20 73 61 76  he outermost sav
b9a0: 65 70 6f 69 6e 74 20 69 73 20 61 20 54 53 20 2a  epoint is a TS *
b9b0: 2f 0a 20 20 75 38 20 6d 54 72 61 63 65 3b 20 20  /.  u8 mTrace;  
b9c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9d0: 20 20 2f 2a 20 7a 65 72 6f 20 6f 72 20 6d 6f 72    /* zero or mor
b9e0: 65 20 53 51 4c 49 54 45 5f 54 52 41 43 45 20 66  e SQLITE_TRACE f
b9f0: 6c 61 67 73 20 2a 2f 0a 20 20 75 38 20 73 6b 69  lags */.  u8 ski
ba00: 70 42 74 72 65 65 4d 75 74 65 78 3b 20 20 20 20  pBtreeMutex;    
ba10: 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
ba20: 69 66 20 6e 6f 20 73 68 61 72 65 64 2d 63 61 63  if no shared-cac
ba30: 68 65 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  he backends */. 
ba40: 20 75 38 20 6e 53 71 6c 45 78 65 63 3b 20 20 20   u8 nSqlExec;   
ba50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
ba60: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70 65 6e 64  * Number of pend
ba70: 69 6e 67 20 4f 50 5f 53 71 6c 45 78 65 63 20 6f  ing OP_SqlExec o
ba80: 70 63 6f 64 65 73 20 2a 2f 0a 20 20 69 6e 74 20  pcodes */.  int 
ba90: 6e 65 78 74 50 61 67 65 73 69 7a 65 3b 20 20 20  nextPagesize;   
baa0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 67            /* Pag
bab0: 65 73 69 7a 65 20 61 66 74 65 72 20 56 41 43 55  esize after VACU
bac0: 55 4d 20 69 66 20 3e 30 20 2a 2f 0a 20 20 75 33  UM if >0 */.  u3
bad0: 32 20 6d 61 67 69 63 3b 20 20 20 20 20 20 20 20  2 magic;        
bae0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d              /* M
baf0: 61 67 69 63 20 6e 75 6d 62 65 72 20 66 6f 72 20  agic number for 
bb00: 64 65 74 65 63 74 20 6c 69 62 72 61 72 79 20 6d  detect library m
bb10: 69 73 75 73 65 20 2a 2f 0a 20 20 69 6e 74 20 6e  isuse */.  int n
bb20: 43 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20  Change;         
bb30: 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75           /* Valu
bb40: 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 73 71  e returned by sq
bb50: 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28 29 20  lite3_changes() 
bb60: 2a 2f 0a 20 20 69 6e 74 20 6e 54 6f 74 61 6c 43  */.  int nTotalC
bb70: 68 61 6e 67 65 3b 20 20 20 20 20 20 20 20 20 20  hange;          
bb80: 20 20 20 2f 2a 20 56 61 6c 75 65 20 72 65 74 75     /* Value retu
bb90: 72 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  rned by sqlite3_
bba0: 74 6f 74 61 6c 5f 63 68 61 6e 67 65 73 28 29 20  total_changes() 
bbb0: 2a 2f 0a 20 20 69 6e 74 20 61 4c 69 6d 69 74 5b  */.  int aLimit[
bbc0: 53 51 4c 49 54 45 5f 4e 5f 4c 49 4d 49 54 5d 3b  SQLITE_N_LIMIT];
bbd0: 20 20 20 2f 2a 20 4c 69 6d 69 74 73 20 2a 2f 0a     /* Limits */.
bbe0: 20 20 69 6e 74 20 6e 4d 61 78 53 6f 72 74 65 72    int nMaxSorter
bbf0: 4d 6d 61 70 3b 20 20 20 20 20 20 20 20 20 20 20  Mmap;           
bc00: 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 69 7a 65 20  /* Maximum size 
bc10: 6f 66 20 72 65 67 69 6f 6e 73 20 6d 61 70 70 65  of regions mappe
bc20: 64 20 62 79 20 73 6f 72 74 65 72 20 2a 2f 0a 20  d by sorter */. 
bc30: 20 73 74 72 75 63 74 20 73 71 6c 69 74 65 33 49   struct sqlite3I
bc40: 6e 69 74 49 6e 66 6f 20 7b 20 20 20 20 20 20 2f  nitInfo {      /
bc50: 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 75 73  * Information us
bc60: 65 64 20 64 75 72 69 6e 67 20 69 6e 69 74 69 61  ed during initia
bc70: 6c 69 7a 61 74 69 6f 6e 20 2a 2f 0a 20 20 20 20  lization */.    
bc80: 69 6e 74 20 6e 65 77 54 6e 75 6d 3b 20 20 20 20  int newTnum;    
bc90: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52              /* R
bca0: 6f 6f 74 70 61 67 65 20 6f 66 20 74 61 62 6c 65  ootpage of table
bcb0: 20 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a   being initializ
bcc0: 65 64 20 2a 2f 0a 20 20 20 20 75 38 20 69 44 62  ed */.    u8 iDb
bcd0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bce0: 20 20 20 20 20 20 2f 2a 20 57 68 69 63 68 20 64        /* Which d
bcf0: 62 20 66 69 6c 65 20 69 73 20 62 65 69 6e 67 20  b file is being 
bd00: 69 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20  initialized */. 
bd10: 20 20 20 75 38 20 62 75 73 79 3b 20 20 20 20 20     u8 busy;     
bd20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bd30: 2a 20 54 52 55 45 20 69 66 20 63 75 72 72 65 6e  * TRUE if curren
bd40: 74 6c 79 20 69 6e 69 74 69 61 6c 69 7a 69 6e 67  tly initializing
bd50: 20 2a 2f 0a 20 20 20 20 75 38 20 6f 72 70 68 61   */.    u8 orpha
bd60: 6e 54 72 69 67 67 65 72 3b 20 20 20 20 20 20 20  nTrigger;       
bd70: 20 20 20 20 2f 2a 20 4c 61 73 74 20 73 74 61 74      /* Last stat
bd80: 65 6d 65 6e 74 20 69 73 20 6f 72 70 68 61 6e 65  ement is orphane
bd90: 64 20 54 45 4d 50 20 74 72 69 67 67 65 72 20 2a  d TEMP trigger *
bda0: 2f 0a 20 20 20 20 75 38 20 69 6d 70 6f 73 74 65  /.    u8 imposte
bdb0: 72 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20  rTable;         
bdc0: 20 20 2f 2a 20 42 75 69 6c 64 69 6e 67 20 61 6e    /* Building an
bdd0: 20 69 6d 70 6f 73 74 65 72 20 74 61 62 6c 65 20   imposter table 
bde0: 2a 2f 0a 20 20 7d 20 69 6e 69 74 3b 0a 20 20 69  */.  } init;.  i
bdf0: 6e 74 20 6e 56 64 62 65 41 63 74 69 76 65 3b 20  nt nVdbeActive; 
be00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
be10: 4e 75 6d 62 65 72 20 6f 66 20 56 44 42 45 73 20  Number of VDBEs 
be20: 63 75 72 72 65 6e 74 6c 79 20 72 75 6e 6e 69 6e  currently runnin
be30: 67 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  g */.  int nVdbe
be40: 52 65 61 64 3b 20 20 20 20 20 20 20 20 20 20 20  Read;           
be50: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
be60: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
be70: 68 61 74 20 72 65 61 64 20 6f 72 20 77 72 69 74  hat read or writ
be80: 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62 65  e */.  int nVdbe
be90: 57 72 69 74 65 3b 20 20 20 20 20 20 20 20 20 20  Write;          
bea0: 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
beb0: 66 20 61 63 74 69 76 65 20 56 44 42 45 73 20 74  f active VDBEs t
bec0: 68 61 74 20 72 65 61 64 20 61 6e 64 20 77 72 69  hat read and wri
bed0: 74 65 20 2a 2f 0a 20 20 69 6e 74 20 6e 56 64 62  te */.  int nVdb
bee0: 65 45 78 65 63 3b 20 20 20 20 20 20 20 20 20 20  eExec;          
bef0: 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
bf00: 6f 66 20 6e 65 73 74 65 64 20 63 61 6c 6c 73 20  of nested calls 
bf10: 74 6f 20 56 64 62 65 45 78 65 63 28 29 20 2a 2f  to VdbeExec() */
bf20: 0a 20 20 69 6e 74 20 6e 56 44 65 73 74 72 6f 79  .  int nVDestroy
bf30: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
bf40: 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 61 63   /* Number of ac
bf50: 74 69 76 65 20 4f 50 5f 56 44 65 73 74 72 6f 79  tive OP_VDestroy
bf60: 20 6f 70 65 72 61 74 69 6f 6e 73 20 2a 2f 0a 20   operations */. 
bf70: 20 69 6e 74 20 6e 45 78 74 65 6e 73 69 6f 6e 3b   int nExtension;
bf80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
bf90: 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6c 6f 61 64  * Number of load
bfa0: 65 64 20 65 78 74 65 6e 73 69 6f 6e 73 20 2a 2f  ed extensions */
bfb0: 0a 20 20 76 6f 69 64 20 2a 2a 61 45 78 74 65 6e  .  void **aExten
bfc0: 73 69 6f 6e 3b 20 20 20 20 20 20 20 20 20 20 20  sion;           
bfd0: 20 2f 2a 20 41 72 72 61 79 20 6f 66 20 73 68 61   /* Array of sha
bfe0: 72 65 64 20 6c 69 62 72 61 72 79 20 68 61 6e 64  red library hand
bff0: 6c 65 73 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78  les */.  int (*x
c000: 54 72 61 63 65 29 28 75 33 32 2c 76 6f 69 64 2a  Trace)(u32,void*
c010: 2c 76 6f 69 64 2a 2c 76 6f 69 64 2a 29 3b 20 20  ,void*,void*);  
c020: 20 20 20 2f 2a 20 54 72 61 63 65 20 66 75 6e 63     /* Trace func
c030: 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  tion */.  void *
c040: 70 54 72 61 63 65 41 72 67 3b 20 20 20 20 20 20  pTraceArg;      
c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c060: 20 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20      /* Argument 
c070: 74 6f 20 74 68 65 20 74 72 61 63 65 20 66 75 6e  to the trace fun
c080: 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64 20  ction */.  void 
c090: 28 2a 78 50 72 6f 66 69 6c 65 29 28 76 6f 69 64  (*xProfile)(void
c0a0: 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 36  *,const char*,u6
c0b0: 34 29 3b 20 20 2f 2a 20 50 72 6f 66 69 6c 69 6e  4);  /* Profilin
c0c0: 67 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20  g function */.  
c0d0: 76 6f 69 64 20 2a 70 50 72 6f 66 69 6c 65 41 72  void *pProfileAr
c0e0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
c0f0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 72 67            /* Arg
c100: 75 6d 65 6e 74 20 74 6f 20 70 72 6f 66 69 6c 65  ument to profile
c110: 20 66 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76   function */.  v
c120: 6f 69 64 20 2a 70 43 6f 6d 6d 69 74 41 72 67 3b  oid *pCommitArg;
c130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c140: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
c150: 78 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 28  xCommitCallback(
c160: 29 20 2a 2f 0a 20 20 69 6e 74 20 28 2a 78 43 6f  ) */.  int (*xCo
c170: 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 28 76 6f  mmitCallback)(vo
c180: 69 64 2a 29 3b 20 20 20 20 2f 2a 20 49 6e 76 6f  id*);    /* Invo
c190: 6b 65 64 20 61 74 20 65 76 65 72 79 20 63 6f 6d  ked at every com
c1a0: 6d 69 74 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a  mit. */.  void *
c1b0: 70 52 6f 6c 6c 62 61 63 6b 41 72 67 3b 20 20 20  pRollbackArg;   
c1c0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
c1d0: 72 67 75 6d 65 6e 74 20 74 6f 20 78 52 6f 6c 6c  rgument to xRoll
c1e0: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 28 29 20 2a  backCallback() *
c1f0: 2f 0a 20 20 76 6f 69 64 20 28 2a 78 52 6f 6c 6c  /.  void (*xRoll
c200: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 29 28 76 6f  backCallback)(vo
c210: 69 64 2a 29 3b 20 2f 2a 20 49 6e 76 6f 6b 65 64  id*); /* Invoked
c220: 20 61 74 20 65 76 65 72 79 20 63 6f 6d 6d 69 74   at every commit
c230: 2e 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 70  . */.  void *pUp
c240: 64 61 74 65 41 72 67 3b 0a 20 20 76 6f 69 64 20  dateArg;.  void 
c250: 28 2a 78 55 70 64 61 74 65 43 61 6c 6c 62 61 63  (*xUpdateCallbac
c260: 6b 29 28 76 6f 69 64 2a 2c 69 6e 74 2c 20 63 6f  k)(void*,int, co
c270: 6e 73 74 20 63 68 61 72 2a 2c 63 6f 6e 73 74 20  nst char*,const 
c280: 63 68 61 72 2a 2c 73 71 6c 69 74 65 5f 69 6e 74  char*,sqlite_int
c290: 36 34 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49  64);.#ifdef SQLI
c2a0: 54 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44  TE_ENABLE_PREUPD
c2b0: 41 54 45 5f 48 4f 4f 4b 0a 20 20 76 6f 69 64 20  ATE_HOOK.  void 
c2c0: 2a 70 50 72 65 55 70 64 61 74 65 41 72 67 3b 20  *pPreUpdateArg; 
c2d0: 20 20 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73           /* Firs
c2e0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 50  t argument to xP
c2f0: 72 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b  reUpdateCallback
c300: 20 2a 2f 0a 20 20 76 6f 69 64 20 28 2a 78 50 72   */.  void (*xPr
c310: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 29  eUpdateCallback)
c320: 28 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 65  (   /* Registere
c330: 64 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  d using sqlite3_
c340: 70 72 65 75 70 64 61 74 65 5f 68 6f 6f 6b 28 29  preupdate_hook()
c350: 20 2a 2f 0a 20 20 20 20 76 6f 69 64 2a 2c 73 71   */.    void*,sq
c360: 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 68 61 72 20  lite3*,int,char 
c370: 63 6f 6e 73 74 2a 2c 63 68 61 72 20 63 6f 6e 73  const*,char cons
c380: 74 2a 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34  t*,sqlite3_int64
c390: 2c 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 0a 20  ,sqlite3_int64. 
c3a0: 20 29 3b 0a 20 20 50 72 65 55 70 64 61 74 65 20   );.  PreUpdate 
c3b0: 2a 70 50 72 65 55 70 64 61 74 65 3b 20 20 20 20  *pPreUpdate;    
c3c0: 20 20 20 20 2f 2a 20 43 6f 6e 74 65 78 74 20 66      /* Context f
c3d0: 6f 72 20 61 63 74 69 76 65 20 70 72 65 2d 75 70  or active pre-up
c3e0: 64 61 74 65 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  date callback */
c3f0: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
c400: 45 5f 45 4e 41 42 4c 45 5f 50 52 45 55 50 44 41  E_ENABLE_PREUPDA
c410: 54 45 5f 48 4f 4f 4b 20 2a 2f 0a 23 69 66 6e 64  TE_HOOK */.#ifnd
c420: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
c430: 41 4c 0a 20 20 69 6e 74 20 28 2a 78 57 61 6c 43  AL.  int (*xWalC
c440: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 2c  allback)(void *,
c450: 20 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73   sqlite3 *, cons
c460: 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 29 3b 0a  t char *, int);.
c470: 20 20 76 6f 69 64 20 2a 70 57 61 6c 41 72 67 3b    void *pWalArg;
c480: 0a 23 65 6e 64 69 66 0a 20 20 76 6f 69 64 28 2a  .#endif.  void(*
c490: 78 43 6f 6c 6c 4e 65 65 64 65 64 29 28 76 6f 69  xCollNeeded)(voi
c4a0: 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74 20  d*,sqlite3*,int 
c4b0: 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20 63  eTextRep,const c
c4c0: 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64 28 2a 78  har*);.  void(*x
c4d0: 43 6f 6c 6c 4e 65 65 64 65 64 31 36 29 28 76 6f  CollNeeded16)(vo
c4e0: 69 64 2a 2c 73 71 6c 69 74 65 33 2a 2c 69 6e 74  id*,sqlite3*,int
c4f0: 20 65 54 65 78 74 52 65 70 2c 63 6f 6e 73 74 20   eTextRep,const 
c500: 76 6f 69 64 2a 29 3b 0a 20 20 76 6f 69 64 20 2a  void*);.  void *
c510: 70 43 6f 6c 6c 4e 65 65 64 65 64 41 72 67 3b 0a  pCollNeededArg;.
c520: 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
c530: 2a 70 45 72 72 3b 20 20 20 20 20 20 20 20 20 20  *pErr;          
c540: 2f 2a 20 4d 6f 73 74 20 72 65 63 65 6e 74 20 65  /* Most recent e
c550: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a  rror message */.
c560: 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 76 6f    union {.    vo
c570: 6c 61 74 69 6c 65 20 69 6e 74 20 69 73 49 6e 74  latile int isInt
c580: 65 72 72 75 70 74 65 64 3b 20 2f 2a 20 54 72 75  errupted; /* Tru
c590: 65 20 69 66 20 73 71 6c 69 74 65 33 5f 69 6e 74  e if sqlite3_int
c5a0: 65 72 72 75 70 74 20 68 61 73 20 62 65 65 6e 20  errupt has been 
c5b0: 63 61 6c 6c 65 64 20 2a 2f 0a 20 20 20 20 64 6f  called */.    do
c5c0: 75 62 6c 65 20 6e 6f 74 55 73 65 64 31 3b 20 20  uble notUsed1;  
c5d0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70 61            /* Spa
c5e0: 63 65 72 20 2a 2f 0a 20 20 7d 20 75 31 3b 0a 20  cer */.  } u1;. 
c5f0: 20 4c 6f 6f 6b 61 73 69 64 65 20 6c 6f 6f 6b 61   Lookaside looka
c600: 73 69 64 65 3b 20 20 20 20 20 20 20 20 20 20 2f  side;          /
c610: 2a 20 4c 6f 6f 6b 61 73 69 64 65 20 6d 61 6c 6c  * Lookaside mall
c620: 6f 63 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  oc configuration
c630: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
c640: 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52 49 5a  TE_OMIT_AUTHORIZ
c650: 41 54 49 4f 4e 0a 20 20 73 71 6c 69 74 65 33 5f  ATION.  sqlite3_
c660: 78 61 75 74 68 20 78 41 75 74 68 3b 20 20 20 20  xauth xAuth;    
c670: 20 20 20 20 20 20 2f 2a 20 41 63 63 65 73 73 20        /* Access 
c680: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 66 75  authorization fu
c690: 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 76 6f 69 64  nction */.  void
c6a0: 20 2a 70 41 75 74 68 41 72 67 3b 20 20 20 20 20   *pAuthArg;     
c6b0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74            /* 1st
c6c0: 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65   argument to the
c6d0: 20 61 63 63 65 73 73 20 61 75 74 68 20 66 75 6e   access auth fun
c6e0: 63 74 69 6f 6e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ction */.#endif.
c6f0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
c700: 4d 49 54 5f 50 52 4f 47 52 45 53 53 5f 43 41 4c  MIT_PROGRESS_CAL
c710: 4c 42 41 43 4b 0a 20 20 69 6e 74 20 28 2a 78 50  LBACK.  int (*xP
c720: 72 6f 67 72 65 73 73 29 28 76 6f 69 64 20 2a 29  rogress)(void *)
c730: 3b 20 20 20 20 20 2f 2a 20 54 68 65 20 70 72 6f  ;     /* The pro
c740: 67 72 65 73 73 20 63 61 6c 6c 62 61 63 6b 20 2a  gress callback *
c750: 2f 0a 20 20 76 6f 69 64 20 2a 70 50 72 6f 67 72  /.  void *pProgr
c760: 65 73 73 41 72 67 3b 20 20 20 20 20 20 20 20 20  essArg;         
c770: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
c780: 20 74 68 65 20 70 72 6f 67 72 65 73 73 20 63 61   the progress ca
c790: 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 75 6e 73 69  llback */.  unsi
c7a0: 67 6e 65 64 20 6e 50 72 6f 67 72 65 73 73 4f 70  gned nProgressOp
c7b0: 73 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  s;        /* Num
c7c0: 62 65 72 20 6f 66 20 6f 70 63 6f 64 65 73 20 66  ber of opcodes f
c7d0: 6f 72 20 70 72 6f 67 72 65 73 73 20 63 61 6c 6c  or progress call
c7e0: 62 61 63 6b 20 2a 2f 0a 23 65 6e 64 69 66 0a 23  back */.#endif.#
c7f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
c800: 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
c810: 20 20 69 6e 74 20 6e 56 54 72 61 6e 73 3b 20 20    int nVTrans;  
c820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c830: 2f 2a 20 41 6c 6c 6f 63 61 74 65 64 20 73 69 7a  /* Allocated siz
c840: 65 20 6f 66 20 61 56 54 72 61 6e 73 20 2a 2f 0a  e of aVTrans */.
c850: 20 20 48 61 73 68 20 61 4d 6f 64 75 6c 65 3b 20    Hash aModule; 
c860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c870: 2f 2a 20 70 6f 70 75 6c 61 74 65 64 20 62 79 20  /* populated by 
c880: 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 6d  sqlite3_create_m
c890: 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 56 74 61  odule() */.  Vta
c8a0: 62 43 74 78 20 2a 70 56 74 61 62 43 74 78 3b 20  bCtx *pVtabCtx; 
c8b0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f             /* Co
c8c0: 6e 74 65 78 74 20 66 6f 72 20 61 63 74 69 76 65  ntext for active
c8d0: 20 76 74 61 62 20 63 6f 6e 6e 65 63 74 2f 63 72   vtab connect/cr
c8e0: 65 61 74 65 20 2a 2f 0a 20 20 56 54 61 62 6c 65  eate */.  VTable
c8f0: 20 2a 2a 61 56 54 72 61 6e 73 3b 20 20 20 20 20   **aVTrans;     
c900: 20 20 20 20 20 20 20 20 2f 2a 20 56 69 72 74 75          /* Virtu
c910: 61 6c 20 74 61 62 6c 65 73 20 77 69 74 68 20 6f  al tables with o
c920: 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e 73  pen transactions
c930: 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 44   */.  VTable *pD
c940: 69 73 63 6f 6e 6e 65 63 74 3b 20 20 20 20 2f 2a  isconnect;    /*
c950: 20 44 69 73 63 6f 6e 6e 65 63 74 20 74 68 65 73   Disconnect thes
c960: 65 20 69 6e 20 6e 65 78 74 20 73 71 6c 69 74 65  e in next sqlite
c970: 33 5f 70 72 65 70 61 72 65 28 29 20 2a 2f 0a 23  3_prepare() */.#
c980: 65 6e 64 69 66 0a 20 20 48 61 73 68 20 61 46 75  endif.  Hash aFu
c990: 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  nc;             
c9a0: 20 20 20 20 20 20 2f 2a 20 48 61 73 68 20 74 61        /* Hash ta
c9b0: 62 6c 65 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f  ble of connectio
c9c0: 6e 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20  n functions */. 
c9d0: 20 48 61 73 68 20 61 43 6f 6c 6c 53 65 71 3b 20   Hash aCollSeq; 
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
c9f0: 2a 20 41 6c 6c 20 63 6f 6c 6c 61 74 69 6e 67 20  * All collating 
ca00: 73 65 71 75 65 6e 63 65 73 20 2a 2f 0a 20 20 42  sequences */.  B
ca10: 75 73 79 48 61 6e 64 6c 65 72 20 62 75 73 79 48  usyHandler busyH
ca20: 61 6e 64 6c 65 72 3b 20 20 20 20 20 20 2f 2a 20  andler;      /* 
ca30: 42 75 73 79 20 63 61 6c 6c 62 61 63 6b 20 2a 2f  Busy callback */
ca40: 0a 20 20 44 62 20 61 44 62 53 74 61 74 69 63 5b  .  Db aDbStatic[
ca50: 32 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  2];             
ca60: 20 2f 2a 20 53 74 61 74 69 63 20 73 70 61 63 65   /* Static space
ca70: 20 66 6f 72 20 74 68 65 20 32 20 64 65 66 61 75   for the 2 defau
ca80: 6c 74 20 62 61 63 6b 65 6e 64 73 20 2a 2f 0a 20  lt backends */. 
ca90: 20 53 61 76 65 70 6f 69 6e 74 20 2a 70 53 61 76   Savepoint *pSav
caa0: 65 70 6f 69 6e 74 3b 20 20 20 20 20 20 20 20 2f  epoint;        /
cab0: 2a 20 4c 69 73 74 20 6f 66 20 61 63 74 69 76 65  * List of active
cac0: 20 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20   savepoints */. 
cad0: 20 69 6e 74 20 62 75 73 79 54 69 6d 65 6f 75 74   int busyTimeout
cae0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
caf0: 2a 20 42 75 73 79 20 68 61 6e 64 6c 65 72 20 74  * Busy handler t
cb00: 69 6d 65 6f 75 74 2c 20 69 6e 20 6d 73 65 63 20  imeout, in msec 
cb10: 2a 2f 0a 20 20 69 6e 74 20 6e 53 61 76 65 70 6f  */.  int nSavepo
cb20: 69 6e 74 3b 20 20 20 20 20 20 20 20 20 20 20 20  int;            
cb30: 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
cb40: 6e 6f 6e 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20  non-transaction 
cb50: 73 61 76 65 70 6f 69 6e 74 73 20 2a 2f 0a 20 20  savepoints */.  
cb60: 69 6e 74 20 6e 53 74 61 74 65 6d 65 6e 74 3b 20  int nStatement; 
cb70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
cb80: 20 4e 75 6d 62 65 72 20 6f 66 20 6e 65 73 74 65   Number of neste
cb90: 64 20 73 74 61 74 65 6d 65 6e 74 2d 74 72 61 6e  d statement-tran
cba0: 73 61 63 74 69 6f 6e 73 20 20 2a 2f 0a 20 20 69  sactions  */.  i
cbb0: 36 34 20 6e 44 65 66 65 72 72 65 64 43 6f 6e 73  64 nDeferredCons
cbc0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
cbd0: 4e 65 74 20 64 65 66 65 72 72 65 64 20 63 6f 6e  Net deferred con
cbe0: 73 74 72 61 69 6e 74 73 20 74 68 69 73 20 74 72  straints this tr
cbf0: 61 6e 73 61 63 74 69 6f 6e 2e 20 2a 2f 0a 20 20  ansaction. */.  
cc00: 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
cc10: 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 2f 2a  Cons;         /*
cc20: 20 4e 65 74 20 64 65 66 65 72 72 65 64 20 69 6d   Net deferred im
cc30: 6d 65 64 69 61 74 65 20 63 6f 6e 73 74 72 61 69  mediate constrai
cc40: 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 2a 70 6e  nts */.  int *pn
cc50: 42 79 74 65 73 46 72 65 65 64 3b 20 20 20 20 20  BytesFreed;     
cc60: 20 20 20 20 20 20 20 2f 2a 20 49 66 20 6e 6f 74         /* If not
cc70: 20 4e 55 4c 4c 2c 20 69 6e 63 72 65 6d 65 6e 74   NULL, increment
cc80: 20 74 68 69 73 20 69 6e 20 44 62 46 72 65 65 28   this in DbFree(
cc90: 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49  ) */.#ifdef SQLI
cca0: 54 45 5f 45 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b  TE_ENABLE_UNLOCK
ccb0: 5f 4e 4f 54 49 46 59 0a 20 20 2f 2a 20 54 68 65  _NOTIFY.  /* The
ccc0: 20 66 6f 6c 6c 6f 77 69 6e 67 20 76 61 72 69 61   following varia
ccd0: 62 6c 65 73 20 61 72 65 20 61 6c 6c 20 70 72 6f  bles are all pro
cce0: 74 65 63 74 65 64 20 62 79 20 74 68 65 20 53 54  tected by the ST
ccf0: 41 54 49 43 5f 4d 41 53 54 45 52 0a 20 20 2a 2a  ATIC_MASTER.  **
cd00: 20 6d 75 74 65 78 2c 20 6e 6f 74 20 62 79 20 73   mutex, not by s
cd10: 71 6c 69 74 65 33 2e 6d 75 74 65 78 2e 20 54 68  qlite3.mutex. Th
cd20: 65 79 20 61 72 65 20 75 73 65 64 20 62 79 20 63  ey are used by c
cd30: 6f 64 65 20 69 6e 20 6e 6f 74 69 66 79 2e 63 2e  ode in notify.c.
cd40: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e 20  .  **.  ** When 
cd50: 58 2e 70 55 6e 6c 6f 63 6b 43 6f 6e 6e 65 63 74  X.pUnlockConnect
cd60: 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20 6d 65 61  ion==Y, that mea
cd70: 6e 73 20 74 68 61 74 20 58 20 69 73 20 77 61 69  ns that X is wai
cd80: 74 69 6e 67 20 66 6f 72 20 59 20 74 6f 0a 20 20  ting for Y to.  
cd90: 2a 2a 20 75 6e 6c 6f 63 6b 20 73 6f 20 74 68 61  ** unlock so tha
cda0: 74 20 69 74 20 63 61 6e 20 70 72 6f 63 65 65 64  t it can proceed
cdb0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 57 68 65 6e  ..  **.  ** When
cdc0: 20 58 2e 70 42 6c 6f 63 6b 69 6e 67 43 6f 6e 6e   X.pBlockingConn
cdd0: 65 63 74 69 6f 6e 3d 3d 59 2c 20 74 68 61 74 20  ection==Y, that 
cde0: 6d 65 61 6e 73 20 74 68 61 74 20 73 6f 6d 65 74  means that somet
cdf0: 68 69 6e 67 20 74 68 61 74 20 58 20 74 72 69 65  hing that X trie
ce00: 64 0a 20 20 2a 2a 20 74 72 69 65 64 20 74 6f 20  d.  ** tried to 
ce10: 64 6f 20 72 65 63 65 6e 74 6c 79 20 66 61 69 6c  do recently fail
ce20: 65 64 20 77 69 74 68 20 61 6e 20 53 51 4c 49 54  ed with an SQLIT
ce30: 45 5f 4c 4f 43 4b 45 44 20 65 72 72 6f 72 20 64  E_LOCKED error d
ce40: 75 65 20 74 6f 20 6c 6f 63 6b 73 0a 20 20 2a 2a  ue to locks.  **
ce50: 20 68 65 6c 64 20 62 79 20 59 2e 0a 20 20 2a 2f   held by Y..  */
ce60: 0a 20 20 73 71 6c 69 74 65 33 20 2a 70 42 6c 6f  .  sqlite3 *pBlo
ce70: 63 6b 69 6e 67 43 6f 6e 6e 65 63 74 69 6f 6e 3b  ckingConnection;
ce80: 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f 6e 20 74   /* Connection t
ce90: 68 61 74 20 63 61 75 73 65 64 20 53 51 4c 49 54  hat caused SQLIT
cea0: 45 5f 4c 4f 43 4b 45 44 20 2a 2f 0a 20 20 73 71  E_LOCKED */.  sq
ceb0: 6c 69 74 65 33 20 2a 70 55 6e 6c 6f 63 6b 43 6f  lite3 *pUnlockCo
cec0: 6e 6e 65 63 74 69 6f 6e 3b 20 20 20 20 20 20 20  nnection;       
ced0: 20 20 20 20 2f 2a 20 43 6f 6e 6e 65 63 74 69 6f      /* Connectio
cee0: 6e 20 74 6f 20 77 61 74 63 68 20 66 6f 72 20 75  n to watch for u
cef0: 6e 6c 6f 63 6b 20 2a 2f 0a 20 20 76 6f 69 64 20  nlock */.  void 
cf00: 2a 70 55 6e 6c 6f 63 6b 41 72 67 3b 20 20 20 20  *pUnlockArg;    
cf10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf20: 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f 20   /* Argument to 
cf30: 78 55 6e 6c 6f 63 6b 4e 6f 74 69 66 79 20 2a 2f  xUnlockNotify */
cf40: 0a 20 20 76 6f 69 64 20 28 2a 78 55 6e 6c 6f 63  .  void (*xUnloc
cf50: 6b 4e 6f 74 69 66 79 29 28 76 6f 69 64 20 2a 2a  kNotify)(void **
cf60: 2c 20 69 6e 74 29 3b 20 20 2f 2a 20 55 6e 6c 6f  , int);  /* Unlo
cf70: 63 6b 20 6e 6f 74 69 66 79 20 63 61 6c 6c 62 61  ck notify callba
cf80: 63 6b 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20  ck */.  sqlite3 
cf90: 2a 70 4e 65 78 74 42 6c 6f 63 6b 65 64 3b 20 20  *pNextBlocked;  
cfa0: 20 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e        /* Next in
cfb0: 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 62 6c 6f   list of all blo
cfc0: 63 6b 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  cked connections
cfd0: 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 64 65   */.#endif.#ifde
cfe0: 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f 41 55  f SQLITE_USER_AU
cff0: 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20 20 73  THENTICATION.  s
d000: 71 6c 69 74 65 33 5f 75 73 65 72 61 75 74 68 20  qlite3_userauth 
d010: 61 75 74 68 3b 20 20 20 20 20 20 20 20 2f 2a 20  auth;        /* 
d020: 55 73 65 72 20 61 75 74 68 65 6e 74 69 63 61 74  User authenticat
d030: 69 6f 6e 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ion information 
d040: 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a 2f 2a  */.#endif.};../*
d050: 0a 2a 2a 20 41 20 6d 61 63 72 6f 20 74 6f 20 64  .** A macro to d
d060: 69 73 63 6f 76 65 72 20 74 68 65 20 65 6e 63 6f  iscover the enco
d070: 64 69 6e 67 20 6f 66 20 61 20 64 61 74 61 62 61  ding of a databa
d080: 73 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53  se..*/.#define S
d090: 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20 28 28  CHEMA_ENC(db) ((
d0a0: 64 62 29 2d 3e 61 44 62 5b 30 5d 2e 70 53 63 68  db)->aDb[0].pSch
d0b0: 65 6d 61 2d 3e 65 6e 63 29 0a 23 64 65 66 69 6e  ema->enc).#defin
d0c0: 65 20 45 4e 43 28 64 62 29 20 20 20 20 20 20 20  e ENC(db)       
d0d0: 20 28 28 64 62 29 2d 3e 65 6e 63 29 0a 0a 2f 2a   ((db)->enc)../*
d0e0: 0a 2a 2a 20 50 6f 73 73 69 62 6c 65 20 76 61 6c  .** Possible val
d0f0: 75 65 73 20 66 6f 72 20 74 68 65 20 73 71 6c 69  ues for the sqli
d100: 74 65 33 2e 66 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a  te3.flags..**.**
d110: 20 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e   Value constrain
d120: 74 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61  ts (enforced via
d130: 20 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20   assert()):.**  
d140: 20 20 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46      SQLITE_FullF
d150: 53 79 6e 63 20 20 20 20 20 3d 3d 20 50 41 47 45  Sync     == PAGE
d160: 52 5f 46 55 4c 4c 46 53 59 4e 43 0a 2a 2a 20 20  R_FULLFSYNC.**  
d170: 20 20 20 20 53 51 4c 49 54 45 5f 43 6b 70 74 46      SQLITE_CkptF
d180: 75 6c 6c 46 53 79 6e 63 20 3d 3d 20 50 41 47 45  ullFSync == PAGE
d190: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
d1a0: 0a 2a 2a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  .**      SQLITE_
d1b0: 43 61 63 68 65 53 70 69 6c 6c 20 20 20 20 3d 3d  CacheSpill    ==
d1c0: 20 50 41 47 45 52 5f 43 41 43 48 45 5f 53 50 49   PAGER_CACHE_SPI
d1d0: 4c 4c 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  LL.*/.#define SQ
d1e0: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
d1f0: 20 20 20 20 30 78 30 30 30 30 30 30 30 31 20 20      0x00000001  
d200: 2f 2a 20 4f 4b 20 74 6f 20 75 70 64 61 74 65 20  /* OK to update 
d210: 53 51 4c 49 54 45 5f 4d 41 53 54 45 52 20 2a 2f  SQLITE_MASTER */
d220: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d230: 4c 65 67 61 63 79 46 69 6c 65 46 6d 74 20 20 30  LegacyFileFmt  0
d240: 78 30 30 30 30 30 30 30 32 20 20 2f 2a 20 43 72  x00000002  /* Cr
d250: 65 61 74 65 20 6e 65 77 20 64 61 74 61 62 61 73  eate new databas
d260: 65 73 20 69 6e 20 66 6f 72 6d 61 74 20 31 20 2a  es in format 1 *
d270: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d280: 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20 20 20  _FullColNames   
d290: 30 78 30 30 30 30 30 30 30 34 20 20 2f 2a 20 53  0x00000004  /* S
d2a0: 68 6f 77 20 66 75 6c 6c 20 63 6f 6c 75 6d 6e 20  how full column 
d2b0: 6e 61 6d 65 73 20 6f 6e 20 53 45 4c 45 43 54 20  names on SELECT 
d2c0: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d2d0: 45 5f 46 75 6c 6c 46 53 79 6e 63 20 20 20 20 20  E_FullFSync     
d2e0: 20 30 78 30 30 30 30 30 30 30 38 20 20 2f 2a 20   0x00000008  /* 
d2f0: 55 73 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 6f  Use full fsync o
d300: 6e 20 74 68 65 20 62 61 63 6b 65 6e 64 20 2a 2f  n the backend */
d310: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d320: 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63 20 20 30  CkptFullFSync  0
d330: 78 30 30 30 30 30 30 31 30 20 20 2f 2a 20 55 73  x00000010  /* Us
d340: 65 20 66 75 6c 6c 20 66 73 79 6e 63 20 66 6f 72  e full fsync for
d350: 20 63 68 65 63 6b 70 6f 69 6e 74 20 2a 2f 0a 23   checkpoint */.#
d360: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 61  define SQLITE_Ca
d370: 63 68 65 53 70 69 6c 6c 20 20 20 20 20 30 78 30  cheSpill     0x0
d380: 30 30 30 30 30 32 30 20 20 2f 2a 20 4f 4b 20 74  0000020  /* OK t
d390: 6f 20 73 70 69 6c 6c 20 70 61 67 65 72 20 63 61  o spill pager ca
d3a0: 63 68 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  che */.#define S
d3b0: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
d3c0: 6d 65 73 20 20 30 78 30 30 30 30 30 30 34 30 20  mes  0x00000040 
d3d0: 20 2f 2a 20 53 68 6f 77 20 73 68 6f 72 74 20 63   /* Show short c
d3e0: 6f 6c 75 6d 6e 73 20 6e 61 6d 65 73 20 2a 2f 0a  olumns names */.
d3f0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43  #define SQLITE_C
d400: 6f 75 6e 74 52 6f 77 73 20 20 20 20 20 20 30 78  ountRows      0x
d410: 30 30 30 30 30 30 38 30 20 20 2f 2a 20 43 6f 75  00000080  /* Cou
d420: 6e 74 20 72 6f 77 73 20 63 68 61 6e 67 65 64 20  nt rows changed 
d430: 62 79 20 49 4e 53 45 52 54 2c 20 2a 2f 0a 20 20  by INSERT, */.  
d440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d460: 20 20 20 20 20 20 20 20 2f 2a 20 20 20 44 45 4c          /*   DEL
d470: 45 54 45 2c 20 6f 72 20 55 50 44 41 54 45 20 61  ETE, or UPDATE a
d480: 6e 64 20 72 65 74 75 72 6e 20 2a 2f 0a 20 20 20  nd return */.   
d490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d4b0: 20 20 20 20 20 20 20 2f 2a 20 20 20 74 68 65 20         /*   the 
d4c0: 63 6f 75 6e 74 20 75 73 69 6e 67 20 61 20 63 61  count using a ca
d4d0: 6c 6c 62 61 63 6b 2e 20 2a 2f 0a 23 64 65 66 69  llback. */.#defi
d4e0: 6e 65 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61  ne SQLITE_NullCa
d4f0: 6c 6c 62 61 63 6b 20 20 20 30 78 30 30 30 30 30  llback   0x00000
d500: 31 30 30 20 20 2f 2a 20 49 6e 76 6f 6b 65 20 74  100  /* Invoke t
d510: 68 65 20 63 61 6c 6c 62 61 63 6b 20 6f 6e 63 65  he callback once
d520: 20 69 66 20 74 68 65 20 2a 2f 0a 20 20 20 20 20   if the */.     
d530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d550: 20 20 20 20 20 2f 2a 20 20 20 72 65 73 75 6c 74       /*   result
d560: 20 73 65 74 20 69 73 20 65 6d 70 74 79 20 2a 2f   set is empty */
d570: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d580: 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 20 20 30  IgnoreChecks   0
d590: 78 30 30 30 30 30 32 30 30 20 20 2f 2a 20 44 6f  x00000200  /* Do
d5a0: 20 6e 6f 74 20 65 6e 66 6f 72 63 65 20 63 68 65   not enforce che
d5b0: 63 6b 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 2a  ck constraints *
d5c0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
d5d0: 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 20 20 20  _ReadUncommit   
d5e0: 30 78 30 30 30 30 30 34 30 30 20 20 2f 2a 20 52  0x00000400  /* R
d5f0: 45 41 44 20 55 4e 43 4f 4d 4d 49 54 54 45 44 20  EAD UNCOMMITTED 
d600: 69 6e 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  in shared-cache 
d610: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d620: 45 5f 4e 6f 43 6b 70 74 4f 6e 43 6c 6f 73 65 20  E_NoCkptOnClose 
d630: 20 30 78 30 30 30 30 30 38 30 30 20 20 2f 2a 20   0x00000800  /* 
d640: 4e 6f 20 63 68 65 63 6b 70 6f 69 6e 74 20 6f 6e  No checkpoint on
d650: 20 63 6c 6f 73 65 28 29 2f 44 45 54 41 43 48 20   close()/DETACH 
d660: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
d670: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 20  E_ReverseOrder  
d680: 20 30 78 30 30 30 30 31 30 30 30 20 20 2f 2a 20   0x00001000  /* 
d690: 52 65 76 65 72 73 65 20 75 6e 6f 72 64 65 72 65  Reverse unordere
d6a0: 64 20 53 45 4c 45 43 54 73 20 2a 2f 0a 23 64 65  d SELECTs */.#de
d6b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 52 65 63 54  fine SQLITE_RecT
d6c0: 72 69 67 67 65 72 73 20 20 20 20 30 78 30 30 30  riggers    0x000
d6d0: 30 32 30 30 30 20 20 2f 2a 20 45 6e 61 62 6c 65  02000  /* Enable
d6e0: 20 72 65 63 75 72 73 69 76 65 20 74 72 69 67 67   recursive trigg
d6f0: 65 72 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ers */.#define S
d700: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
d710: 73 20 20 20 20 30 78 30 30 30 30 34 30 30 30 20  s    0x00004000 
d720: 20 2f 2a 20 45 6e 66 6f 72 63 65 20 66 6f 72 65   /* Enforce fore
d730: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
d740: 6e 74 73 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nts  */.#define 
d750: 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64 65 78  SQLITE_AutoIndex
d760: 20 20 20 20 20 20 30 78 30 30 30 30 38 30 30 30        0x00008000
d770: 20 20 2f 2a 20 45 6e 61 62 6c 65 20 61 75 74 6f    /* Enable auto
d780: 6d 61 74 69 63 20 69 6e 64 65 78 65 73 20 2a 2f  matic indexes */
d790: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d7a0: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 20 30  LoadExtension  0
d7b0: 78 30 30 30 31 30 30 30 30 20 20 2f 2a 20 45 6e  x00010000  /* En
d7c0: 61 62 6c 65 20 6c 6f 61 64 5f 65 78 74 65 6e 73  able load_extens
d7d0: 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ion */.#define S
d7e0: 51 4c 49 54 45 5f 45 6e 61 62 6c 65 54 72 69 67  QLITE_EnableTrig
d7f0: 67 65 72 20 20 30 78 30 30 30 32 30 30 30 30 20  ger  0x00020000 
d800: 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
d810: 6c 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 23  le triggers */.#
d820: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 44 65  define SQLITE_De
d830: 66 65 72 46 4b 73 20 20 20 20 20 20 20 30 78 30  ferFKs       0x0
d840: 30 30 34 30 30 30 30 20 20 2f 2a 20 44 65 66 65  0040000  /* Defe
d850: 72 20 61 6c 6c 20 46 4b 20 63 6f 6e 73 74 72 61  r all FK constra
d860: 69 6e 74 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ints */.#define 
d870: 53 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79  SQLITE_QueryOnly
d880: 20 20 20 20 20 20 30 78 30 30 30 38 30 30 30 30        0x00080000
d890: 20 20 2f 2a 20 44 69 73 61 62 6c 65 20 64 61 74    /* Disable dat
d8a0: 61 62 61 73 65 20 63 68 61 6e 67 65 73 20 2a 2f  abase changes */
d8b0: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
d8c0: 43 65 6c 6c 53 69 7a 65 43 6b 20 20 20 20 20 30  CellSizeCk     0
d8d0: 78 30 30 31 30 30 30 30 30 20 20 2f 2a 20 43 68  x00100000  /* Ch
d8e0: 65 63 6b 20 62 74 72 65 65 20 63 65 6c 6c 20 73  eck btree cell s
d8f0: 69 7a 65 73 20 6f 6e 20 6c 6f 61 64 20 2a 2f 0a  izes on load */.
d900: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
d910: 74 73 33 54 6f 6b 65 6e 69 7a 65 72 20 20 30 78  ts3Tokenizer  0x
d920: 30 30 32 30 30 30 30 30 20 20 2f 2a 20 45 6e 61  00200000  /* Ena
d930: 62 6c 65 20 66 74 73 33 5f 74 6f 6b 65 6e 69 7a  ble fts3_tokeniz
d940: 65 72 28 32 29 20 2a 2f 0a 23 64 65 66 69 6e 65  er(2) */.#define
d950: 20 53 51 4c 49 54 45 5f 45 6e 61 62 6c 65 51 50   SQLITE_EnableQP
d960: 53 47 20 20 20 20 20 30 78 30 30 34 30 30 30 30  SG     0x0040000
d970: 30 20 20 2f 2a 20 51 75 65 72 79 20 50 6c 61 6e  0  /* Query Plan
d980: 6e 65 72 20 53 74 61 62 69 6c 69 74 79 20 47 75  ner Stability Gu
d990: 61 72 61 6e 74 65 65 20 2a 2f 0a 2f 2a 20 54 68  arantee */./* Th
d9a0: 65 20 6e 65 78 74 20 66 6f 75 72 20 76 61 6c 75  e next four valu
d9b0: 65 73 20 61 72 65 20 6e 6f 74 20 75 73 65 64 20  es are not used 
d9c0: 62 79 20 50 52 41 47 4d 41 73 20 6f 72 20 62 79  by PRAGMAs or by
d9d0: 20 73 71 6c 69 74 65 33 5f 64 62 63 6f 6e 66 69   sqlite3_dbconfi
d9e0: 67 28 29 20 61 6e 64 0a 2a 2a 20 63 6f 75 6c 64  g() and.** could
d9f0: 20 62 65 20 66 61 63 74 6f 72 65 64 20 6f 75 74   be factored out
da00: 20 69 6e 74 6f 20 61 20 73 65 70 61 72 61 74 65   into a separate
da10: 20 62 69 74 20 76 65 63 74 6f 72 20 6f 66 20 74   bit vector of t
da20: 68 65 20 73 71 6c 69 74 65 33 20 6f 62 6a 65 63  he sqlite3 objec
da30: 74 2e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  t. */.#define SQ
da40: 4c 49 54 45 5f 49 6e 74 65 72 6e 43 68 61 6e 67  LITE_InternChang
da50: 65 73 20 20 30 78 30 30 38 30 30 30 30 30 20 20  es  0x00800000  
da60: 2f 2a 20 55 6e 63 6f 6d 6d 69 74 74 65 64 20 48  /* Uncommitted H
da70: 61 73 68 20 74 61 62 6c 65 20 63 68 61 6e 67 65  ash table change
da80: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
da90: 49 54 45 5f 4c 6f 61 64 45 78 74 46 75 6e 63 20  ITE_LoadExtFunc 
daa0: 20 20 20 30 78 30 31 30 30 30 30 30 30 20 20 2f     0x01000000  /
dab0: 2a 20 45 6e 61 62 6c 65 20 6c 6f 61 64 5f 65 78  * Enable load_ex
dac0: 74 65 6e 73 69 6f 6e 28 29 20 53 51 4c 20 66 75  tension() SQL fu
dad0: 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  nc */.#define SQ
dae0: 4c 49 54 45 5f 50 72 65 66 65 72 42 75 69 6c 74  LITE_PreferBuilt
daf0: 69 6e 20 20 30 78 30 32 30 30 30 30 30 30 20 20  in  0x02000000  
db00: 2f 2a 20 50 72 65 66 65 72 65 6e 63 65 20 74 6f  /* Preference to
db10: 20 62 75 69 6c 74 2d 69 6e 20 66 75 6e 63 73 20   built-in funcs 
db20: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
db30: 45 5f 56 61 63 75 75 6d 20 20 20 20 20 20 20 20  E_Vacuum        
db40: 20 30 78 30 34 30 30 30 30 30 30 20 20 2f 2a 20   0x04000000  /* 
db50: 43 75 72 72 65 6e 74 6c 79 20 69 6e 20 61 20 56  Currently in a V
db60: 41 43 55 55 4d 20 2a 2f 0a 2f 2a 20 46 6c 61 67  ACUUM */./* Flag
db70: 73 20 75 73 65 64 20 6f 6e 6c 79 20 69 66 20 64  s used only if d
db80: 65 62 75 67 67 69 6e 67 20 2a 2f 0a 23 69 66 64  ebugging */.#ifd
db90: 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
dba0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 53  #define SQLITE_S
dbb0: 71 6c 54 72 61 63 65 20 20 20 20 20 20 20 30 78  qlTrace       0x
dbc0: 30 38 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62  08000000  /* Deb
dbd0: 75 67 20 70 72 69 6e 74 20 53 51 4c 20 61 73 20  ug print SQL as 
dbe0: 69 74 20 65 78 65 63 75 74 65 73 20 2a 2f 0a 23  it executes */.#
dbf0: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
dc00: 62 65 4c 69 73 74 69 6e 67 20 20 20 20 30 78 31  beListing    0x1
dc10: 30 30 30 30 30 30 30 20 20 2f 2a 20 44 65 62 75  0000000  /* Debu
dc20: 67 20 6c 69 73 74 69 6e 67 73 20 6f 66 20 56 44  g listings of VD
dc30: 42 45 20 70 72 6f 67 72 61 6d 73 20 2a 2f 0a 23  BE programs */.#
dc40: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 56 64  define SQLITE_Vd
dc50: 62 65 54 72 61 63 65 20 20 20 20 20 20 30 78 32  beTrace      0x2
dc60: 30 30 30 30 30 30 30 20 20 2f 2a 20 54 72 75 65  0000000  /* True
dc70: 20 74 6f 20 74 72 61 63 65 20 56 44 42 45 20 65   to trace VDBE e
dc80: 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 23 64 65 66  xecution */.#def
dc90: 69 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 41  ine SQLITE_VdbeA
dca0: 64 64 6f 70 54 72 61 63 65 20 30 78 34 30 30 30  ddopTrace 0x4000
dcb0: 30 30 30 30 20 20 2f 2a 20 54 72 61 63 65 20 73  0000  /* Trace s
dcc0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 28  qlite3VdbeAddOp(
dcd0: 29 20 63 61 6c 6c 73 20 2a 2f 0a 23 64 65 66 69  ) calls */.#defi
dce0: 6e 65 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  ne SQLITE_VdbeEQ
dcf0: 50 20 20 20 20 20 20 20 20 30 78 38 30 30 30 30  P        0x80000
dd00: 30 30 30 20 20 2f 2a 20 44 65 62 75 67 20 45 58  000  /* Debug EX
dd10: 50 4c 41 49 4e 20 51 55 45 52 59 20 50 4c 41 4e  PLAIN QUERY PLAN
dd20: 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a   */.#endif.../*.
dd30: 2a 2a 20 42 69 74 73 20 6f 66 20 74 68 65 20 73  ** Bits of the s
dd40: 71 6c 69 74 65 33 2e 64 62 4f 70 74 46 6c 61 67  qlite3.dbOptFlag
dd50: 73 20 66 69 65 6c 64 20 74 68 61 74 20 61 72 65  s field that are
dd60: 20 75 73 65 64 20 62 79 20 74 68 65 0a 2a 2a 20   used by the.** 
dd70: 73 71 6c 69 74 65 33 5f 74 65 73 74 5f 63 6f 6e  sqlite3_test_con
dd80: 74 72 6f 6c 28 53 51 4c 49 54 45 5f 54 45 53 54  trol(SQLITE_TEST
dd90: 43 54 52 4c 5f 4f 50 54 49 4d 49 5a 41 54 49 4f  CTRL_OPTIMIZATIO
dda0: 4e 53 2c 2e 2e 2e 29 20 69 6e 74 65 72 66 61 63  NS,...) interfac
ddb0: 65 20 74 6f 0a 2a 2a 20 73 65 6c 65 63 74 69 76  e to.** selectiv
ddc0: 65 6c 79 20 64 69 73 61 62 6c 65 20 76 61 72 69  ely disable vari
ddd0: 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e  ous optimization
dde0: 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  s..*/.#define SQ
ddf0: 4c 49 54 45 5f 51 75 65 72 79 46 6c 61 74 74 65  LITE_QueryFlatte
de00: 6e 65 72 20 30 78 30 30 30 31 20 20 20 2f 2a 20  ner 0x0001   /* 
de10: 51 75 65 72 79 20 66 6c 61 74 74 65 6e 69 6e 67  Query flattening
de20: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
de30: 54 45 5f 43 6f 6c 75 6d 6e 43 61 63 68 65 20 20  TE_ColumnCache  
de40: 20 20 30 78 30 30 30 32 20 20 20 2f 2a 20 43 6f    0x0002   /* Co
de50: 6c 75 6d 6e 20 63 61 63 68 65 20 2a 2f 0a 23 64  lumn cache */.#d
de60: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 47 72 6f  efine SQLITE_Gro
de70: 75 70 42 79 4f 72 64 65 72 20 20 20 30 78 30 30  upByOrder   0x00
de80: 30 34 20 20 20 2f 2a 20 47 52 4f 55 50 42 59 20  04   /* GROUPBY 
de90: 63 6f 76 65 72 20 6f 66 20 4f 52 44 45 52 42 59  cover of ORDERBY
dea0: 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49   */.#define SQLI
deb0: 54 45 5f 46 61 63 74 6f 72 4f 75 74 43 6f 6e 73  TE_FactorOutCons
dec0: 74 20 30 78 30 30 30 38 20 20 20 2f 2a 20 43 6f  t 0x0008   /* Co
ded0: 6e 73 74 61 6e 74 20 66 61 63 74 6f 72 69 6e 67  nstant factoring
dee0: 20 2a 2f 0a 2f 2a 20 20 20 20 20 20 20 20 20 20   */./*          
def0: 20 20 20 20 20 20 6e 6f 74 20 75 73 65 64 20 20        not used  
df00: 20 20 30 78 30 30 31 30 20 20 20 2f 2f 20 57 61    0x0010   // Wa
df10: 73 3a 20 53 51 4c 49 54 45 5f 49 64 78 52 65 61  s: SQLITE_IdxRea
df20: 6c 41 73 49 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  lAsInt */.#defin
df30: 65 20 53 51 4c 49 54 45 5f 44 69 73 74 69 6e 63  e SQLITE_Distinc
df40: 74 4f 70 74 20 20 20 20 30 78 30 30 32 30 20 20  tOpt    0x0020  
df50: 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 75 73 69   /* DISTINCT usi
df60: 6e 67 20 69 6e 64 65 78 65 73 20 2a 2f 0a 23 64  ng indexes */.#d
df70: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 6f 76  efine SQLITE_Cov
df80: 65 72 49 64 78 53 63 61 6e 20 20 20 30 78 30 30  erIdxScan   0x00
df90: 34 30 20 20 20 2f 2a 20 43 6f 76 65 72 69 6e 67  40   /* Covering
dfa0: 20 69 6e 64 65 78 20 73 63 61 6e 73 20 2a 2f 0a   index scans */.
dfb0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4f  #define SQLITE_O
dfc0: 72 64 65 72 42 79 49 64 78 4a 6f 69 6e 20 30 78  rderByIdxJoin 0x
dfd0: 30 30 38 30 20 20 20 2f 2a 20 4f 52 44 45 52 20  0080   /* ORDER 
dfe0: 42 59 20 6f 66 20 6a 6f 69 6e 73 20 76 69 61 20  BY of joins via 
dff0: 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
e000: 20 53 51 4c 49 54 45 5f 53 75 62 71 43 6f 72 6f   SQLITE_SubqCoro
e010: 75 74 69 6e 65 20 20 30 78 30 31 30 30 20 20 20  utine  0x0100   
e020: 2f 2a 20 45 76 61 6c 75 61 74 65 20 73 75 62 71  /* Evaluate subq
e030: 75 65 72 69 65 73 20 61 73 20 63 6f 72 6f 75 74  ueries as corout
e040: 69 6e 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ines */.#define 
e050: 53 51 4c 49 54 45 5f 54 72 61 6e 73 69 74 69 76  SQLITE_Transitiv
e060: 65 20 20 20 20 20 30 78 30 32 30 30 20 20 20 2f  e     0x0200   /
e070: 2a 20 54 72 61 6e 73 69 74 69 76 65 20 63 6f 6e  * Transitive con
e080: 73 74 72 61 69 6e 74 73 20 2a 2f 0a 23 64 65 66  straints */.#def
e090: 69 6e 65 20 53 51 4c 49 54 45 5f 4f 6d 69 74 4e  ine SQLITE_OmitN
e0a0: 6f 6f 70 4a 6f 69 6e 20 20 20 30 78 30 34 30 30  oopJoin   0x0400
e0b0: 20 20 20 2f 2a 20 4f 6d 69 74 20 75 6e 75 73 65     /* Omit unuse
e0c0: 64 20 74 61 62 6c 65 73 20 69 6e 20 6a 6f 69 6e  d tables in join
e0d0: 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  s */.#define SQL
e0e0: 49 54 45 5f 53 74 61 74 33 34 20 20 20 20 20 20  ITE_Stat34      
e0f0: 20 20 20 30 78 30 38 30 30 20 20 20 2f 2a 20 55     0x0800   /* U
e100: 73 65 20 53 54 41 54 33 20 6f 72 20 53 54 41 54  se STAT3 or STAT
e110: 34 20 64 61 74 61 20 2a 2f 0a 23 64 65 66 69 6e  4 data */.#defin
e120: 65 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 4f 66  e SQLITE_CountOf
e130: 56 69 65 77 20 20 20 20 30 78 31 30 30 30 20 20  View    0x1000  
e140: 20 2f 2a 20 54 68 65 20 63 6f 75 6e 74 2d 6f 66   /* The count-of
e150: 2d 76 69 65 77 20 6f 70 74 69 6d 69 7a 61 74 69  -view optimizati
e160: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
e170: 4c 49 54 45 5f 43 75 72 73 6f 72 48 69 6e 74 73  LITE_CursorHints
e180: 20 20 20 20 30 78 32 30 30 30 20 20 20 2f 2a 20      0x2000   /* 
e190: 41 64 64 20 4f 50 5f 43 75 72 73 6f 72 48 69 6e  Add OP_CursorHin
e1a0: 74 20 6f 70 63 6f 64 65 73 20 2a 2f 0a 23 64 65  t opcodes */.#de
e1b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 6c 6c 4f  fine SQLITE_AllO
e1c0: 70 74 73 20 20 20 20 20 20 20 20 30 78 66 66 66  pts        0xfff
e1d0: 66 20 20 20 2f 2a 20 41 6c 6c 20 6f 70 74 69 6d  f   /* All optim
e1e0: 69 7a 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a  izations */../*.
e1f0: 2a 2a 20 4d 61 63 72 6f 73 20 66 6f 72 20 74 65  ** Macros for te
e200: 73 74 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72  sting whether or
e210: 20 6e 6f 74 20 6f 70 74 69 6d 69 7a 61 74 69 6f   not optimizatio
e220: 6e 73 20 61 72 65 20 65 6e 61 62 6c 65 64 20 6f  ns are enabled o
e230: 72 20 64 69 73 61 62 6c 65 64 2e 0a 2a 2f 0a 23  r disabled..*/.#
e240: 64 65 66 69 6e 65 20 4f 70 74 69 6d 69 7a 61 74  define Optimizat
e250: 69 6f 6e 44 69 73 61 62 6c 65 64 28 64 62 2c 20  ionDisabled(db, 
e260: 6d 61 73 6b 29 20 20 28 28 28 64 62 29 2d 3e 64  mask)  (((db)->d
e270: 62 4f 70 74 46 6c 61 67 73 26 28 6d 61 73 6b 29  bOptFlags&(mask)
e280: 29 21 3d 30 29 0a 23 64 65 66 69 6e 65 20 4f 70  )!=0).#define Op
e290: 74 69 6d 69 7a 61 74 69 6f 6e 45 6e 61 62 6c 65  timizationEnable
e2a0: 64 28 64 62 2c 20 6d 61 73 6b 29 20 20 20 28 28  d(db, mask)   ((
e2b0: 28 64 62 29 2d 3e 64 62 4f 70 74 46 6c 61 67 73  (db)->dbOptFlags
e2c0: 26 28 6d 61 73 6b 29 29 3d 3d 30 29 0a 0a 2f 2a  &(mask))==0)../*
e2d0: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 72 75 65 20  .** Return true 
e2e0: 69 66 20 69 74 20 4f 4b 20 74 6f 20 66 61 63 74  if it OK to fact
e2f0: 6f 72 20 63 6f 6e 73 74 61 6e 74 20 65 78 70 72  or constant expr
e300: 65 73 73 69 6f 6e 73 20 69 6e 74 6f 20 74 68 65  essions into the
e310: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 0a   initialization.
e320: 2a 2a 20 63 6f 64 65 2e 20 54 68 65 20 61 72 67  ** code. The arg
e330: 75 6d 65 6e 74 20 69 73 20 61 20 50 61 72 73 65  ument is a Parse
e340: 20 6f 62 6a 65 63 74 20 66 6f 72 20 74 68 65 20   object for the 
e350: 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 2e 0a  code generator..
e360: 2a 2f 0a 23 64 65 66 69 6e 65 20 43 6f 6e 73 74  */.#define Const
e370: 46 61 63 74 6f 72 4f 6b 28 50 29 20 28 28 50 29  FactorOk(P) ((P)
e380: 2d 3e 6f 6b 43 6f 6e 73 74 46 61 63 74 6f 72 29  ->okConstFactor)
e390: 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69 62 6c 65  ../*.** Possible
e3a0: 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20   values for the 
e3b0: 73 71 6c 69 74 65 2e 6d 61 67 69 63 20 66 69 65  sqlite.magic fie
e3c0: 6c 64 2e 0a 2a 2a 20 54 68 65 20 6e 75 6d 62 65  ld..** The numbe
e3d0: 72 73 20 61 72 65 20 6f 62 74 61 69 6e 65 64 20  rs are obtained 
e3e0: 61 74 20 72 61 6e 64 6f 6d 20 61 6e 64 20 68 61  at random and ha
e3f0: 76 65 20 6e 6f 20 73 70 65 63 69 61 6c 20 6d 65  ve no special me
e400: 61 6e 69 6e 67 2c 20 6f 74 68 65 72 0a 2a 2a 20  aning, other.** 
e410: 74 68 61 6e 20 62 65 69 6e 67 20 64 69 73 74 69  than being disti
e420: 6e 63 74 20 66 72 6f 6d 20 6f 6e 65 20 61 6e 6f  nct from one ano
e430: 74 68 65 72 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  ther..*/.#define
e440: 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 4f 50   SQLITE_MAGIC_OP
e450: 45 4e 20 20 20 20 20 30 78 61 30 32 39 61 36 39  EN     0xa029a69
e460: 37 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69  7  /* Database i
e470: 73 20 6f 70 65 6e 20 2a 2f 0a 23 64 65 66 69 6e  s open */.#defin
e480: 65 20 53 51 4c 49 54 45 5f 4d 41 47 49 43 5f 43  e SQLITE_MAGIC_C
e490: 4c 4f 53 45 44 20 20 20 30 78 39 66 33 63 32 64  LOSED   0x9f3c2d
e4a0: 33 33 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20  33  /* Database 
e4b0: 69 73 20 63 6c 6f 73 65 64 20 2a 2f 0a 23 64 65  is closed */.#de
e4c0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d 41 47 49  fine SQLITE_MAGI
e4d0: 43 5f 53 49 43 4b 20 20 20 20 20 30 78 34 62 37  C_SICK     0x4b7
e4e0: 37 31 32 39 30 20 20 2f 2a 20 45 72 72 6f 72 20  71290  /* Error 
e4f0: 61 6e 64 20 61 77 61 69 74 69 6e 67 20 63 6c 6f  and awaiting clo
e500: 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  se */.#define SQ
e510: 4c 49 54 45 5f 4d 41 47 49 43 5f 42 55 53 59 20  LITE_MAGIC_BUSY 
e520: 20 20 20 20 30 78 66 30 33 62 37 39 30 36 20 20      0xf03b7906  
e530: 2f 2a 20 44 61 74 61 62 61 73 65 20 63 75 72 72  /* Database curr
e540: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 2a 2f 0a  ently in use */.
e550: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
e560: 41 47 49 43 5f 45 52 52 4f 52 20 20 20 20 30 78  AGIC_ERROR    0x
e570: 62 35 33 35 37 39 33 30 20 20 2f 2a 20 41 6e 20  b5357930  /* An 
e580: 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20 65 72  SQLITE_MISUSE er
e590: 72 6f 72 20 6f 63 63 75 72 72 65 64 20 2a 2f 0a  ror occurred */.
e5a0: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4d  #define SQLITE_M
e5b0: 41 47 49 43 5f 5a 4f 4d 42 49 45 20 20 20 30 78  AGIC_ZOMBIE   0x
e5c0: 36 34 63 66 66 63 37 66 20 20 2f 2a 20 43 6c 6f  64cffc7f  /* Clo
e5d0: 73 65 20 77 69 74 68 20 6c 61 73 74 20 73 74 61  se with last sta
e5e0: 74 65 6d 65 6e 74 20 63 6c 6f 73 65 20 2a 2f 0a  tement close */.
e5f0: 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
e600: 66 75 6e 63 74 69 6f 6e 20 69 73 20 64 65 66 69  function is defi
e610: 6e 65 64 20 62 79 20 61 6e 20 69 6e 73 74 61 6e  ned by an instan
e620: 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
e630: 69 6e 67 0a 2a 2a 20 73 74 72 75 63 74 75 72 65  ing.** structure
e640: 2e 20 20 46 6f 72 20 67 6c 6f 62 61 6c 20 62 75  .  For global bu
e650: 69 6c 74 2d 69 6e 20 66 75 6e 63 74 69 6f 6e 73  ilt-in functions
e660: 20 28 65 78 3a 20 73 75 62 73 74 72 28 29 2c 20   (ex: substr(), 
e670: 6d 61 78 28 29 2c 20 63 6f 75 6e 74 28 29 29 0a  max(), count()).
e680: 2a 2a 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  ** a pointer to 
e690: 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69  this structure i
e6a0: 73 20 68 65 6c 64 20 69 6e 20 74 68 65 20 73 71  s held in the sq
e6b0: 6c 69 74 65 33 42 75 69 6c 74 69 6e 46 75 6e 63  lite3BuiltinFunc
e6c0: 74 69 6f 6e 73 20 6f 62 6a 65 63 74 2e 0a 2a 2a  tions object..**
e6d0: 20 46 6f 72 20 70 65 72 2d 63 6f 6e 6e 65 63 74   For per-connect
e6e0: 69 6f 6e 20 61 70 70 6c 69 63 61 74 69 6f 6e 2d  ion application-
e6f0: 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e  defined function
e700: 73 2c 20 61 20 70 6f 69 6e 74 65 72 20 74 6f 20  s, a pointer to 
e710: 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
e720: 65 20 69 73 20 68 65 6c 64 20 69 6e 20 74 68 65  e is held in the
e730: 20 64 62 2d 3e 61 48 61 73 68 20 68 61 73 68 20   db->aHash hash 
e740: 74 61 62 6c 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  table..**.** The
e750: 20 75 2e 70 48 61 73 68 20 66 69 65 6c 64 20 69   u.pHash field i
e760: 73 20 75 73 65 64 20 62 79 20 74 68 65 20 67 6c  s used by the gl
e770: 6f 62 61 6c 20 62 75 69 6c 74 2d 69 6e 73 2e 20  obal built-ins. 
e780: 20 54 68 65 20 75 2e 70 44 65 73 74 72 75 63 74   The u.pDestruct
e790: 6f 72 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 75  or.** field is u
e7a0: 73 65 64 20 62 79 20 70 65 72 2d 63 6f 6e 6e 65  sed by per-conne
e7b0: 63 74 69 6f 6e 20 61 70 70 2d 64 65 66 20 66 75  ction app-def fu
e7c0: 6e 63 74 69 6f 6e 73 2e 0a 2a 2f 0a 73 74 72 75  nctions..*/.stru
e7d0: 63 74 20 46 75 6e 63 44 65 66 20 7b 0a 20 20 69  ct FuncDef {.  i
e7e0: 38 20 6e 41 72 67 3b 20 20 20 20 20 20 20 20 20  8 nArg;         
e7f0: 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
e800: 20 61 72 67 75 6d 65 6e 74 73 2e 20 20 2d 31 20   arguments.  -1 
e810: 6d 65 61 6e 73 20 75 6e 6c 69 6d 69 74 65 64 20  means unlimited 
e820: 2a 2f 0a 20 20 75 31 36 20 66 75 6e 63 46 6c 61  */.  u16 funcFla
e830: 67 73 3b 20 20 20 20 20 20 20 2f 2a 20 53 6f 6d  gs;       /* Som
e840: 65 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66  e combination of
e850: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 2a 20 2a   SQLITE_FUNC_* *
e860: 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73 65 72 44  /.  void *pUserD
e870: 61 74 61 3b 20 20 20 20 20 2f 2a 20 55 73 65 72  ata;     /* User
e880: 20 64 61 74 61 20 70 61 72 61 6d 65 74 65 72 20   data parameter 
e890: 2a 2f 0a 20 20 46 75 6e 63 44 65 66 20 2a 70 4e  */.  FuncDef *pN
e8a0: 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
e8b0: 74 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  t function with 
e8c0: 73 61 6d 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 76  same name */.  v
e8d0: 6f 69 64 20 28 2a 78 53 46 75 6e 63 29 28 73 71  oid (*xSFunc)(sq
e8e0: 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 2c 69  lite3_context*,i
e8f0: 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  nt,sqlite3_value
e900: 2a 2a 29 3b 20 2f 2a 20 66 75 6e 63 20 6f 72 20  **); /* func or 
e910: 61 67 67 2d 73 74 65 70 20 2a 2f 0a 20 20 76 6f  agg-step */.  vo
e920: 69 64 20 28 2a 78 46 69 6e 61 6c 69 7a 65 29 28  id (*xFinalize)(
e930: 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a  sqlite3_context*
e940: 29 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  );              
e950: 20 20 20 20 2f 2a 20 41 67 67 20 66 69 6e 61 6c      /* Agg final
e960: 69 7a 65 72 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  izer */.  const 
e970: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 2f  char *zName;   /
e980: 2a 20 53 51 4c 20 6e 61 6d 65 20 6f 66 20 74 68  * SQL name of th
e990: 65 20 66 75 6e 63 74 69 6f 6e 2e 20 2a 2f 0a 20  e function. */. 
e9a0: 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 46 75 6e   union {.    Fun
e9b0: 63 44 65 66 20 2a 70 48 61 73 68 3b 20 20 20 20  cDef *pHash;    
e9c0: 20 20 2f 2a 20 4e 65 78 74 20 77 69 74 68 20 61    /* Next with a
e9d0: 20 64 69 66 66 65 72 65 6e 74 20 6e 61 6d 65 20   different name 
e9e0: 62 75 74 20 74 68 65 20 73 61 6d 65 20 68 61 73  but the same has
e9f0: 68 20 2a 2f 0a 20 20 20 20 46 75 6e 63 44 65 73  h */.    FuncDes
ea00: 74 72 75 63 74 6f 72 20 2a 70 44 65 73 74 72 75  tructor *pDestru
ea10: 63 74 6f 72 3b 20 20 20 2f 2a 20 52 65 66 65 72  ctor;   /* Refer
ea20: 65 6e 63 65 20 63 6f 75 6e 74 65 64 20 64 65 73  ence counted des
ea30: 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
ea40: 20 2a 2f 0a 20 20 7d 20 75 3b 0a 7d 3b 0a 0a 2f   */.  } u;.};../
ea50: 2a 0a 2a 2a 20 54 68 69 73 20 73 74 72 75 63 74  *.** This struct
ea60: 75 72 65 20 65 6e 63 61 70 73 75 6c 61 74 65 73  ure encapsulates
ea70: 20 61 20 75 73 65 72 2d 66 75 6e 63 74 69 6f 6e   a user-function
ea80: 20 64 65 73 74 72 75 63 74 6f 72 20 63 61 6c 6c   destructor call
ea90: 62 61 63 6b 20 28 61 73 0a 2a 2a 20 63 6f 6e 66  back (as.** conf
eaa0: 69 67 75 72 65 64 20 75 73 69 6e 67 20 63 72 65  igured using cre
eab0: 61 74 65 5f 66 75 6e 63 74 69 6f 6e 5f 76 32 28  ate_function_v2(
eac0: 29 29 20 61 6e 64 20 61 20 72 65 66 65 72 65 6e  )) and a referen
ead0: 63 65 20 63 6f 75 6e 74 65 72 2e 20 57 68 65 6e  ce counter. When
eae0: 0a 2a 2a 20 63 72 65 61 74 65 5f 66 75 6e 63 74  .** create_funct
eaf0: 69 6f 6e 5f 76 32 28 29 20 69 73 20 63 61 6c 6c  ion_v2() is call
eb00: 65 64 20 74 6f 20 63 72 65 61 74 65 20 61 20 66  ed to create a f
eb10: 75 6e 63 74 69 6f 6e 20 77 69 74 68 20 61 20 64  unction with a d
eb20: 65 73 74 72 75 63 74 6f 72 2c 0a 2a 2a 20 61 20  estructor,.** a 
eb30: 73 69 6e 67 6c 65 20 6f 62 6a 65 63 74 20 6f 66  single object of
eb40: 20 74 68 69 73 20 74 79 70 65 20 69 73 20 61 6c   this type is al
eb50: 6c 6f 63 61 74 65 64 2e 20 46 75 6e 63 44 65 73  located. FuncDes
eb60: 74 72 75 63 74 6f 72 2e 6e 52 65 66 20 69 73 20  tructor.nRef is 
eb70: 73 65 74 20 74 6f 0a 2a 2a 20 74 68 65 20 6e 75  set to.** the nu
eb80: 6d 62 65 72 20 6f 66 20 46 75 6e 63 44 65 66 20  mber of FuncDef 
eb90: 6f 62 6a 65 63 74 73 20 63 72 65 61 74 65 64 20  objects created 
eba0: 28 65 69 74 68 65 72 20 31 20 6f 72 20 33 2c 20  (either 1 or 3, 
ebb0: 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 77 68 65  depending on whe
ebc0: 74 68 65 72 0a 2a 2a 20 6f 72 20 6e 6f 74 20 74  ther.** or not t
ebd0: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 6e 63  he specified enc
ebe0: 6f 64 69 6e 67 20 69 73 20 53 51 4c 49 54 45 5f  oding is SQLITE_
ebf0: 41 4e 59 29 2e 20 54 68 65 20 46 75 6e 63 44 65  ANY). The FuncDe
ec00: 66 2e 70 44 65 73 74 72 75 63 74 6f 72 0a 2a 2a  f.pDestructor.**
ec10: 20 6d 65 6d 62 65 72 20 6f 66 20 65 61 63 68 20   member of each 
ec20: 6f 66 20 74 68 65 20 6e 65 77 20 46 75 6e 63 44  of the new FuncD
ec30: 65 66 20 6f 62 6a 65 63 74 73 20 69 73 20 73 65  ef objects is se
ec40: 74 20 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68  t to point to th
ec50: 65 20 61 6c 6c 6f 63 61 74 65 64 0a 2a 2a 20 46  e allocated.** F
ec60: 75 6e 63 44 65 73 74 72 75 63 74 6f 72 2e 0a 2a  uncDestructor..*
ec70: 2a 0a 2a 2a 20 54 68 65 72 65 61 66 74 65 72 2c  *.** Thereafter,
ec80: 20 77 68 65 6e 20 6f 6e 65 20 6f 66 20 74 68 65   when one of the
ec90: 20 46 75 6e 63 44 65 66 20 6f 62 6a 65 63 74 73   FuncDef objects
eca0: 20 69 73 20 64 65 6c 65 74 65 64 2c 20 74 68 65   is deleted, the
ecb0: 20 72 65 66 65 72 65 6e 63 65 0a 2a 2a 20 63 6f   reference.** co
ecc0: 75 6e 74 20 6f 6e 20 74 68 69 73 20 6f 62 6a 65  unt on this obje
ecd0: 63 74 20 69 73 20 64 65 63 72 65 6d 65 6e 74 65  ct is decremente
ece0: 64 2e 20 57 68 65 6e 20 69 74 20 72 65 61 63 68  d. When it reach
ecf0: 65 73 20 30 2c 20 74 68 65 20 64 65 73 74 72 75  es 0, the destru
ed00: 63 74 6f 72 0a 2a 2a 20 69 73 20 69 6e 76 6f 6b  ctor.** is invok
ed10: 65 64 20 61 6e 64 20 74 68 65 20 46 75 6e 63 44  ed and the FuncD
ed20: 65 73 74 72 75 63 74 6f 72 20 73 74 72 75 63 74  estructor struct
ed30: 75 72 65 20 66 72 65 65 64 2e 0a 2a 2f 0a 73 74  ure freed..*/.st
ed40: 72 75 63 74 20 46 75 6e 63 44 65 73 74 72 75 63  ruct FuncDestruc
ed50: 74 6f 72 20 7b 0a 20 20 69 6e 74 20 6e 52 65 66  tor {.  int nRef
ed60: 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44 65 73 74  ;.  void (*xDest
ed70: 72 6f 79 29 28 76 6f 69 64 20 2a 29 3b 0a 20 20  roy)(void *);.  
ed80: 76 6f 69 64 20 2a 70 55 73 65 72 44 61 74 61 3b  void *pUserData;
ed90: 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 50 6f 73 73 69  .};../*.** Possi
eda0: 62 6c 65 20 76 61 6c 75 65 73 20 66 6f 72 20 46  ble values for F
edb0: 75 6e 63 44 65 66 2e 66 6c 61 67 73 2e 20 20 4e  uncDef.flags.  N
edc0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 5f 4c 45  ote that the _LE
edd0: 4e 47 54 48 20 61 6e 64 20 5f 54 59 50 45 4f 46  NGTH and _TYPEOF
ede0: 0a 2a 2a 20 76 61 6c 75 65 73 20 6d 75 73 74 20  .** values must 
edf0: 63 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 4f 50  correspond to OP
ee00: 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 61  FLAG_LENGTHARG a
ee10: 6e 64 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  nd OPFLAG_TYPEOF
ee20: 41 52 47 2e 20 20 41 6e 64 0a 2a 2a 20 53 51 4c  ARG.  And.** SQL
ee30: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
ee40: 54 20 6d 75 73 74 20 62 65 20 74 68 65 20 73 61  T must be the sa
ee50: 6d 65 20 61 73 20 53 51 4c 49 54 45 5f 44 45 54  me as SQLITE_DET
ee60: 45 52 4d 49 4e 49 53 54 49 43 2e 20 20 54 68 65  ERMINISTIC.  The
ee70: 72 65 0a 2a 2a 20 61 72 65 20 61 73 73 65 72 74  re.** are assert
ee80: 28 29 20 73 74 61 74 65 6d 65 6e 74 73 20 69 6e  () statements in
ee90: 20 74 68 65 20 63 6f 64 65 20 74 6f 20 76 65 72   the code to ver
eea0: 69 66 79 20 74 68 69 73 2e 0a 2a 2a 0a 2a 2a 20  ify this..**.** 
eeb0: 56 61 6c 75 65 20 63 6f 6e 73 74 72 61 69 6e 74  Value constraint
eec0: 73 20 28 65 6e 66 6f 72 63 65 64 20 76 69 61 20  s (enforced via 
eed0: 61 73 73 65 72 74 28 29 29 3a 0a 2a 2a 20 20 20  assert()):.**   
eee0: 20 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49    SQLITE_FUNC_MI
eef0: 4e 4d 41 58 20 20 20 20 3d 3d 20 20 4e 43 5f 4d  NMAX    ==  NC_M
ef00: 69 6e 4d 61 78 41 67 67 20 20 20 20 20 20 3d 3d  inMaxAgg      ==
ef10: 20 53 46 5f 4d 69 6e 4d 61 78 41 67 67 0a 2a 2a   SF_MinMaxAgg.**
ef20: 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55 4e 43       SQLITE_FUNC
ef30: 5f 4c 45 4e 47 54 48 20 20 20 20 3d 3d 20 20 4f  _LENGTH    ==  O
ef40: 50 46 4c 41 47 5f 4c 45 4e 47 54 48 41 52 47 0a  PFLAG_LENGTHARG.
ef50: 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f 46 55  **     SQLITE_FU
ef60: 4e 43 5f 54 59 50 45 4f 46 20 20 20 20 3d 3d 20  NC_TYPEOF    == 
ef70: 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46 41 52   OPFLAG_TYPEOFAR
ef80: 47 0a 2a 2a 20 20 20 20 20 53 51 4c 49 54 45 5f  G.**     SQLITE_
ef90: 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 20 3d  FUNC_CONSTANT  =
efa0: 3d 20 20 53 51 4c 49 54 45 5f 44 45 54 45 52 4d  =  SQLITE_DETERM
efb0: 49 4e 49 53 54 49 43 20 66 72 6f 6d 20 74 68 65  INISTIC from the
efc0: 20 41 50 49 0a 2a 2a 20 20 20 20 20 53 51 4c 49   API.**     SQLI
efd0: 54 45 5f 46 55 4e 43 5f 45 4e 43 4d 41 53 4b 20  TE_FUNC_ENCMASK 
efe0: 20 20 64 65 70 65 6e 64 73 20 6f 6e 20 53 51 4c    depends on SQL
eff0: 49 54 45 5f 55 54 46 2a 20 6d 61 63 72 6f 73 20  ITE_UTF* macros 
f000: 69 6e 20 74 68 65 20 41 50 49 0a 2a 2f 0a 23 64  in the API.*/.#d
f010: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e  efine SQLITE_FUN
f020: 43 5f 45 4e 43 4d 41 53 4b 20 20 30 78 30 30 30  C_ENCMASK  0x000
f030: 33 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 38  3 /* SQLITE_UTF8
f040: 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45  , SQLITE_UTF16BE
f050: 20 6f 72 20 55 54 46 31 36 4c 45 20 2a 2f 0a 23   or UTF16LE */.#
f060: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f070: 4e 43 5f 4c 49 4b 45 20 20 20 20 20 30 78 30 30  NC_LIKE     0x00
f080: 30 34 20 2f 2a 20 43 61 6e 64 69 64 61 74 65 20  04 /* Candidate 
f090: 66 6f 72 20 74 68 65 20 4c 49 4b 45 20 6f 70 74  for the LIKE opt
f0a0: 69 6d 69 7a 61 74 69 6f 6e 20 2a 2f 0a 23 64 65  imization */.#de
f0b0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43  fine SQLITE_FUNC
f0c0: 5f 43 41 53 45 20 20 20 20 20 30 78 30 30 30 38  _CASE     0x0008
f0d0: 20 2f 2a 20 43 61 73 65 2d 73 65 6e 73 69 74 69   /* Case-sensiti
f0e0: 76 65 20 4c 49 4b 45 2d 74 79 70 65 20 66 75 6e  ve LIKE-type fun
f0f0: 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65  ction */.#define
f100: 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 45 50 48   SQLITE_FUNC_EPH
f110: 45 4d 20 20 20 20 30 78 30 30 31 30 20 2f 2a 20  EM    0x0010 /* 
f120: 45 70 68 65 6d 65 72 61 6c 2e 20 20 44 65 6c 65  Ephemeral.  Dele
f130: 74 65 20 77 69 74 68 20 56 44 42 45 20 2a 2f 0a  te with VDBE */.
f140: 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
f150: 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c 20 30 78 30  UNC_NEEDCOLL 0x0
f160: 30 32 30 20 2f 2a 20 73 71 6c 69 74 65 33 47 65  020 /* sqlite3Ge
f170: 74 46 75 6e 63 43 6f 6c 6c 53 65 71 28 29 20 6d  tFuncCollSeq() m
f180: 69 67 68 74 20 62 65 20 63 61 6c 6c 65 64 2a 2f  ight be called*/
f190: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f1a0: 46 55 4e 43 5f 4c 45 4e 47 54 48 20 20 20 30 78  FUNC_LENGTH   0x
f1b0: 30 30 34 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0040 /* Built-in
f1c0: 20 6c 65 6e 67 74 68 28 29 20 66 75 6e 63 74 69   length() functi
f1d0: 6f 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  on */.#define SQ
f1e0: 4c 49 54 45 5f 46 55 4e 43 5f 54 59 50 45 4f 46  LITE_FUNC_TYPEOF
f1f0: 20 20 20 30 78 30 30 38 30 20 2f 2a 20 42 75 69     0x0080 /* Bui
f200: 6c 74 2d 69 6e 20 74 79 70 65 6f 66 28 29 20 66  lt-in typeof() f
f210: 75 6e 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  unction */.#defi
f220: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43  ne SQLITE_FUNC_C
f230: 4f 55 4e 54 20 20 20 20 30 78 30 31 30 30 20 2f  OUNT    0x0100 /
f240: 2a 20 42 75 69 6c 74 2d 69 6e 20 63 6f 75 6e 74  * Built-in count
f250: 28 2a 29 20 61 67 67 72 65 67 61 74 65 20 2a 2f  (*) aggregate */
f260: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f270: 46 55 4e 43 5f 43 4f 41 4c 45 53 43 45 20 30 78  FUNC_COALESCE 0x
f280: 30 32 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e  0200 /* Built-in
f290: 20 63 6f 61 6c 65 73 63 65 28 29 20 6f 72 20 69   coalesce() or i
f2a0: 66 6e 75 6c 6c 28 29 20 2a 2f 0a 23 64 65 66 69  fnull() */.#defi
f2b0: 6e 65 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 55  ne SQLITE_FUNC_U
f2c0: 4e 4c 49 4b 45 4c 59 20 30 78 30 34 30 30 20 2f  NLIKELY 0x0400 /
f2d0: 2a 20 42 75 69 6c 74 2d 69 6e 20 75 6e 6c 69 6b  * Built-in unlik
f2e0: 65 6c 79 28 29 20 66 75 6e 63 74 69 6f 6e 20 2a  ely() function *
f2f0: 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
f300: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20 30  _FUNC_CONSTANT 0
f310: 78 30 38 30 30 20 2f 2a 20 43 6f 6e 73 74 61 6e  x0800 /* Constan
f320: 74 20 69 6e 70 75 74 73 20 67 69 76 65 20 61 20  t inputs give a 
f330: 63 6f 6e 73 74 61 6e 74 20 6f 75 74 70 75 74 20  constant output 
f340: 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54  */.#define SQLIT
f350: 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 20 20 20  E_FUNC_MINMAX   
f360: 30 78 31 30 30 30 20 2f 2a 20 54 72 75 65 20 66  0x1000 /* True f
f370: 6f 72 20 6d 69 6e 28 29 20 61 6e 64 20 6d 61 78  or min() and max
f380: 28 29 20 61 67 67 72 65 67 61 74 65 73 20 2a 2f  () aggregates */
f390: 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  .#define SQLITE_
f3a0: 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 20 20 30 78  FUNC_SLOCHNG  0x
f3b0: 32 30 30 30 20 2f 2a 20 22 53 6c 6f 77 20 43 68  2000 /* "Slow Ch
f3c0: 61 6e 67 65 22 2e 20 56 61 6c 75 65 20 63 6f 6e  ange". Value con
f3d0: 73 74 61 6e 74 20 64 75 72 69 6e 67 20 61 0a 20  stant during a. 
f3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f3f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f400: 20 20 20 2a 2a 20 73 69 6e 67 6c 65 20 71 75 65     ** single que
f410: 72 79 20 2d 20 6d 69 67 68 74 20 63 68 61 6e 67  ry - might chang
f420: 65 20 6f 76 65 72 20 74 69 6d 65 20 2a 2f 0a 23  e over time */.#
f430: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46 55  define SQLITE_FU
f440: 4e 43 5f 41 46 46 49 4e 49 54 59 20 30 78 34 30  NC_AFFINITY 0x40
f450: 30 30 20 2f 2a 20 42 75 69 6c 74 2d 69 6e 20 61  00 /* Built-in a
f460: 66 66 69 6e 69 74 79 28 29 20 66 75 6e 63 74 69  ffinity() functi
f470: 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  on */../*.** The
f480: 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 68 72 65 65   following three
f490: 20 6d 61 63 72 6f 73 2c 20 46 55 4e 43 54 49 4f   macros, FUNCTIO
f4a0: 4e 28 29 2c 20 4c 49 4b 45 46 55 4e 43 28 29 20  N(), LIKEFUNC() 
f4b0: 61 6e 64 20 41 47 47 52 45 47 41 54 45 28 29 20  and AGGREGATE() 
f4c0: 61 72 65 0a 2a 2a 20 75 73 65 64 20 74 6f 20 63  are.** used to c
f4d0: 72 65 61 74 65 20 74 68 65 20 69 6e 69 74 69 61  reate the initia
f4e0: 6c 69 7a 65 72 73 20 66 6f 72 20 74 68 65 20 46  lizers for the F
f4f0: 75 6e 63 44 65 66 20 73 74 72 75 63 74 75 72 65  uncDef structure
f500: 73 2e 0a 2a 2a 0a 2a 2a 20 20 20 46 55 4e 43 54  s..**.**   FUNCT
f510: 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ION(zName, nArg,
f520: 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e   iArg, bNC, xFun
f530: 63 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  c).**     Used t
f540: 6f 20 63 72 65 61 74 65 20 61 20 73 63 61 6c 61  o create a scala
f550: 72 20 66 75 6e 63 74 69 6f 6e 20 64 65 66 69 6e  r function defin
f560: 69 74 69 6f 6e 20 6f 66 20 61 20 66 75 6e 63 74  ition of a funct
f570: 69 6f 6e 20 7a 4e 61 6d 65 0a 2a 2a 20 20 20 20  ion zName.**    
f580: 20 69 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20   implemented by 
f590: 43 20 66 75 6e 63 74 69 6f 6e 20 78 46 75 6e 63  C function xFunc
f5a0: 20 74 68 61 74 20 61 63 63 65 70 74 73 20 6e 41   that accepts nA
f5b0: 72 67 20 61 72 67 75 6d 65 6e 74 73 2e 20 54 68  rg arguments. Th
f5c0: 65 0a 2a 2a 20 20 20 20 20 76 61 6c 75 65 20 70  e.**     value p
f5d0: 61 73 73 65 64 20 61 73 20 69 41 72 67 20 69 73  assed as iArg is
f5e0: 20 63 61 73 74 20 74 6f 20 61 20 28 76 6f 69 64   cast to a (void
f5f0: 2a 29 20 61 6e 64 20 6d 61 64 65 20 61 76 61 69  *) and made avai
f600: 6c 61 62 6c 65 0a 2a 2a 20 20 20 20 20 61 73 20  lable.**     as 
f610: 74 68 65 20 75 73 65 72 2d 64 61 74 61 20 28 73  the user-data (s
f620: 71 6c 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61  qlite3_user_data
f630: 28 29 29 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ()) for the func
f640: 74 69 6f 6e 2e 20 49 66 0a 2a 2a 20 20 20 20 20  tion. If.**     
f650: 61 72 67 75 6d 65 6e 74 20 62 4e 43 20 69 73 20  argument bNC is 
f660: 74 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 53  true, then the S
f670: 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43  QLITE_FUNC_NEEDC
f680: 4f 4c 4c 20 66 6c 61 67 20 69 73 20 73 65 74 2e  OLL flag is set.
f690: 0a 2a 2a 0a 2a 2a 20 20 20 56 46 55 4e 43 54 49  .**.**   VFUNCTI
f6a0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
f6b0: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
f6c0: 29 0a 2a 2a 20 20 20 20 20 4c 69 6b 65 20 46 55  ).**     Like FU
f6d0: 4e 43 54 49 4f 4e 20 65 78 63 65 70 74 20 69 74  NCTION except it
f6e0: 20 6f 6d 69 74 73 20 74 68 65 20 53 51 4c 49 54   omits the SQLIT
f6f0: 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 20  E_FUNC_CONSTANT 
f700: 66 6c 61 67 2e 0a 2a 2a 0a 2a 2a 20 20 20 44 46  flag..**.**   DF
f710: 55 4e 43 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e  UNCTION(zName, n
f720: 41 72 67 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20  Arg, iArg, bNC, 
f730: 78 46 75 6e 63 29 0a 2a 2a 20 20 20 20 20 4c 69  xFunc).**     Li
f740: 6b 65 20 46 55 4e 43 54 49 4f 4e 20 65 78 63 65  ke FUNCTION exce
f750: 70 74 20 69 74 20 6f 6d 69 74 73 20 74 68 65 20  pt it omits the 
f760: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53  SQLITE_FUNC_CONS
f770: 54 41 4e 54 20 66 6c 61 67 20 61 6e 64 0a 2a 2a  TANT flag and.**
f780: 20 20 20 20 20 61 64 64 73 20 74 68 65 20 53 51       adds the SQ
f790: 4c 49 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e  LITE_FUNC_SLOCHN
f7a0: 47 20 66 6c 61 67 2e 20 20 55 73 65 64 20 66 6f  G flag.  Used fo
f7b0: 72 20 64 61 74 65 20 26 20 74 69 6d 65 20 66 75  r date & time fu
f7c0: 6e 63 74 69 6f 6e 73 0a 2a 2a 20 20 20 20 20 61  nctions.**     a
f7d0: 6e 64 20 66 75 6e 63 74 69 6f 6e 73 20 6c 69 6b  nd functions lik
f7e0: 65 20 73 71 6c 69 74 65 5f 76 65 72 73 69 6f 6e  e sqlite_version
f7f0: 28 29 20 74 68 61 74 20 63 61 6e 20 63 68 61 6e  () that can chan
f800: 67 65 2c 20 62 75 74 20 6e 6f 74 20 64 75 72 69  ge, but not duri
f810: 6e 67 0a 2a 2a 20 20 20 20 20 61 20 73 69 6e 67  ng.**     a sing
f820: 6c 65 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20  le query..**.** 
f830: 20 20 41 47 47 52 45 47 41 54 45 28 7a 4e 61 6d    AGGREGATE(zNam
f840: 65 2c 20 6e 41 72 67 2c 20 69 41 72 67 2c 20 62  e, nArg, iArg, b
f850: 4e 43 2c 20 78 53 74 65 70 2c 20 78 46 69 6e 61  NC, xStep, xFina
f860: 6c 29 0a 2a 2a 20 20 20 20 20 55 73 65 64 20 74  l).**     Used t
f870: 6f 20 63 72 65 61 74 65 20 61 6e 20 61 67 67 72  o create an aggr
f880: 65 67 61 74 65 20 66 75 6e 63 74 69 6f 6e 20 64  egate function d
f890: 65 66 69 6e 69 74 69 6f 6e 20 69 6d 70 6c 65 6d  efinition implem
f8a0: 65 6e 74 65 64 20 62 79 0a 2a 2a 20 20 20 20 20  ented by.**     
f8b0: 74 68 65 20 43 20 66 75 6e 63 74 69 6f 6e 73 20  the C functions 
f8c0: 78 53 74 65 70 20 61 6e 64 20 78 46 69 6e 61 6c  xStep and xFinal
f8d0: 2e 20 54 68 65 20 66 69 72 73 74 20 66 6f 75 72  . The first four
f8e0: 20 70 61 72 61 6d 65 74 65 72 73 0a 2a 2a 20 20   parameters.**  
f8f0: 20 20 20 61 72 65 20 69 6e 74 65 72 70 72 65 74     are interpret
f900: 65 64 20 69 6e 20 74 68 65 20 73 61 6d 65 20 77  ed in the same w
f910: 61 79 20 61 73 20 74 68 65 20 66 69 72 73 74 20  ay as the first 
f920: 34 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f 0a  4 parameters to.
f930: 2a 2a 20 20 20 20 20 46 55 4e 43 54 49 4f 4e 28  **     FUNCTION(
f940: 29 2e 0a 2a 2a 0a 2a 2a 20 20 20 4c 49 4b 45 46  )..**.**   LIKEF
f950: 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  UNC(zName, nArg,
f960: 20 70 41 72 67 2c 20 66 6c 61 67 73 29 0a 2a 2a   pArg, flags).**
f970: 20 20 20 20 20 55 73 65 64 20 74 6f 20 63 72 65       Used to cre
f980: 61 74 65 20 61 20 73 63 61 6c 61 72 20 66 75 6e  ate a scalar fun
f990: 63 74 69 6f 6e 20 64 65 66 69 6e 69 74 69 6f 6e  ction definition
f9a0: 20 6f 66 20 61 20 66 75 6e 63 74 69 6f 6e 20 7a   of a function z
f9b0: 4e 61 6d 65 0a 2a 2a 20 20 20 20 20 74 68 61 74  Name.**     that
f9c0: 20 61 63 63 65 70 74 73 20 6e 41 72 67 20 61 72   accepts nArg ar
f9d0: 67 75 6d 65 6e 74 73 20 61 6e 64 20 69 73 20 69  guments and is i
f9e0: 6d 70 6c 65 6d 65 6e 74 65 64 20 62 79 20 61 20  mplemented by a 
f9f0: 63 61 6c 6c 20 74 6f 20 43 0a 2a 2a 20 20 20 20  call to C.**    
fa00: 20 66 75 6e 63 74 69 6f 6e 20 6c 69 6b 65 46 75   function likeFu
fa10: 6e 63 2e 20 41 72 67 75 6d 65 6e 74 20 70 41 72  nc. Argument pAr
fa20: 67 20 69 73 20 63 61 73 74 20 74 6f 20 61 20 28  g is cast to a (
fa30: 76 6f 69 64 20 2a 29 20 61 6e 64 20 6d 61 64 65  void *) and made
fa40: 0a 2a 2a 20 20 20 20 20 61 76 61 69 6c 61 62 6c  .**     availabl
fa50: 65 20 61 73 20 74 68 65 20 66 75 6e 63 74 69 6f  e as the functio
fa60: 6e 20 75 73 65 72 2d 64 61 74 61 20 28 73 71 6c  n user-data (sql
fa70: 69 74 65 33 5f 75 73 65 72 5f 64 61 74 61 28 29  ite3_user_data()
fa80: 29 2e 20 54 68 65 0a 2a 2a 20 20 20 20 20 46 75  ). The.**     Fu
fa90: 6e 63 44 65 66 2e 66 6c 61 67 73 20 76 61 72 69  ncDef.flags vari
faa0: 61 62 6c 65 20 69 73 20 73 65 74 20 74 6f 20 74  able is set to t
fab0: 68 65 20 76 61 6c 75 65 20 70 61 73 73 65 64 20  he value passed 
fac0: 61 73 20 74 68 65 20 66 6c 61 67 73 0a 2a 2a 20  as the flags.** 
fad0: 20 20 20 20 70 61 72 61 6d 65 74 65 72 2e 0a 2a      parameter..*
fae0: 2f 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49  /.#define FUNCTI
faf0: 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  ON(zName, nArg, 
fb00: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
fb10: 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c  ) \.  {nArg, SQL
fb20: 49 54 45 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e  ITE_FUNC_CONSTAN
fb30: 54 7c 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62  T|SQLITE_UTF8|(b
fb40: 4e 43 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e  NC*SQLITE_FUNC_N
fb50: 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53  EEDCOLL), \.   S
fb60: 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52  QLITE_INT_TO_PTR
fb70: 28 69 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63  (iArg), 0, xFunc
fb80: 2c 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d  , 0, #zName, {0}
fb90: 20 7d 0a 23 64 65 66 69 6e 65 20 56 46 55 4e 43   }.#define VFUNC
fba0: 54 49 4f 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67  TION(zName, nArg
fbb0: 2c 20 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75  , iArg, bNC, xFu
fbc0: 6e 63 29 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53  nc) \.  {nArg, S
fbd0: 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a  QLITE_UTF8|(bNC*
fbe0: 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44  SQLITE_FUNC_NEED
fbf0: 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c 49  COLL), \.   SQLI
fc00: 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69 41  TE_INT_TO_PTR(iA
fc10: 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20 30  rg), 0, xFunc, 0
fc20: 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d 0a  , #zName, {0} }.
fc30: 23 64 65 66 69 6e 65 20 44 46 55 4e 43 54 49 4f  #define DFUNCTIO
fc40: 4e 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20 69  N(zName, nArg, i
fc50: 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63 29  Arg, bNC, xFunc)
fc60: 20 5c 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49   \.  {nArg, SQLI
fc70: 54 45 5f 46 55 4e 43 5f 53 4c 4f 43 48 4e 47 7c  TE_FUNC_SLOCHNG|
fc80: 53 51 4c 49 54 45 5f 55 54 46 38 7c 28 62 4e 43  SQLITE_UTF8|(bNC
fc90: 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45  *SQLITE_FUNC_NEE
fca0: 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20 53 51 4c  DCOLL), \.   SQL
fcb0: 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 69  ITE_INT_TO_PTR(i
fcc0: 41 72 67 29 2c 20 30 2c 20 78 46 75 6e 63 2c 20  Arg), 0, xFunc, 
fcd0: 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20 7d  0, #zName, {0} }
fce0: 0a 23 64 65 66 69 6e 65 20 46 55 4e 43 54 49 4f  .#define FUNCTIO
fcf0: 4e 32 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c 20  N2(zName, nArg, 
fd00: 69 41 72 67 2c 20 62 4e 43 2c 20 78 46 75 6e 63  iArg, bNC, xFunc
fd10: 2c 20 65 78 74 72 61 46 6c 61 67 73 29 20 5c 0a  , extraFlags) \.
fd20: 20 20 7b 6e 41 72 67 2c 53 51 4c 49 54 45 5f 46    {nArg,SQLITE_F
fd30: 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53 51 4c  UNC_CONSTANT|SQL
fd40: 49 54 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51  ITE_UTF8|(bNC*SQ
fd50: 4c 49 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f  LITE_FUNC_NEEDCO
fd60: 4c 4c 29 7c 65 78 74 72 61 46 6c 61 67 73 2c 5c  LL)|extraFlags,\
fd70: 0a 20 20 20 53 51 4c 49 54 45 5f 49 4e 54 5f 54  .   SQLITE_INT_T
fd80: 4f 5f 50 54 52 28 69 41 72 67 29 2c 20 30 2c 20  O_PTR(iArg), 0, 
fd90: 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d 65  xFunc, 0, #zName
fda0: 2c 20 7b 30 7d 20 7d 0a 23 64 65 66 69 6e 65 20  , {0} }.#define 
fdb0: 53 54 52 5f 46 55 4e 43 54 49 4f 4e 28 7a 4e 61  STR_FUNCTION(zNa
fdc0: 6d 65 2c 20 6e 41 72 67 2c 20 70 41 72 67 2c 20  me, nArg, pArg, 
fdd0: 62 4e 43 2c 20 78 46 75 6e 63 29 20 5c 0a 20 20  bNC, xFunc) \.  
fde0: 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45 5f 46 55  {nArg, SQLITE_FU
fdf0: 4e 43 5f 53 4c 4f 43 48 4e 47 7c 53 51 4c 49 54  NC_SLOCHNG|SQLIT
fe00: 45 5f 55 54 46 38 7c 28 62 4e 43 2a 53 51 4c 49  E_UTF8|(bNC*SQLI
fe10: 54 45 5f 46 55 4e 43 5f 4e 45 45 44 43 4f 4c 4c  TE_FUNC_NEEDCOLL
fe20: 29 2c 20 5c 0a 20 20 20 70 41 72 67 2c 20 30 2c  ), \.   pArg, 0,
fe30: 20 78 46 75 6e 63 2c 20 30 2c 20 23 7a 4e 61 6d   xFunc, 0, #zNam
fe40: 65 2c 20 7d 0a 23 64 65 66 69 6e 65 20 4c 49 4b  e, }.#define LIK
fe50: 45 46 55 4e 43 28 7a 4e 61 6d 65 2c 20 6e 41 72  EFUNC(zName, nAr
fe60: 67 2c 20 61 72 67 2c 20 66 6c 61 67 73 29 20 5c  g, arg, flags) \
fe70: 0a 20 20 7b 6e 41 72 67 2c 20 53 51 4c 49 54 45  .  {nArg, SQLITE
fe80: 5f 46 55 4e 43 5f 43 4f 4e 53 54 41 4e 54 7c 53  _FUNC_CONSTANT|S
fe90: 51 4c 49 54 45 5f 55 54 46 38 7c 66 6c 61 67 73  QLITE_UTF8|flags
fea0: 2c 20 5c 0a 20 20 20 28 76 6f 69 64 20 2a 29 61  , \.   (void *)a
feb0: 72 67 2c 20 30 2c 20 6c 69 6b 65 46 75 6e 63 2c  rg, 0, likeFunc,
fec0: 20 30 2c 20 23 7a 4e 61 6d 65 2c 20 7b 30 7d 20   0, #zName, {0} 
fed0: 7d 0a 23 64 65 66 69 6e 65 20 41 47 47 52 45 47  }.#define AGGREG
fee0: 41 54 45 28 7a 4e 61 6d 65 2c 20 6e 41 72 67 2c  ATE(zName, nArg,
fef0: 20 61 72 67 2c 20 6e 63 2c 20 78 53 74 65 70 2c   arg, nc, xStep,
ff00: 20 78 46 69 6e 61 6c 29 20 5c 0a 20 20 7b 6e 41   xFinal) \.  {nA
ff10: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
ff20: 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
ff30: 4e 45 45 44 43 4f 4c 4c 29 2c 20 5c 0a 20 20 20  NEEDCOLL), \.   
ff40: 53 51 4c 49 54 45 5f 49 4e 54 5f 54 4f 5f 50 54  SQLITE_INT_TO_PT
ff50: 52 28 61 72 67 29 2c 20 30 2c 20 78 53 74 65 70  R(arg), 0, xStep
ff60: 2c 78 46 69 6e 61 6c 2c 23 7a 4e 61 6d 65 2c 20  ,xFinal,#zName, 
ff70: 7b 30 7d 7d 0a 23 64 65 66 69 6e 65 20 41 47 47  {0}}.#define AGG
ff80: 52 45 47 41 54 45 32 28 7a 4e 61 6d 65 2c 20 6e  REGATE2(zName, n
ff90: 41 72 67 2c 20 61 72 67 2c 20 6e 63 2c 20 78 53  Arg, arg, nc, xS
ffa0: 74 65 70 2c 20 78 46 69 6e 61 6c 2c 20 65 78 74  tep, xFinal, ext
ffb0: 72 61 46 6c 61 67 73 29 20 5c 0a 20 20 7b 6e 41  raFlags) \.  {nA
ffc0: 72 67 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 7c  rg, SQLITE_UTF8|
ffd0: 28 6e 63 2a 53 51 4c 49 54 45 5f 46 55 4e 43 5f  (nc*SQLITE_FUNC_
ffe0: 4e 45 45 44 43 4f 4c 4c 29 7c 65 78 74 72 61 46  NEEDCOLL)|extraF
fff0: 6c 61 67 73 2c 20 5c 0a 20 20 20 53 51 4c 49 54  lags, \.   SQLIT
10000 45 5f 49 4e 54 5f 54 4f 5f 50 54 52 28 61 72 67  E_INT_TO_PTR(arg
10010 29 2c 20 30 2c 20 78 53 74 65 70 2c 78 46 69 6e  ), 0, xStep,xFin
10020 61 6c 2c 23 7a 4e 61 6d 65 2c 20 7b 30 7d 7d 0a  al,#zName, {0}}.
10030 0a 2f 2a 0a 2a 2a 20 41 6c 6c 20 63 75 72 72 65  ./*.** All curre
10040 6e 74 20 73 61 76 65 70 6f 69 6e 74 73 20 61 72  nt savepoints ar
10050 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20 6c 69  e stored in a li
10060 6e 6b 65 64 20 6c 69 73 74 20 73 74 61 72 74 69  nked list starti
10070 6e 67 20 61 74 0a 2a 2a 20 73 71 6c 69 74 65 33  ng at.** sqlite3
10080 2e 70 53 61 76 65 70 6f 69 6e 74 2e 20 54 68 65  .pSavepoint. The
10090 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 69   first element i
100a0 6e 20 74 68 65 20 6c 69 73 74 20 69 73 20 74 68  n the list is th
100b0 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 6c 79 0a  e most recently.
100c0 2a 2a 20 6f 70 65 6e 65 64 20 73 61 76 65 70 6f  ** opened savepo
100d0 69 6e 74 2e 20 53 61 76 65 70 6f 69 6e 74 73 20  int. Savepoints 
100e0 61 72 65 20 61 64 64 65 64 20 74 6f 20 74 68 65  are added to the
100f0 20 6c 69 73 74 20 62 79 20 74 68 65 20 76 64 62   list by the vdb
10100 65 0a 2a 2a 20 4f 50 5f 53 61 76 65 70 6f 69 6e  e.** OP_Savepoin
10110 74 20 69 6e 73 74 72 75 63 74 69 6f 6e 2e 0a 2a  t instruction..*
10120 2f 0a 73 74 72 75 63 74 20 53 61 76 65 70 6f 69  /.struct Savepoi
10130 6e 74 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  nt {.  char *zNa
10140 6d 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  me;             
10150 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 61             /* Sa
10160 76 65 70 6f 69 6e 74 20 6e 61 6d 65 20 28 6e 75  vepoint name (nu
10170 6c 2d 74 65 72 6d 69 6e 61 74 65 64 29 20 2a 2f  l-terminated) */
10180 0a 20 20 69 36 34 20 6e 44 65 66 65 72 72 65 64  .  i64 nDeferred
10190 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
101a0 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
101b0 20 6f 66 20 64 65 66 65 72 72 65 64 20 66 6b 20   of deferred fk 
101c0 76 69 6f 6c 61 74 69 6f 6e 73 20 2a 2f 0a 20 20  violations */.  
101d0 69 36 34 20 6e 44 65 66 65 72 72 65 64 49 6d 6d  i64 nDeferredImm
101e0 43 6f 6e 73 3b 20 20 20 20 20 20 20 20 20 20 20  Cons;           
101f0 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
10200 20 64 65 66 65 72 72 65 64 20 69 6d 6d 20 66 6b   deferred imm fk
10210 2e 20 2a 2f 0a 20 20 53 61 76 65 70 6f 69 6e 74  . */.  Savepoint
10220 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
10230 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61             /* Pa
10240 72 65 6e 74 20 73 61 76 65 70 6f 69 6e 74 20 28  rent savepoint (
10250 69 66 20 61 6e 79 29 20 2a 2f 0a 7d 3b 0a 0a 2f  if any) */.};../
10260 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
10270 6e 67 20 61 72 65 20 75 73 65 64 20 61 73 20 74  ng are used as t
10280 68 65 20 73 65 63 6f 6e 64 20 70 61 72 61 6d 65  he second parame
10290 74 65 72 20 74 6f 20 73 71 6c 69 74 65 33 53 61  ter to sqlite3Sa
102a0 76 65 70 6f 69 6e 74 28 29 2c 0a 2a 2a 20 61 6e  vepoint(),.** an
102b0 64 20 61 73 20 74 68 65 20 50 31 20 61 72 67 75  d as the P1 argu
102c0 6d 65 6e 74 20 74 6f 20 74 68 65 20 4f 50 5f 53  ment to the OP_S
102d0 61 76 65 70 6f 69 6e 74 20 69 6e 73 74 72 75 63  avepoint instruc
102e0 74 69 6f 6e 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65  tion..*/.#define
102f0 20 53 41 56 45 50 4f 49 4e 54 5f 42 45 47 49 4e   SAVEPOINT_BEGIN
10300 20 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20        0.#define 
10310 53 41 56 45 50 4f 49 4e 54 5f 52 45 4c 45 41 53  SAVEPOINT_RELEAS
10320 45 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20 53  E    1.#define S
10330 41 56 45 50 4f 49 4e 54 5f 52 4f 4c 4c 42 41 43  AVEPOINT_ROLLBAC
10340 4b 20 20 20 32 0a 0a 0a 2f 2a 0a 2a 2a 20 45 61  K   2.../*.** Ea
10350 63 68 20 53 51 4c 69 74 65 20 6d 6f 64 75 6c 65  ch SQLite module
10360 20 28 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20   (virtual table 
10370 64 65 66 69 6e 69 74 69 6f 6e 29 20 69 73 20 64  definition) is d
10380 65 66 69 6e 65 64 20 62 79 20 61 6e 0a 2a 2a 20  efined by an.** 
10390 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
103a0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
103b0 75 72 65 2c 20 73 74 6f 72 65 64 20 69 6e 20 74  ure, stored in t
103c0 68 65 20 73 71 6c 69 74 65 33 2e 61 4d 6f 64 75  he sqlite3.aModu
103d0 6c 65 0a 2a 2a 20 68 61 73 68 20 74 61 62 6c 65  le.** hash table
103e0 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4d 6f 64 75  ..*/.struct Modu
103f0 6c 65 20 7b 0a 20 20 63 6f 6e 73 74 20 73 71 6c  le {.  const sql
10400 69 74 65 33 5f 6d 6f 64 75 6c 65 20 2a 70 4d 6f  ite3_module *pMo
10410 64 75 6c 65 3b 20 20 20 20 20 20 20 2f 2a 20 43  dule;       /* C
10420 61 6c 6c 62 61 63 6b 20 70 6f 69 6e 74 65 72 73  allback pointers
10430 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
10440 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
10450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61             /* Na
10460 6d 65 20 70 61 73 73 65 64 20 74 6f 20 63 72 65  me passed to cre
10470 61 74 65 5f 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a  ate_module() */.
10480 20 20 76 6f 69 64 20 2a 70 41 75 78 3b 20 20 20    void *pAux;   
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104a0 20 20 20 20 20 20 20 2f 2a 20 70 41 75 78 20 70         /* pAux p
104b0 61 73 73 65 64 20 74 6f 20 63 72 65 61 74 65 5f  assed to create_
104c0 6d 6f 64 75 6c 65 28 29 20 2a 2f 0a 20 20 76 6f  module() */.  vo
104d0 69 64 20 28 2a 78 44 65 73 74 72 6f 79 29 28 76  id (*xDestroy)(v
104e0 6f 69 64 20 2a 29 3b 20 20 20 20 20 20 20 20 20  oid *);         
104f0 20 20 20 2f 2a 20 4d 6f 64 75 6c 65 20 64 65 73     /* Module des
10500 74 72 75 63 74 6f 72 20 66 75 6e 63 74 69 6f 6e  tructor function
10510 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70 45 70   */.  Table *pEp
10520 6f 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  oTab;           
10530 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 70             /* Ep
10540 6f 6e 79 6d 6f 75 73 20 74 61 62 6c 65 20 66 6f  onymous table fo
10550 72 20 74 68 69 73 20 6d 6f 64 75 6c 65 20 2a 2f  r this module */
10560 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 69 6e 66 6f 72  .};../*.** infor
10570 6d 61 74 69 6f 6e 20 61 62 6f 75 74 20 65 61 63  mation about eac
10580 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 61 6e 20 53  h column of an S
10590 51 4c 20 74 61 62 6c 65 20 69 73 20 68 65 6c 64  QL table is held
105a0 20 69 6e 20 61 6e 20 69 6e 73 74 61 6e 63 65 0a   in an instance.
105b0 2a 2a 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ** of this struc
105c0 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20  ture..*/.struct 
105d0 43 6f 6c 75 6d 6e 20 7b 0a 20 20 63 68 61 72 20  Column {.  char 
105e0 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 2f 2a 20 4e  *zName;     /* N
105f0 61 6d 65 20 6f 66 20 74 68 69 73 20 63 6f 6c 75  ame of this colu
10600 6d 6e 2c 20 5c 30 30 30 2c 20 74 68 65 6e 20 74  mn, \000, then t
10610 68 65 20 74 79 70 65 20 2a 2f 0a 20 20 45 78 70  he type */.  Exp
10620 72 20 2a 70 44 66 6c 74 3b 20 20 20 20 20 2f 2a  r *pDflt;     /*
10630 20 44 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f   Default value o
10640 66 20 74 68 69 73 20 63 6f 6c 75 6d 6e 20 2a 2f  f this column */
10650 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 6c 3b 20  .  char *zColl; 
10660 20 20 20 20 2f 2a 20 43 6f 6c 6c 61 74 69 6e 67      /* Collating
10670 20 73 65 71 75 65 6e 63 65 2e 20 20 49 66 20 4e   sequence.  If N
10680 55 4c 4c 2c 20 75 73 65 20 74 68 65 20 64 65 66  ULL, use the def
10690 61 75 6c 74 20 2a 2f 0a 20 20 75 38 20 6e 6f 74  ault */.  u8 not
106a0 4e 75 6c 6c 3b 20 20 20 20 20 20 2f 2a 20 41 6e  Null;      /* An
106b0 20 4f 45 5f 20 63 6f 64 65 20 66 6f 72 20 68 61   OE_ code for ha
106c0 6e 64 6c 69 6e 67 20 61 20 4e 4f 54 20 4e 55 4c  ndling a NOT NUL
106d0 4c 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a  L constraint */.
106e0 20 20 63 68 61 72 20 61 66 66 69 6e 69 74 79 3b    char affinity;
106f0 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65     /* One of the
10700 20 53 51 4c 49 54 45 5f 41 46 46 5f 2e 2e 2e 20   SQLITE_AFF_... 
10710 76 61 6c 75 65 73 20 2a 2f 0a 20 20 75 38 20 73  values */.  u8 s
10720 7a 45 73 74 3b 20 20 20 20 20 20 20 20 2f 2a 20  zEst;        /* 
10730 45 73 74 69 6d 61 74 65 64 20 73 69 7a 65 20 6f  Estimated size o
10740 66 20 76 61 6c 75 65 20 69 6e 20 74 68 69 73 20  f value in this 
10750 63 6f 6c 75 6d 6e 2e 20 73 69 7a 65 6f 66 28 49  column. sizeof(I
10760 4e 54 29 3d 3d 31 20 2a 2f 0a 20 20 75 38 20 63  NT)==1 */.  u8 c
10770 6f 6c 46 6c 61 67 73 3b 20 20 20 20 20 2f 2a 20  olFlags;     /* 
10780 42 6f 6f 6c 65 61 6e 20 70 72 6f 70 65 72 74 69  Boolean properti
10790 65 73 2e 20 20 53 65 65 20 43 4f 4c 46 4c 41 47  es.  See COLFLAG
107a0 5f 20 64 65 66 69 6e 65 73 20 62 65 6c 6f 77 20  _ defines below 
107b0 2a 2f 0a 7d 3b 0a 0a 2f 2a 20 41 6c 6c 6f 77 65  */.};../* Allowe
107c0 64 20 76 61 6c 75 65 73 20 66 6f 72 20 43 6f 6c  d values for Col
107d0 75 6d 6e 2e 63 6f 6c 46 6c 61 67 73 3a 0a 2a 2f  umn.colFlags:.*/
107e0 0a 23 64 65 66 69 6e 65 20 43 4f 4c 46 4c 41 47  .#define COLFLAG
107f0 5f 50 52 49 4d 4b 45 59 20 20 30 78 30 30 30 31  _PRIMKEY  0x0001
10800 20 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 69 73      /* Column is
10810 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 69   part of the pri
10820 6d 61 72 79 20 6b 65 79 20 2a 2f 0a 23 64 65 66  mary key */.#def
10830 69 6e 65 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44  ine COLFLAG_HIDD
10840 45 4e 20 20 20 30 78 30 30 30 32 20 20 20 20 2f  EN   0x0002    /
10850 2a 20 41 20 68 69 64 64 65 6e 20 63 6f 6c 75 6d  * A hidden colum
10860 6e 20 69 6e 20 61 20 76 69 72 74 75 61 6c 20 74  n in a virtual t
10870 61 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20  able */.#define 
10880 43 4f 4c 46 4c 41 47 5f 48 41 53 54 59 50 45 20  COLFLAG_HASTYPE 
10890 20 30 78 30 30 30 34 20 20 20 20 2f 2a 20 54 79   0x0004    /* Ty
108a0 70 65 20 6e 61 6d 65 20 66 6f 6c 6c 6f 77 73 20  pe name follows 
108b0 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 2a 2f 0a 0a  column name */..
108c0 2f 2a 0a 2a 2a 20 41 20 22 43 6f 6c 6c 61 74 69  /*.** A "Collati
108d0 6e 67 20 53 65 71 75 65 6e 63 65 22 20 69 73 20  ng Sequence" is 
108e0 64 65 66 69 6e 65 64 20 62 79 20 61 6e 20 69 6e  defined by an in
108f0 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
10900 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 73 74 72 75 63  llowing.** struc
10910 74 75 72 65 2e 20 43 6f 6e 63 65 70 74 75 61 6c  ture. Conceptual
10920 6c 79 2c 20 61 20 63 6f 6c 6c 61 74 69 6e 67 20  ly, a collating 
10930 73 65 71 75 65 6e 63 65 20 63 6f 6e 73 69 73 74  sequence consist
10940 73 20 6f 66 20 61 20 6e 61 6d 65 20 61 6e 64 0a  s of a name and.
10950 2a 2a 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 20  ** a comparison 
10960 72 6f 75 74 69 6e 65 20 74 68 61 74 20 64 65 66  routine that def
10970 69 6e 65 73 20 74 68 65 20 6f 72 64 65 72 20 6f  ines the order o
10980 66 20 74 68 61 74 20 73 65 71 75 65 6e 63 65 2e  f that sequence.
10990 0a 2a 2a 0a 2a 2a 20 49 66 20 43 6f 6c 6c 53 65  .**.** If CollSe
109a0 71 2e 78 43 6d 70 20 69 73 20 4e 55 4c 4c 2c 20  q.xCmp is NULL, 
109b0 69 74 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  it means that th
109c0 65 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e 67 20 73  e.** collating s
109d0 65 71 75 65 6e 63 65 20 69 73 20 75 6e 64 65 66  equence is undef
109e0 69 6e 65 64 2e 20 20 49 6e 64 69 63 65 73 20 62  ined.  Indices b
109f0 75 69 6c 74 20 6f 6e 20 61 6e 20 75 6e 64 65 66  uilt on an undef
10a00 69 6e 65 64 0a 2a 2a 20 63 6f 6c 6c 61 74 69 6e  ined.** collatin
10a10 67 20 73 65 71 75 65 6e 63 65 20 6d 61 79 20 6e  g sequence may n
10a20 6f 74 20 62 65 20 72 65 61 64 20 6f 72 20 77 72  ot be read or wr
10a30 69 74 74 65 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74  itten..*/.struct
10a40 20 43 6f 6c 6c 53 65 71 20 7b 0a 20 20 63 68 61   CollSeq {.  cha
10a50 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
10a60 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68     /* Name of th
10a70 65 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  e collating sequ
10a80 65 6e 63 65 2c 20 55 54 46 2d 38 20 65 6e 63 6f  ence, UTF-8 enco
10a90 64 65 64 20 2a 2f 0a 20 20 75 38 20 65 6e 63 3b  ded */.  u8 enc;
10aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
10ab0 2a 20 54 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  * Text encoding 
10ac0 68 61 6e 64 6c 65 64 20 62 79 20 78 43 6d 70 28  handled by xCmp(
10ad0 29 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 55 73  ) */.  void *pUs
10ae0 65 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  er;          /* 
10af0 46 69 72 73 74 20 61 72 67 75 6d 65 6e 74 20 74  First argument t
10b00 6f 20 78 43 6d 70 28 29 20 2a 2f 0a 20 20 69 6e  o xCmp() */.  in
10b10 74 20 28 2a 78 43 6d 70 29 28 76 6f 69 64 2a 2c  t (*xCmp)(void*,
10b20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69 64 2a  int, const void*
10b30 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
10b40 64 2a 29 3b 0a 20 20 76 6f 69 64 20 28 2a 78 44  d*);.  void (*xD
10b50 65 6c 29 28 76 6f 69 64 2a 29 3b 20 20 2f 2a 20  el)(void*);  /* 
10b60 44 65 73 74 72 75 63 74 6f 72 20 66 6f 72 20 70  Destructor for p
10b70 55 73 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a  User */.};../*.*
10b80 2a 20 41 20 73 6f 72 74 20 6f 72 64 65 72 20 63  * A sort order c
10b90 61 6e 20 62 65 20 65 69 74 68 65 72 20 41 53 43  an be either ASC
10ba0 20 6f 72 20 44 45 53 43 2e 0a 2a 2f 0a 23 64 65   or DESC..*/.#de
10bb0 66 69 6e 65 20 53 51 4c 49 54 45 5f 53 4f 5f 41  fine SQLITE_SO_A
10bc0 53 43 20 20 20 20 20 20 20 30 20 20 2f 2a 20 53  SC       0  /* S
10bd0 6f 72 74 20 69 6e 20 61 73 63 65 6e 64 69 6e 67  ort in ascending
10be0 20 6f 72 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e   order */.#defin
10bf0 65 20 53 51 4c 49 54 45 5f 53 4f 5f 44 45 53 43  e SQLITE_SO_DESC
10c00 20 20 20 20 20 20 31 20 20 2f 2a 20 53 6f 72 74        1  /* Sort
10c10 20 69 6e 20 61 73 63 65 6e 64 69 6e 67 20 6f 72   in ascending or
10c20 64 65 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  der */.#define S
10c30 51 4c 49 54 45 5f 53 4f 5f 55 4e 44 45 46 49 4e  QLITE_SO_UNDEFIN
10c40 45 44 20 2d 31 20 2f 2a 20 4e 6f 20 73 6f 72 74  ED -1 /* No sort
10c50 20 6f 72 64 65 72 20 73 70 65 63 69 66 69 65 64   order specified
10c60 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 43 6f 6c 75 6d   */../*.** Colum
10c70 6e 20 61 66 66 69 6e 69 74 79 20 74 79 70 65 73  n affinity types
10c80 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 73 65 20 75 73  ..**.** These us
10c90 65 64 20 74 6f 20 68 61 76 65 20 6d 6e 65 6d 6f  ed to have mnemo
10ca0 6e 69 63 20 6e 61 6d 65 20 6c 69 6b 65 20 27 69  nic name like 'i
10cb0 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41 46 46  ' for SQLITE_AFF
10cc0 5f 49 4e 54 45 47 45 52 20 61 6e 64 0a 2a 2a 20  _INTEGER and.** 
10cd0 27 74 27 20 66 6f 72 20 53 51 4c 49 54 45 5f 41  't' for SQLITE_A
10ce0 46 46 5f 54 45 58 54 2e 20 20 42 75 74 20 77 65  FF_TEXT.  But we
10cf0 20 63 61 6e 20 73 61 76 65 20 61 20 6c 69 74 74   can save a litt
10d00 6c 65 20 73 70 61 63 65 20 61 6e 64 20 69 6d 70  le space and imp
10d10 72 6f 76 65 0a 2a 2a 20 74 68 65 20 73 70 65 65  rove.** the spee
10d20 64 20 61 20 6c 69 74 74 6c 65 20 62 79 20 6e 75  d a little by nu
10d30 6d 62 65 72 69 6e 67 20 74 68 65 20 76 61 6c 75  mbering the valu
10d40 65 73 20 63 6f 6e 73 65 63 75 74 69 76 65 6c 79  es consecutively
10d50 2e 0a 2a 2a 0a 2a 2a 20 42 75 74 20 72 61 74 68  ..**.** But rath
10d60 65 72 20 74 68 61 6e 20 73 74 61 72 74 20 77 69  er than start wi
10d70 74 68 20 30 20 6f 72 20 31 2c 20 77 65 20 62 65  th 0 or 1, we be
10d80 67 69 6e 20 77 69 74 68 20 27 41 27 2e 20 20 54  gin with 'A'.  T
10d90 68 61 74 20 77 61 79 2c 0a 2a 2a 20 77 68 65 6e  hat way,.** when
10da0 20 6d 75 6c 74 69 70 6c 65 20 61 66 66 69 6e 69   multiple affini
10db0 74 79 20 74 79 70 65 73 20 61 72 65 20 63 6f 6e  ty types are con
10dc0 63 61 74 65 6e 61 74 65 64 20 69 6e 74 6f 20 61  catenated into a
10dd0 20 73 74 72 69 6e 67 20 61 6e 64 0a 2a 2a 20 75   string and.** u
10de0 73 65 64 20 61 73 20 74 68 65 20 50 34 20 6f 70  sed as the P4 op
10df0 65 72 61 6e 64 2c 20 74 68 65 79 20 77 69 6c 6c  erand, they will
10e00 20 62 65 20 6d 6f 72 65 20 72 65 61 64 61 62 6c   be more readabl
10e10 65 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 61 6c  e..**.** Note al
10e20 73 6f 20 74 68 61 74 20 74 68 65 20 6e 75 6d 65  so that the nume
10e30 72 69 63 20 74 79 70 65 73 20 61 72 65 20 67 72  ric types are gr
10e40 6f 75 70 65 64 20 74 6f 67 65 74 68 65 72 20 73  ouped together s
10e50 6f 20 74 68 61 74 20 74 65 73 74 69 6e 67 0a 2a  o that testing.*
10e60 2a 20 66 6f 72 20 61 20 6e 75 6d 65 72 69 63 20  * for a numeric 
10e70 74 79 70 65 20 69 73 20 61 20 73 69 6e 67 6c 65  type is a single
10e80 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20 20 41 6e   comparison.  An
10e90 64 20 74 68 65 20 42 4c 4f 42 20 74 79 70 65 20  d the BLOB type 
10ea0 69 73 20 66 69 72 73 74 2e 0a 2a 2f 0a 23 64 65  is first..*/.#de
10eb0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10ec0 42 4c 4f 42 20 20 20 20 20 27 41 27 0a 23 64 65  BLOB     'A'.#de
10ed0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10ee0 54 45 58 54 20 20 20 20 20 27 42 27 0a 23 64 65  TEXT     'B'.#de
10ef0 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10f00 4e 55 4d 45 52 49 43 20 20 27 43 27 0a 23 64 65  NUMERIC  'C'.#de
10f10 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10f20 49 4e 54 45 47 45 52 20 20 27 44 27 0a 23 64 65  INTEGER  'D'.#de
10f30 66 69 6e 65 20 53 51 4c 49 54 45 5f 41 46 46 5f  fine SQLITE_AFF_
10f40 52 45 41 4c 20 20 20 20 20 27 45 27 0a 0a 23 64  REAL     'E'..#d
10f50 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73 4e  efine sqlite3IsN
10f60 75 6d 65 72 69 63 41 66 66 69 6e 69 74 79 28 58  umericAffinity(X
10f70 29 20 20 28 28 58 29 3e 3d 53 51 4c 49 54 45 5f  )  ((X)>=SQLITE_
10f80 41 46 46 5f 4e 55 4d 45 52 49 43 29 0a 0a 2f 2a  AFF_NUMERIC)../*
10f90 0a 2a 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 41  .** The SQLITE_A
10fa0 46 46 5f 4d 41 53 4b 20 76 61 6c 75 65 73 20 6d  FF_MASK values m
10fb0 61 73 6b 73 20 6f 66 66 20 74 68 65 20 73 69 67  asks off the sig
10fc0 6e 69 66 69 63 61 6e 74 20 62 69 74 73 20 6f 66  nificant bits of
10fd0 20 61 6e 0a 2a 2a 20 61 66 66 69 6e 69 74 79 20   an.** affinity 
10fe0 76 61 6c 75 65 2e 0a 2a 2f 0a 23 64 65 66 69 6e  value..*/.#defin
10ff0 65 20 53 51 4c 49 54 45 5f 41 46 46 5f 4d 41 53  e SQLITE_AFF_MAS
11000 4b 20 20 20 20 20 30 78 34 37 0a 0a 2f 2a 0a 2a  K     0x47../*.*
11010 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20 62 69 74  * Additional bit
11020 20 76 61 6c 75 65 73 20 74 68 61 74 20 63 61 6e   values that can
11030 20 62 65 20 4f 52 65 64 20 77 69 74 68 20 61 6e   be ORed with an
11040 20 61 66 66 69 6e 69 74 79 20 77 69 74 68 6f 75   affinity withou
11050 74 0a 2a 2a 20 63 68 61 6e 67 69 6e 67 20 74 68  t.** changing th
11060 65 20 61 66 66 69 6e 69 74 79 2e 0a 2a 2a 0a 2a  e affinity..**.*
11070 2a 20 54 68 65 20 53 51 4c 49 54 45 5f 4e 4f 54  * The SQLITE_NOT
11080 4e 55 4c 4c 20 66 6c 61 67 20 69 73 20 61 20 63  NULL flag is a c
11090 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 4e 55  ombination of NU
110a0 4c 4c 45 51 20 61 6e 64 20 4a 55 4d 50 49 46 4e  LLEQ and JUMPIFN
110b0 55 4c 4c 2e 0a 2a 2a 20 49 74 20 63 61 75 73 65  ULL..** It cause
110c0 73 20 61 6e 20 61 73 73 65 72 74 28 29 20 74 6f  s an assert() to
110d0 20 66 69 72 65 20 69 66 20 65 69 74 68 65 72 20   fire if either 
110e0 6f 70 65 72 61 6e 64 20 74 6f 20 61 20 63 6f 6d  operand to a com
110f0 70 61 72 69 73 6f 6e 0a 2a 2a 20 6f 70 65 72 61  parison.** opera
11100 74 6f 72 20 69 73 20 4e 55 4c 4c 2e 20 20 49 74  tor is NULL.  It
11110 20 69 73 20 61 64 64 65 64 20 74 6f 20 63 65 72   is added to cer
11120 74 61 69 6e 20 63 6f 6d 70 61 72 69 73 6f 6e 20  tain comparison 
11130 6f 70 65 72 61 74 6f 72 73 20 74 6f 0a 2a 2a 20  operators to.** 
11140 70 72 6f 76 65 20 74 68 61 74 20 74 68 65 20 6f  prove that the o
11150 70 65 72 61 6e 64 73 20 61 72 65 20 61 6c 77 61  perands are alwa
11160 79 73 20 4e 4f 54 20 4e 55 4c 4c 2e 0a 2a 2f 0a  ys NOT NULL..*/.
11170 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4b  #define SQLITE_K
11180 45 45 50 4e 55 4c 4c 20 20 20 20 20 30 78 30 38  EEPNULL     0x08
11190 20 20 2f 2a 20 55 73 65 64 20 62 79 20 76 65 63    /* Used by vec
111a0 74 6f 72 20 3d 3d 20 6f 72 20 3c 3e 20 2a 2f 0a  tor == or <> */.
111b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 4a  #define SQLITE_J
111c0 55 4d 50 49 46 4e 55 4c 4c 20 20 20 30 78 31 30  UMPIFNULL   0x10
111d0 20 20 2f 2a 20 6a 75 6d 70 73 20 69 66 20 65 69    /* jumps if ei
111e0 74 68 65 72 20 6f 70 65 72 61 6e 64 20 69 73 20  ther operand is 
111f0 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20  NULL */.#define 
11200 53 51 4c 49 54 45 5f 53 54 4f 52 45 50 32 20 20  SQLITE_STOREP2  
11210 20 20 20 20 30 78 32 30 20 20 2f 2a 20 53 74 6f      0x20  /* Sto
11220 72 65 20 72 65 73 75 6c 74 20 69 6e 20 72 65 67  re result in reg
11230 5b 50 32 5d 20 72 61 74 68 65 72 20 74 68 61 6e  [P2] rather than
11240 20 6a 75 6d 70 20 2a 2f 0a 23 64 65 66 69 6e 65   jump */.#define
11250 20 53 51 4c 49 54 45 5f 4e 55 4c 4c 45 51 20 20   SQLITE_NULLEQ  
11260 20 20 20 20 20 30 78 38 30 20 20 2f 2a 20 4e 55       0x80  /* NU
11270 4c 4c 3d 4e 55 4c 4c 20 2a 2f 0a 23 64 65 66 69  LL=NULL */.#defi
11280 6e 65 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c  ne SQLITE_NOTNUL
11290 4c 20 20 20 20 20 20 30 78 39 30 20 20 2f 2a 20  L      0x90  /* 
112a0 41 73 73 65 72 74 20 74 68 61 74 20 6f 70 65 72  Assert that oper
112b0 61 6e 64 73 20 61 72 65 20 6e 65 76 65 72 20 4e  ands are never N
112c0 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 6e  ULL */../*.** An
112d0 20 6f 62 6a 65 63 74 20 6f 66 20 74 68 69 73 20   object of this 
112e0 74 79 70 65 20 69 73 20 63 72 65 61 74 65 64 20  type is created 
112f0 66 6f 72 20 65 61 63 68 20 76 69 72 74 75 61 6c  for each virtual
11300 20 74 61 62 6c 65 20 70 72 65 73 65 6e 74 20 69   table present i
11310 6e 0a 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73  n.** the databas
11320 65 20 73 63 68 65 6d 61 2e 0a 2a 2a 0a 2a 2a 20  e schema..**.** 
11330 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  If the database 
11340 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
11350 2c 20 74 68 65 6e 20 74 68 65 72 65 20 69 73 20  , then there is 
11360 6f 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20  one instance of 
11370 74 68 69 73 0a 2a 2a 20 73 74 72 75 63 74 75 72  this.** structur
11380 65 20 66 6f 72 20 65 61 63 68 20 64 61 74 61 62  e for each datab
11390 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 28  ase connection (
113a0 73 71 6c 69 74 65 33 2a 29 20 74 68 61 74 20 75  sqlite3*) that u
113b0 73 65 73 20 74 68 65 20 73 68 61 72 65 64 0a 2a  ses the shared.*
113c0 2a 20 73 63 68 65 6d 61 2e 20 54 68 69 73 20 69  * schema. This i
113d0 73 20 62 65 63 61 75 73 65 20 65 61 63 68 20 64  s because each d
113e0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
113f0 6f 6e 20 72 65 71 75 69 72 65 73 20 69 74 73 20  on requires its 
11400 6f 77 6e 20 75 6e 69 71 75 65 0a 2a 2a 20 69 6e  own unique.** in
11410 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 73 71  stance of the sq
11420 6c 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64  lite3_vtab* hand
11430 6c 65 20 75 73 65 64 20 74 6f 20 61 63 63 65 73  le used to acces
11440 73 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61  s the virtual ta
11450 62 6c 65 0a 2a 2a 20 69 6d 70 6c 65 6d 65 6e 74  ble.** implement
11460 61 74 69 6f 6e 2e 20 73 71 6c 69 74 65 33 5f 76  ation. sqlite3_v
11470 74 61 62 2a 20 68 61 6e 64 6c 65 73 20 63 61 6e  tab* handles can
11480 20 6e 6f 74 20 62 65 20 73 68 61 72 65 64 20 62   not be shared b
11490 65 74 77 65 65 6e 0a 2a 2a 20 64 61 74 61 62 61  etween.** databa
114a0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 2c 20  se connections, 
114b0 65 76 65 6e 20 77 68 65 6e 20 74 68 65 20 72 65  even when the re
114c0 73 74 20 6f 66 20 74 68 65 20 69 6e 2d 6d 65 6d  st of the in-mem
114d0 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20  ory database.** 
114e0 73 63 68 65 6d 61 20 69 73 20 73 68 61 72 65 64  schema is shared
114f0 2c 20 61 73 20 74 68 65 20 69 6d 70 6c 65 6d 65  , as the impleme
11500 6e 74 61 74 69 6f 6e 20 6f 66 74 65 6e 20 73 74  ntation often st
11510 6f 72 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ores the databas
11520 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  e.** connection 
11530 68 61 6e 64 6c 65 20 70 61 73 73 65 64 20 74 6f  handle passed to
11540 20 69 74 20 76 69 61 20 74 68 65 20 78 43 6f 6e   it via the xCon
11550 6e 65 63 74 28 29 20 6f 72 20 78 43 72 65 61 74  nect() or xCreat
11560 65 28 29 20 6d 65 74 68 6f 64 0a 2a 2a 20 64 75  e() method.** du
11570 72 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 61 74  ring initializat
11580 69 6f 6e 20 69 6e 74 65 72 6e 61 6c 6c 79 2e 20  ion internally. 
11590 54 68 69 73 20 64 61 74 61 62 61 73 65 20 63 6f  This database co
115a0 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
115b0 6d 61 79 0a 2a 2a 20 74 68 65 6e 20 62 65 20 75  may.** then be u
115c0 73 65 64 20 62 79 20 74 68 65 20 76 69 72 74 75  sed by the virtu
115d0 61 6c 20 74 61 62 6c 65 20 69 6d 70 6c 65 6d 65  al table impleme
115e0 6e 74 61 74 69 6f 6e 20 74 6f 20 61 63 63 65 73  ntation to acces
115f0 73 20 72 65 61 6c 20 74 61 62 6c 65 73 0a 2a 2a  s real tables.**
11600 20 77 69 74 68 69 6e 20 74 68 65 20 64 61 74 61   within the data
11610 62 61 73 65 2e 20 53 6f 20 74 68 61 74 20 74 68  base. So that th
11620 65 79 20 61 70 70 65 61 72 20 61 73 20 70 61 72  ey appear as par
11630 74 20 6f 66 20 74 68 65 20 63 61 6c 6c 65 72 73  t of the callers
11640 0a 2a 2a 20 74 72 61 6e 73 61 63 74 69 6f 6e 2c  .** transaction,
11650 20 74 68 65 73 65 20 61 63 63 65 73 73 65 73 20   these accesses 
11660 6e 65 65 64 20 74 6f 20 62 65 20 6d 61 64 65 20  need to be made 
11670 76 69 61 20 74 68 65 20 73 61 6d 65 20 64 61 74  via the same dat
11680 61 62 61 73 65 0a 2a 2a 20 63 6f 6e 6e 65 63 74  abase.** connect
11690 69 6f 6e 20 61 73 20 74 68 61 74 20 75 73 65 64  ion as that used
116a0 20 74 6f 20 65 78 65 63 75 74 65 20 53 51 4c 20   to execute SQL 
116b0 6f 70 65 72 61 74 69 6f 6e 73 20 6f 6e 20 74 68  operations on th
116c0 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e  e virtual table.
116d0 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 56 54 61 62 6c  .**.** All VTabl
116e0 65 20 6f 62 6a 65 63 74 73 20 74 68 61 74 20 63  e objects that c
116f0 6f 72 72 65 73 70 6f 6e 64 20 74 6f 20 61 20 73  orrespond to a s
11700 69 6e 67 6c 65 20 74 61 62 6c 65 20 69 6e 20 61  ingle table in a
11710 20 73 68 61 72 65 64 0a 2a 2a 20 64 61 74 61 62   shared.** datab
11720 61 73 65 20 73 63 68 65 6d 61 20 61 72 65 20 69  ase schema are i
11730 6e 69 74 69 61 6c 6c 79 20 73 74 6f 72 65 64 20  nitially stored 
11740 69 6e 20 61 20 6c 69 6e 6b 65 64 2d 6c 69 73 74  in a linked-list
11750 20 70 6f 69 6e 74 65 64 20 74 6f 20 62 79 0a 2a   pointed to by.*
11760 2a 20 74 68 65 20 54 61 62 6c 65 2e 70 56 54 61  * the Table.pVTa
11770 62 6c 65 20 6d 65 6d 62 65 72 20 76 61 72 69 61  ble member varia
11780 62 6c 65 20 6f 66 20 74 68 65 20 63 6f 72 72 65  ble of the corre
11790 73 70 6f 6e 64 69 6e 67 20 54 61 62 6c 65 20 6f  sponding Table o
117a0 62 6a 65 63 74 2e 0a 2a 2a 20 57 68 65 6e 20 61  bject..** When a
117b0 6e 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  n sqlite3_prepar
117c0 65 28 29 20 6f 70 65 72 61 74 69 6f 6e 20 69 73  e() operation is
117d0 20 72 65 71 75 69 72 65 64 20 74 6f 20 61 63 63   required to acc
117e0 65 73 73 20 74 68 65 20 76 69 72 74 75 61 6c 0a  ess the virtual.
117f0 2a 2a 20 74 61 62 6c 65 2c 20 69 74 20 73 65 61  ** table, it sea
11800 72 63 68 65 73 20 74 68 65 20 6c 69 73 74 20 66  rches the list f
11810 6f 72 20 74 68 65 20 56 54 61 62 6c 65 20 74 68  or the VTable th
11820 61 74 20 63 6f 72 72 65 73 70 6f 6e 64 73 20 74  at corresponds t
11830 6f 20 74 68 65 0a 2a 2a 20 64 61 74 61 62 61 73  o the.** databas
11840 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 64 6f 69  e connection doi
11850 6e 67 20 74 68 65 20 70 72 65 70 61 72 69 6e 67  ng the preparing
11860 20 73 6f 20 61 73 20 74 6f 20 75 73 65 20 74 68   so as to use th
11870 65 20 63 6f 72 72 65 63 74 0a 2a 2a 20 73 71 6c  e correct.** sql
11880 69 74 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c  ite3_vtab* handl
11890 65 20 69 6e 20 74 68 65 20 63 6f 6d 70 69 6c 65  e in the compile
118a0 64 20 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a 20 57  d query..**.** W
118b0 68 65 6e 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79  hen an in-memory
118c0 20 54 61 62 6c 65 20 6f 62 6a 65 63 74 20 69 73   Table object is
118d0 20 64 65 6c 65 74 65 64 20 28 66 6f 72 20 65 78   deleted (for ex
118e0 61 6d 70 6c 65 20 77 68 65 6e 20 74 68 65 0a 2a  ample when the.*
118f0 2a 20 73 63 68 65 6d 61 20 69 73 20 62 65 69 6e  * schema is bein
11900 67 20 72 65 6c 6f 61 64 65 64 20 66 6f 72 20 73  g reloaded for s
11910 6f 6d 65 20 72 65 61 73 6f 6e 29 2c 20 74 68 65  ome reason), the
11920 20 56 54 61 62 6c 65 20 6f 62 6a 65 63 74 73 20   VTable objects 
11930 61 72 65 20 6e 6f 74 0a 2a 2a 20 64 65 6c 65 74  are not.** delet
11940 65 64 20 61 6e 64 20 74 68 65 20 73 71 6c 69 74  ed and the sqlit
11950 65 33 5f 76 74 61 62 2a 20 68 61 6e 64 6c 65 73  e3_vtab* handles
11960 20 61 72 65 20 6e 6f 74 20 78 44 69 73 63 6f 6e   are not xDiscon
11970 6e 65 63 74 28 29 65 64 0a 2a 2a 20 69 6d 6d 65  nect()ed.** imme
11980 64 69 61 74 65 6c 79 2e 20 49 6e 73 74 65 61 64  diately. Instead
11990 2c 20 74 68 65 79 20 61 72 65 20 6d 6f 76 65 64  , they are moved
119a0 20 66 72 6f 6d 20 74 68 65 20 54 61 62 6c 65 2e   from the Table.
119b0 70 56 54 61 62 6c 65 20 6c 69 73 74 20 74 6f 0a  pVTable list to.
119c0 2a 2a 20 61 6e 6f 74 68 65 72 20 6c 69 6e 6b 65  ** another linke
119d0 64 20 6c 69 73 74 20 68 65 61 64 65 64 20 62 79  d list headed by
119e0 20 74 68 65 20 73 71 6c 69 74 65 33 2e 70 44 69   the sqlite3.pDi
119f0 73 63 6f 6e 6e 65 63 74 20 6d 65 6d 62 65 72 20  sconnect member 
11a00 6f 66 20 74 68 65 0a 2a 2a 20 63 6f 72 72 65 73  of the.** corres
11a10 70 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 20  ponding sqlite3 
11a20 73 74 72 75 63 74 75 72 65 2e 20 54 68 65 79 20  structure. They 
11a30 61 72 65 20 74 68 65 6e 20 64 65 6c 65 74 65 64  are then deleted
11a40 2f 78 44 69 73 63 6f 6e 6e 65 63 74 65 64 0a 2a  /xDisconnected.*
11a50 2a 20 6e 65 78 74 20 74 69 6d 65 20 61 20 73 74  * next time a st
11a60 61 74 65 6d 65 6e 74 20 69 73 20 70 72 65 70 61  atement is prepa
11a70 72 65 64 20 75 73 69 6e 67 20 73 61 69 64 20 73  red using said s
11a80 71 6c 69 74 65 33 2a 2e 20 54 68 69 73 20 69 73  qlite3*. This is
11a90 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 61 76 6f 69   done.** to avoi
11aa0 64 20 64 65 61 64 6c 6f 63 6b 20 69 73 73 75 65  d deadlock issue
11ab0 73 20 69 6e 76 6f 6c 76 69 6e 67 20 6d 75 6c 74  s involving mult
11ac0 69 70 6c 65 20 73 71 6c 69 74 65 33 2e 6d 75 74  iple sqlite3.mut
11ad0 65 78 20 6d 75 74 65 78 65 73 2e 0a 2a 2a 20 52  ex mutexes..** R
11ae0 65 66 65 72 20 74 6f 20 63 6f 6d 6d 65 6e 74 73  efer to comments
11af0 20 61 62 6f 76 65 20 66 75 6e 63 74 69 6f 6e 20   above function 
11b00 73 71 6c 69 74 65 33 56 74 61 62 55 6e 6c 6f 63  sqlite3VtabUnloc
11b10 6b 4c 69 73 74 28 29 20 66 6f 72 20 61 6e 0a 2a  kList() for an.*
11b20 2a 20 65 78 70 6c 61 6e 61 74 69 6f 6e 20 61 73  * explanation as
11b30 20 74 6f 20 77 68 79 20 69 74 20 69 73 20 73 61   to why it is sa
11b40 66 65 20 74 6f 20 61 64 64 20 61 6e 20 65 6e 74  fe to add an ent
11b50 72 79 20 74 6f 20 61 6e 20 73 71 6c 69 74 65 33  ry to an sqlite3
11b60 2e 70 44 69 73 63 6f 6e 6e 65 63 74 0a 2a 2a 20  .pDisconnect.** 
11b70 6c 69 73 74 20 77 69 74 68 6f 75 74 20 68 6f 6c  list without hol
11b80 64 69 6e 67 20 74 68 65 20 63 6f 72 72 65 73 70  ding the corresp
11b90 6f 6e 64 69 6e 67 20 73 71 6c 69 74 65 33 2e 6d  onding sqlite3.m
11ba0 75 74 65 78 20 6d 75 74 65 78 2e 0a 2a 2a 0a 2a  utex mutex..**.*
11bb0 2a 20 54 68 65 20 6d 65 6d 6f 72 79 20 66 6f 72  * The memory for
11bc0 20 6f 62 6a 65 63 74 73 20 6f 66 20 74 68 69 73   objects of this
11bd0 20 74 79 70 65 20 69 73 20 61 6c 77 61 79 73 20   type is always 
11be0 61 6c 6c 6f 63 61 74 65 64 20 62 79 0a 2a 2a 20  allocated by.** 
11bf0 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 28  sqlite3DbMalloc(
11c00 29 2c 20 75 73 69 6e 67 20 74 68 65 20 63 6f 6e  ), using the con
11c10 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 73  nection handle s
11c20 74 6f 72 65 64 20 69 6e 20 56 54 61 62 6c 65 2e  tored in VTable.
11c30 64 62 20 61 73 0a 2a 2a 20 74 68 65 20 66 69 72  db as.** the fir
11c40 73 74 20 61 72 67 75 6d 65 6e 74 2e 0a 2a 2f 0a  st argument..*/.
11c50 73 74 72 75 63 74 20 56 54 61 62 6c 65 20 7b 0a  struct VTable {.
11c60 20 20 73 71 6c 69 74 65 33 20 2a 64 62 3b 20 20    sqlite3 *db;  
11c70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44              /* D
11c80 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
11c90 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
11ca0 74 68 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  th this table */
11cb0 0a 20 20 4d 6f 64 75 6c 65 20 2a 70 4d 6f 64 3b  .  Module *pMod;
11cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
11cd0 50 6f 69 6e 74 65 72 20 74 6f 20 6d 6f 64 75 6c  Pointer to modul
11ce0 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  e implementation
11cf0 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 76 74   */.  sqlite3_vt
11d00 61 62 20 2a 70 56 74 61 62 3b 20 20 20 20 20 20  ab *pVtab;      
11d10 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 74  /* Pointer to vt
11d20 61 62 20 69 6e 73 74 61 6e 63 65 20 2a 2f 0a 20  ab instance */. 
11d30 20 69 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20   int nRef;      
11d40 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
11d50 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
11d60 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
11d70 72 65 20 2a 2f 0a 20 20 75 38 20 62 43 6f 6e 73  re */.  u8 bCons
11d80 74 72 61 69 6e 74 3b 20 20 20 20 20 20 20 20 20  traint;         
11d90 20 20 2f 2a 20 54 72 75 65 20 69 66 20 63 6f 6e    /* True if con
11da0 73 74 72 61 69 6e 74 73 20 61 72 65 20 73 75 70  straints are sup
11db0 70 6f 72 74 65 64 20 2a 2f 0a 20 20 69 6e 74 20  ported */.  int 
11dc0 69 53 61 76 65 70 6f 69 6e 74 3b 20 20 20 20 20  iSavepoint;     
11dd0 20 20 20 20 20 20 2f 2a 20 44 65 70 74 68 20 6f        /* Depth o
11de0 66 20 74 68 65 20 53 41 56 45 50 4f 49 4e 54 20  f the SAVEPOINT 
11df0 73 74 61 63 6b 20 2a 2f 0a 20 20 56 54 61 62 6c  stack */.  VTabl
11e00 65 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  e *pNext;       
11e10 20 20 20 20 20 2f 2a 20 4e 65 78 74 20 69 6e 20       /* Next in 
11e20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 28 73 65 65  linked list (see
11e30 20 61 62 6f 76 65 29 20 2a 2f 0a 7d 3b 0a 0a 2f   above) */.};../
11e40 2a 0a 2a 2a 20 54 68 65 20 73 63 68 65 6d 61 20  *.** The schema 
11e50 66 6f 72 20 65 61 63 68 20 53 51 4c 20 74 61 62  for each SQL tab
11e60 6c 65 20 61 6e 64 20 76 69 65 77 20 69 73 20 72  le and view is r
11e70 65 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65  epresented in me
11e80 6d 6f 72 79 0a 2a 2a 20 62 79 20 61 6e 20 69 6e  mory.** by an in
11e90 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f  stance of the fo
11ea0 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72  llowing structur
11eb0 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54 61 62  e..*/.struct Tab
11ec0 6c 65 20 7b 0a 20 20 63 68 61 72 20 2a 7a 4e 61  le {.  char *zNa
11ed0 6d 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e  me;         /* N
11ee0 61 6d 65 20 6f 66 20 74 68 65 20 74 61 62 6c 65  ame of the table
11ef0 20 6f 72 20 76 69 65 77 20 2a 2f 0a 20 20 43 6f   or view */.  Co
11f00 6c 75 6d 6e 20 2a 61 43 6f 6c 3b 20 20 20 20 20  lumn *aCol;     
11f10 20 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f     /* Informatio
11f20 6e 20 61 62 6f 75 74 20 65 61 63 68 20 63 6f 6c  n about each col
11f30 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65 78 20 2a  umn */.  Index *
11f40 70 49 6e 64 65 78 3b 20 20 20 20 20 20 20 2f 2a  pIndex;       /*
11f50 20 4c 69 73 74 20 6f 66 20 53 51 4c 20 69 6e 64   List of SQL ind
11f60 65 78 65 73 20 6f 6e 20 74 68 69 73 20 74 61 62  exes on this tab
11f70 6c 65 2e 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20  le. */.  Select 
11f80 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 2f 2a  *pSelect;     /*
11f90 20 4e 55 4c 4c 20 66 6f 72 20 74 61 62 6c 65 73   NULL for tables
11fa0 2e 20 20 50 6f 69 6e 74 73 20 74 6f 20 64 65 66  .  Points to def
11fb0 69 6e 69 74 69 6f 6e 20 69 66 20 61 20 76 69 65  inition if a vie
11fc0 77 2e 20 2a 2f 0a 20 20 46 4b 65 79 20 2a 70 46  w. */.  FKey *pF
11fd0 4b 65 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  Key;         /* 
11fe0 4c 69 6e 6b 65 64 20 6c 69 73 74 20 6f 66 20 61  Linked list of a
11ff0 6c 6c 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  ll foreign keys 
12000 69 6e 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  in this table */
12010 0a 20 20 63 68 61 72 20 2a 7a 43 6f 6c 41 66 66  .  char *zColAff
12020 3b 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e  ;       /* Strin
12030 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
12040 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
12050 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 45 78 70 72  column */.  Expr
12060 4c 69 73 74 20 2a 70 43 68 65 63 6b 3b 20 20 20  List *pCheck;   
12070 20 2f 2a 20 41 6c 6c 20 43 48 45 43 4b 20 63 6f   /* All CHECK co
12080 6e 73 74 72 61 69 6e 74 73 20 2a 2f 0a 20 20 20  nstraints */.   
12090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
120a0 20 20 20 20 2f 2a 20 20 20 2e 2e 2e 20 61 6c 73      /*   ... als
120b0 6f 20 75 73 65 64 20 61 73 20 63 6f 6c 75 6d 6e  o used as column
120c0 20 6e 61 6d 65 20 6c 69 73 74 20 69 6e 20 61 20   name list in a 
120d0 56 49 45 57 20 2a 2f 0a 20 20 69 6e 74 20 74 6e  VIEW */.  int tn
120e0 75 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  um;            /
120f0 2a 20 52 6f 6f 74 20 42 54 72 65 65 20 70 61 67  * Root BTree pag
12100 65 20 66 6f 72 20 74 68 69 73 20 74 61 62 6c 65  e for this table
12110 20 2a 2f 0a 20 20 75 33 32 20 6e 54 61 62 52 65   */.  u32 nTabRe
12120 66 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75  f;         /* Nu
12130 6d 62 65 72 20 6f 66 20 70 6f 69 6e 74 65 72 73  mber of pointers
12140 20 74 6f 20 74 68 69 73 20 54 61 62 6c 65 20 2a   to this Table *
12150 2f 0a 20 20 75 33 32 20 74 61 62 46 6c 61 67 73  /.  u32 tabFlags
12160 3b 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b  ;        /* Mask
12170 20 6f 66 20 54 46 5f 2a 20 76 61 6c 75 65 73 20   of TF_* values 
12180 2a 2f 0a 20 20 69 31 36 20 69 50 4b 65 79 3b 20  */.  i16 iPKey; 
12190 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20            /* If 
121a0 6e 6f 74 20 6e 65 67 61 74 69 76 65 2c 20 75 73  not negative, us
121b0 65 20 61 43 6f 6c 5b 69 50 4b 65 79 5d 20 61 73  e aCol[iPKey] as
121c0 20 74 68 65 20 72 6f 77 69 64 20 2a 2f 0a 20 20   the rowid */.  
121d0 69 31 36 20 6e 43 6f 6c 3b 20 20 20 20 20 20 20  i16 nCol;       
121e0 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
121f0 66 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 69  f columns in thi
12200 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67  s table */.  Log
12210 45 73 74 20 6e 52 6f 77 4c 6f 67 45 73 74 3b 20  Est nRowLogEst; 
12220 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 72    /* Estimated r
12230 6f 77 73 20 69 6e 20 74 61 62 6c 65 20 2d 20 66  ows in table - f
12240 72 6f 6d 20 73 71 6c 69 74 65 5f 73 74 61 74 31  rom sqlite_stat1
12250 20 74 61 62 6c 65 20 2a 2f 0a 20 20 4c 6f 67 45   table */.  LogE
12260 73 74 20 73 7a 54 61 62 52 6f 77 3b 20 20 20 20  st szTabRow;    
12270 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 73 69   /* Estimated si
12280 7a 65 20 6f 66 20 65 61 63 68 20 74 61 62 6c 65  ze of each table
12290 20 72 6f 77 20 69 6e 20 62 79 74 65 73 20 2a 2f   row in bytes */
122a0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
122b0 4e 41 42 4c 45 5f 43 4f 53 54 4d 55 4c 54 0a 20  NABLE_COSTMULT. 
122c0 20 4c 6f 67 45 73 74 20 63 6f 73 74 4d 75 6c 74   LogEst costMult
122d0 3b 20 20 20 20 20 2f 2a 20 43 6f 73 74 20 6d 75  ;     /* Cost mu
122e0 6c 74 69 70 6c 69 65 72 20 66 6f 72 20 75 73 69  ltiplier for usi
122f0 6e 67 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f  ng this table */
12300 0a 23 65 6e 64 69 66 0a 20 20 75 38 20 6b 65 79  .#endif.  u8 key
12310 43 6f 6e 66 3b 20 20 20 20 20 20 20 20 20 20 2f  Conf;          /
12320 2a 20 57 68 61 74 20 74 6f 20 64 6f 20 69 6e 20  * What to do in 
12330 63 61 73 65 20 6f 66 20 75 6e 69 71 75 65 6e 65  case of uniquene
12340 73 73 20 63 6f 6e 66 6c 69 63 74 20 6f 6e 20 69  ss conflict on i
12350 50 4b 65 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20  PKey */.#ifndef 
12360 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 4c 54 45  SQLITE_OMIT_ALTE
12370 52 54 41 42 4c 45 0a 20 20 69 6e 74 20 61 64 64  RTABLE.  int add
12380 43 6f 6c 4f 66 66 73 65 74 3b 20 20 20 20 2f 2a  ColOffset;    /*
12390 20 4f 66 66 73 65 74 20 69 6e 20 43 52 45 41 54   Offset in CREAT
123a0 45 20 54 41 42 4c 45 20 73 74 6d 74 20 74 6f 20  E TABLE stmt to 
123b0 61 64 64 20 61 20 6e 65 77 20 63 6f 6c 75 6d 6e  add a new column
123c0 20 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64   */.#endif.#ifnd
123d0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
123e0 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20 69 6e  IRTUALTABLE.  in
123f0 74 20 6e 4d 6f 64 75 6c 65 41 72 67 3b 20 20 20  t nModuleArg;   
12400 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20     /* Number of 
12410 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
12420 20 6d 6f 64 75 6c 65 20 2a 2f 0a 20 20 63 68 61   module */.  cha
12430 72 20 2a 2a 61 7a 4d 6f 64 75 6c 65 41 72 67 3b  r **azModuleArg;
12440 20 20 2f 2a 20 30 3a 20 6d 6f 64 75 6c 65 20 31    /* 0: module 1
12450 3a 20 73 63 68 65 6d 61 20 32 3a 20 76 74 61 62  : schema 2: vtab
12460 20 6e 61 6d 65 20 33 2e 2e 2e 3a 20 61 72 67 73   name 3...: args
12470 20 2a 2f 0a 20 20 56 54 61 62 6c 65 20 2a 70 56   */.  VTable *pV
12480 54 61 62 6c 65 3b 20 20 20 20 20 2f 2a 20 4c 69  Table;     /* Li
12490 73 74 20 6f 66 20 56 54 61 62 6c 65 20 6f 62 6a  st of VTable obj
124a0 65 63 74 73 2e 20 2a 2f 0a 23 65 6e 64 69 66 0a  ects. */.#endif.
124b0 20 20 54 72 69 67 67 65 72 20 2a 70 54 72 69 67    Trigger *pTrig
124c0 67 65 72 3b 20 20 20 2f 2a 20 4c 69 73 74 20 6f  ger;   /* List o
124d0 66 20 74 72 69 67 67 65 72 73 20 73 74 6f 72 65  f triggers store
124e0 64 20 69 6e 20 70 53 63 68 65 6d 61 20 2a 2f 0a  d in pSchema */.
124f0 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d    Schema *pSchem
12500 61 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61  a;     /* Schema
12510 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
12520 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20 20 54  his table */.  T
12530 61 62 6c 65 20 2a 70 4e 65 78 74 5a 6f 6d 62 69  able *pNextZombi
12540 65 3b 20 20 2f 2a 20 4e 65 78 74 20 6f 6e 20 74  e;  /* Next on t
12550 68 65 20 50 61 72 73 65 2e 70 5a 6f 6d 62 69 65  he Parse.pZombie
12560 54 61 62 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a 0a  Tab list */.};..
12570 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
12580 6c 75 65 73 20 66 6f 72 20 54 61 62 6c 65 2e 74  lues for Table.t
12590 61 62 46 6c 61 67 73 2e 0a 2a 2a 0a 2a 2a 20 54  abFlags..**.** T
125a0 46 5f 4f 4f 4f 48 69 64 64 65 6e 20 61 70 70 6c  F_OOOHidden appl
125b0 69 65 73 20 74 6f 20 74 61 62 6c 65 73 20 6f 72  ies to tables or
125c0 20 76 69 65 77 20 74 68 61 74 20 68 61 76 65 20   view that have 
125d0 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 73 20 74  hidden columns t
125e0 68 61 74 20 61 72 65 0a 2a 2a 20 66 6f 6c 6c 6f  hat are.** follo
125f0 77 65 64 20 62 79 20 6e 6f 6e 2d 68 69 64 64 65  wed by non-hidde
12600 6e 20 63 6f 6c 75 6d 6e 73 2e 20 20 45 78 61 6d  n columns.  Exam
12610 70 6c 65 3a 20 20 22 43 52 45 41 54 45 20 56 49  ple:  "CREATE VI
12620 52 54 55 41 4c 20 54 41 42 4c 45 20 78 20 55 53  RTUAL TABLE x US
12630 49 4e 47 0a 2a 2a 20 76 74 61 62 31 28 61 20 48  ING.** vtab1(a H
12640 49 44 44 45 4e 2c 20 62 29 3b 22 2e 20 20 53 69  IDDEN, b);".  Si
12650 6e 63 65 20 22 62 22 20 69 73 20 61 20 6e 6f 6e  nce "b" is a non
12660 2d 68 69 64 64 65 6e 20 63 6f 6c 75 6d 6e 20 62  -hidden column b
12670 75 74 20 22 61 22 20 69 73 20 68 69 64 64 65 6e  ut "a" is hidden
12680 2c 0a 2a 2a 20 74 68 65 20 54 46 5f 4f 4f 4f 48  ,.** the TF_OOOH
12690 69 64 64 65 6e 20 61 74 74 72 69 62 75 74 65 20  idden attribute 
126a0 77 6f 75 6c 64 20 61 70 70 6c 79 20 69 6e 20 74  would apply in t
126b0 68 69 73 20 63 61 73 65 2e 20 20 53 75 63 68 20  his case.  Such 
126c0 74 61 62 6c 65 73 20 72 65 71 75 69 72 65 0a 2a  tables require.*
126d0 2a 20 73 70 65 63 69 61 6c 20 68 61 6e 64 6c 69  * special handli
126e0 6e 67 20 64 75 72 69 6e 67 20 49 4e 53 45 52 54  ng during INSERT
126f0 20 70 72 6f 63 65 73 73 69 6e 67 2e 0a 2a 2f 0a   processing..*/.
12700 23 64 65 66 69 6e 65 20 54 46 5f 52 65 61 64 6f  #define TF_Reado
12710 6e 6c 79 20 20 20 20 20 20 20 20 30 78 30 30 30  nly        0x000
12720 31 20 20 20 20 2f 2a 20 52 65 61 64 2d 6f 6e 6c  1    /* Read-onl
12730 79 20 73 79 73 74 65 6d 20 74 61 62 6c 65 20 2a  y system table *
12740 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 45 70 68  /.#define TF_Eph
12750 65 6d 65 72 61 6c 20 20 20 20 20 20 20 30 78 30  emeral       0x0
12760 30 30 32 20 20 20 20 2f 2a 20 41 6e 20 65 70 68  002    /* An eph
12770 65 6d 65 72 61 6c 20 74 61 62 6c 65 20 2a 2f 0a  emeral table */.
12780 23 64 65 66 69 6e 65 20 54 46 5f 48 61 73 50 72  #define TF_HasPr
12790 69 6d 61 72 79 4b 65 79 20 20 20 30 78 30 30 30  imaryKey   0x000
127a0 34 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 68 61  4    /* Table ha
127b0 73 20 61 20 70 72 69 6d 61 72 79 20 6b 65 79 20  s a primary key 
127c0 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 41 75  */.#define TF_Au
127d0 74 6f 69 6e 63 72 65 6d 65 6e 74 20 20 20 30 78  toincrement   0x
127e0 30 30 30 38 20 20 20 20 2f 2a 20 49 6e 74 65 67  0008    /* Integ
127f0 65 72 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  er primary key i
12800 73 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20  s autoincrement 
12810 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46 5f 48 61  */.#define TF_Ha
12820 73 53 74 61 74 31 20 20 20 20 20 20 20 20 30 78  sStat1        0x
12830 30 30 31 30 20 20 20 20 2f 2a 20 6e 52 6f 77 4c  0010    /* nRowL
12840 6f 67 45 73 74 20 73 65 74 20 66 72 6f 6d 20 73  ogEst set from s
12850 71 6c 69 74 65 5f 73 74 61 74 31 20 2a 2f 0a 23  qlite_stat1 */.#
12860 64 65 66 69 6e 65 20 54 46 5f 57 69 74 68 6f 75  define TF_Withou
12870 74 52 6f 77 69 64 20 20 20 20 30 78 30 30 32 30  tRowid    0x0020
12880 20 20 20 20 2f 2a 20 4e 6f 20 72 6f 77 69 64 2e      /* No rowid.
12890 20 20 50 52 49 4d 41 52 59 20 4b 45 59 20 69 73    PRIMARY KEY is
128a0 20 74 68 65 20 6b 65 79 20 2a 2f 0a 23 64 65 66   the key */.#def
128b0 69 6e 65 20 54 46 5f 4e 6f 56 69 73 69 62 6c 65  ine TF_NoVisible
128c0 52 6f 77 69 64 20 20 30 78 30 30 34 30 20 20 20  Rowid  0x0040   
128d0 20 2f 2a 20 4e 6f 20 75 73 65 72 2d 76 69 73 69   /* No user-visi
128e0 62 6c 65 20 22 72 6f 77 69 64 22 20 63 6f 6c 75  ble "rowid" colu
128f0 6d 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 54 46  mn */.#define TF
12900 5f 4f 4f 4f 48 69 64 64 65 6e 20 20 20 20 20 20  _OOOHidden      
12910 20 30 78 30 30 38 30 20 20 20 20 2f 2a 20 4f 75   0x0080    /* Ou
12920 74 2d 6f 66 2d 4f 72 64 65 72 20 68 69 64 64 65  t-of-Order hidde
12930 6e 20 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 23 64 65  n columns */.#de
12940 66 69 6e 65 20 54 46 5f 53 74 61 74 73 55 73 65  fine TF_StatsUse
12950 64 20 20 20 20 20 20 20 30 78 30 31 30 30 20 20  d       0x0100  
12960 20 20 2f 2a 20 51 75 65 72 79 20 70 6c 61 6e 6e    /* Query plann
12970 65 72 20 64 65 63 69 73 69 6f 6e 73 20 61 66 66  er decisions aff
12980 65 63 74 65 64 20 62 79 0a 20 20 20 20 20 20 20  ected by.       
12990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
129a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
129b0 20 49 6e 64 65 78 2e 61 69 52 6f 77 4c 6f 67 45   Index.aiRowLogE
129c0 73 74 5b 5d 20 76 61 6c 75 65 73 20 2a 2f 0a 23  st[] values */.#
129d0 64 65 66 69 6e 65 20 54 46 5f 48 61 73 4e 6f 74  define TF_HasNot
129e0 4e 75 6c 6c 20 20 20 20 20 20 30 78 30 32 30 30  Null      0x0200
129f0 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69 6e 73 20      /* Contains 
12a00 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6e 73 74 72 61  NOT NULL constra
12a10 69 6e 74 73 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 54  ints */../*.** T
12a20 65 73 74 20 74 6f 20 73 65 65 20 77 68 65 74 68  est to see wheth
12a30 65 72 20 6f 72 20 6e 6f 74 20 61 20 74 61 62 6c  er or not a tabl
12a40 65 20 69 73 20 61 20 76 69 72 74 75 61 6c 20 74  e is a virtual t
12a50 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0a 2a  able.  This is.*
12a60 2a 20 64 6f 6e 65 20 61 73 20 61 20 6d 61 63 72  * done as a macr
12a70 6f 20 73 6f 20 74 68 61 74 20 69 74 20 77 69 6c  o so that it wil
12a80 6c 20 62 65 20 6f 70 74 69 6d 69 7a 65 64 20 6f  l be optimized o
12a90 75 74 20 77 68 65 6e 20 76 69 72 74 75 61 6c 0a  ut when virtual.
12aa0 2a 2a 20 74 61 62 6c 65 20 73 75 70 70 6f 72 74  ** table support
12ab0 20 69 73 20 6f 6d 69 74 74 65 64 20 66 72 6f 6d   is omitted from
12ac0 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23   the build..*/.#
12ad0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12ae0 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
12af0 23 20 20 64 65 66 69 6e 65 20 49 73 56 69 72 74  #  define IsVirt
12b00 75 61 6c 28 58 29 20 20 20 20 20 20 28 28 58 29  ual(X)      ((X)
12b10 2d 3e 6e 4d 6f 64 75 6c 65 41 72 67 29 0a 23 65  ->nModuleArg).#e
12b20 6c 73 65 0a 23 20 20 64 65 66 69 6e 65 20 49 73  lse.#  define Is
12b30 56 69 72 74 75 61 6c 28 58 29 20 20 20 20 20 20  Virtual(X)      
12b40 30 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  0.#endif../*.** 
12b50 4d 61 63 72 6f 73 20 74 6f 20 64 65 74 65 72 6d  Macros to determ
12b60 69 6e 65 20 69 66 20 61 20 63 6f 6c 75 6d 6e 20  ine if a column 
12b70 69 73 20 68 69 64 64 65 6e 2e 20 20 49 73 4f 72  is hidden.  IsOr
12b80 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f 6c 75  dinaryHiddenColu
12b90 6d 6e 28 29 0a 2a 2a 20 6f 6e 6c 79 20 77 6f 72  mn().** only wor
12ba0 6b 73 20 66 6f 72 20 6e 6f 6e 2d 76 69 72 74 75  ks for non-virtu
12bb0 61 6c 20 74 61 62 6c 65 73 20 28 6f 72 64 69 6e  al tables (ordin
12bc0 61 72 79 20 74 61 62 6c 65 73 20 61 6e 64 20 76  ary tables and v
12bd0 69 65 77 73 29 20 61 6e 64 20 69 73 0a 2a 2a 20  iews) and is.** 
12be0 61 6c 77 61 79 73 20 66 61 6c 73 65 20 75 6e 6c  always false unl
12bf0 65 73 73 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ess SQLITE_ENABL
12c00 45 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53  E_HIDDEN_COLUMNS
12c10 20 69 73 20 64 65 66 69 6e 65 64 2e 20 20 54 68   is defined.  Th
12c20 65 0a 2a 2a 20 49 73 48 69 64 64 65 6e 43 6f 6c  e.** IsHiddenCol
12c30 75 6d 6e 28 29 20 6d 61 63 72 6f 20 69 73 20 67  umn() macro is g
12c40 65 6e 65 72 61 6c 20 70 75 72 70 6f 73 65 2e 0a  eneral purpose..
12c50 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  */.#if defined(S
12c60 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 48 49 44  QLITE_ENABLE_HID
12c70 44 45 4e 5f 43 4f 4c 55 4d 4e 53 29 0a 23 20 20  DEN_COLUMNS).#  
12c80 64 65 66 69 6e 65 20 49 73 48 69 64 64 65 6e 43  define IsHiddenC
12c90 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20 20 20 20  olumn(X)        
12ca0 20 28 28 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73   (((X)->colFlags
12cb0 20 26 20 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45   & COLFLAG_HIDDE
12cc0 4e 29 21 3d 30 29 0a 23 20 20 64 65 66 69 6e 65  N)!=0).#  define
12cd0 20 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65   IsOrdinaryHidde
12ce0 6e 43 6f 6c 75 6d 6e 28 58 29 20 28 28 28 58 29  nColumn(X) (((X)
12cf0 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c  ->colFlags & COL
12d00 46 4c 41 47 5f 48 49 44 44 45 4e 29 21 3d 30 29  FLAG_HIDDEN)!=0)
12d10 0a 23 65 6c 69 66 20 21 64 65 66 69 6e 65 64 28  .#elif !defined(
12d20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54  SQLITE_OMIT_VIRT
12d30 55 41 4c 54 41 42 4c 45 29 0a 23 20 20 64 65 66  UALTABLE).#  def
12d40 69 6e 65 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  ine IsHiddenColu
12d50 6d 6e 28 58 29 20 20 20 20 20 20 20 20 20 28 28  mn(X)         ((
12d60 28 58 29 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  (X)->colFlags & 
12d70 43 4f 4c 46 4c 41 47 5f 48 49 44 44 45 4e 29 21  COLFLAG_HIDDEN)!
12d80 3d 30 29 0a 23 20 20 64 65 66 69 6e 65 20 49 73  =0).#  define Is
12d90 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e 43 6f  OrdinaryHiddenCo
12da0 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6c 73 65 0a  lumn(X) 0.#else.
12db0 23 20 20 64 65 66 69 6e 65 20 49 73 48 69 64 64  #  define IsHidd
12dc0 65 6e 43 6f 6c 75 6d 6e 28 58 29 20 20 20 20 20  enColumn(X)     
12dd0 20 20 20 20 30 0a 23 20 20 64 65 66 69 6e 65 20      0.#  define 
12de0 49 73 4f 72 64 69 6e 61 72 79 48 69 64 64 65 6e  IsOrdinaryHidden
12df0 43 6f 6c 75 6d 6e 28 58 29 20 30 0a 23 65 6e 64  Column(X) 0.#end
12e00 69 66 0a 0a 0a 2f 2a 20 44 6f 65 73 20 74 68 65  if.../* Does the
12e10 20 74 61 62 6c 65 20 68 61 76 65 20 61 20 72 6f   table have a ro
12e20 77 69 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 48  wid */.#define H
12e30 61 73 52 6f 77 69 64 28 58 29 20 20 20 20 20 28  asRowid(X)     (
12e40 28 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26  ((X)->tabFlags &
12e50 20 54 46 5f 57 69 74 68 6f 75 74 52 6f 77 69 64   TF_WithoutRowid
12e60 29 3d 3d 30 29 0a 23 64 65 66 69 6e 65 20 56 69  )==0).#define Vi
12e70 73 69 62 6c 65 52 6f 77 69 64 28 58 29 20 28 28  sibleRowid(X) ((
12e80 28 58 29 2d 3e 74 61 62 46 6c 61 67 73 20 26 20  (X)->tabFlags & 
12e90 54 46 5f 4e 6f 56 69 73 69 62 6c 65 52 6f 77 69  TF_NoVisibleRowi
12ea0 64 29 3d 3d 30 29 0a 0a 2f 2a 0a 2a 2a 20 45 61  d)==0)../*.** Ea
12eb0 63 68 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63  ch foreign key c
12ec0 6f 6e 73 74 72 61 69 6e 74 20 69 73 20 61 6e 20  onstraint is an 
12ed0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
12ee0 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74  following struct
12ef0 75 72 65 2e 0a 2a 2a 0a 2a 2a 20 41 20 66 6f 72  ure..**.** A for
12f00 65 69 67 6e 20 6b 65 79 20 69 73 20 61 73 73 6f  eign key is asso
12f10 63 69 61 74 65 64 20 77 69 74 68 20 74 77 6f 20  ciated with two 
12f20 74 61 62 6c 65 73 2e 20 20 54 68 65 20 22 66 72  tables.  The "fr
12f30 6f 6d 22 20 74 61 62 6c 65 20 69 73 0a 2a 2a 20  om" table is.** 
12f40 74 68 65 20 74 61 62 6c 65 20 74 68 61 74 20 63  the table that c
12f50 6f 6e 74 61 69 6e 73 20 74 68 65 20 52 45 46 45  ontains the REFE
12f60 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20 74 68  RENCES clause th
12f70 61 74 20 63 72 65 61 74 65 73 20 74 68 65 20 66  at creates the f
12f80 6f 72 65 69 67 6e 0a 2a 2a 20 6b 65 79 2e 20 20  oreign.** key.  
12f90 54 68 65 20 22 74 6f 22 20 74 61 62 6c 65 20 69  The "to" table i
12fa0 73 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  s the table that
12fb0 20 69 73 20 6e 61 6d 65 64 20 69 6e 20 74 68 65   is named in the
12fc0 20 52 45 46 45 52 45 4e 43 45 53 20 63 6c 61 75   REFERENCES clau
12fd0 73 65 2e 0a 2a 2a 20 43 6f 6e 73 69 64 65 72 20  se..** Consider 
12fe0 74 68 69 73 20 65 78 61 6d 70 6c 65 3a 0a 2a 2a  this example:.**
12ff0 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20 54  .**     CREATE T
13000 41 42 4c 45 20 65 78 31 28 0a 2a 2a 20 20 20 20  ABLE ex1(.**    
13010 20 20 20 61 20 49 4e 54 45 47 45 52 20 50 52 49     a INTEGER PRI
13020 4d 41 52 59 20 4b 45 59 2c 0a 2a 2a 20 20 20 20  MARY KEY,.**    
13030 20 20 20 62 20 49 4e 54 45 47 45 52 20 43 4f 4e     b INTEGER CON
13040 53 54 52 41 49 4e 54 20 66 6b 31 20 52 45 46 45  STRAINT fk1 REFE
13050 52 45 4e 43 45 53 20 65 78 32 28 78 29 0a 2a 2a  RENCES ex2(x).**
13060 20 20 20 20 20 29 3b 0a 2a 2a 0a 2a 2a 20 46 6f       );.**.** Fo
13070 72 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 22 66  r foreign key "f
13080 6b 31 22 2c 20 74 68 65 20 66 72 6f 6d 2d 74 61  k1", the from-ta
13090 62 6c 65 20 69 73 20 22 65 78 31 22 20 61 6e 64  ble is "ex1" and
130a0 20 74 68 65 20 74 6f 2d 74 61 62 6c 65 20 69 73   the to-table is
130b0 20 22 65 78 32 22 2e 0a 2a 2a 20 45 71 75 69 76   "ex2"..** Equiv
130c0 61 6c 65 6e 74 20 6e 61 6d 65 73 3a 0a 2a 2a 0a  alent names:.**.
130d0 2a 2a 20 20 20 20 20 66 72 6f 6d 2d 74 61 62 6c  **     from-tabl
130e0 65 20 3d 3d 20 63 68 69 6c 64 2d 74 61 62 6c 65  e == child-table
130f0 0a 2a 2a 20 20 20 20 20 20 20 74 6f 2d 74 61 62  .**       to-tab
13100 6c 65 20 3d 3d 20 70 61 72 65 6e 74 2d 74 61 62  le == parent-tab
13110 6c 65 0a 2a 2a 0a 2a 2a 20 45 61 63 68 20 52 45  le.**.** Each RE
13120 46 45 52 45 4e 43 45 53 20 63 6c 61 75 73 65 20  FERENCES clause 
13130 67 65 6e 65 72 61 74 65 73 20 61 6e 20 69 6e 73  generates an ins
13140 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c  tance of the fol
13150 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75 72 65  lowing structure
13160 0a 2a 2a 20 77 68 69 63 68 20 69 73 20 61 74 74  .** which is att
13170 61 63 68 65 64 20 74 6f 20 74 68 65 20 66 72 6f  ached to the fro
13180 6d 2d 74 61 62 6c 65 2e 20 20 54 68 65 20 74 6f  m-table.  The to
13190 2d 74 61 62 6c 65 20 6e 65 65 64 20 6e 6f 74 20  -table need not 
131a0 65 78 69 73 74 20 77 68 65 6e 0a 2a 2a 20 74 68  exist when.** th
131b0 65 20 66 72 6f 6d 2d 74 61 62 6c 65 20 69 73 20  e from-table is 
131c0 63 72 65 61 74 65 64 2e 20 20 54 68 65 20 65 78  created.  The ex
131d0 69 73 74 65 6e 63 65 20 6f 66 20 74 68 65 20 74  istence of the t
131e0 6f 2d 74 61 62 6c 65 20 69 73 20 6e 6f 74 20 63  o-table is not c
131f0 68 65 63 6b 65 64 2e 0a 2a 2a 0a 2a 2a 20 54 68  hecked..**.** Th
13200 65 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20 70 61  e list of all pa
13210 72 65 6e 74 73 20 66 6f 72 20 63 68 69 6c 64 20  rents for child 
13220 54 61 62 6c 65 20 58 20 69 73 20 68 65 6c 64 20  Table X is held 
13230 61 74 20 58 2e 70 46 4b 65 79 2e 0a 2a 2a 0a 2a  at X.pFKey..**.*
13240 2a 20 41 20 6c 69 73 74 20 6f 66 20 61 6c 6c 20  * A list of all 
13250 63 68 69 6c 64 72 65 6e 20 66 6f 72 20 61 20 74  children for a t
13260 61 62 6c 65 20 6e 61 6d 65 64 20 5a 20 28 77 68  able named Z (wh
13270 69 63 68 20 6d 69 67 68 74 20 6e 6f 74 20 65 76  ich might not ev
13280 65 6e 20 65 78 69 73 74 29 0a 2a 2a 20 69 73 20  en exist).** is 
13290 68 65 6c 64 20 69 6e 20 53 63 68 65 6d 61 2e 66  held in Schema.f
132a0 6b 65 79 48 61 73 68 20 77 69 74 68 20 61 20 68  keyHash with a h
132b0 61 73 68 20 6b 65 79 20 6f 66 20 5a 2e 0a 2a 2f  ash key of Z..*/
132c0 0a 73 74 72 75 63 74 20 46 4b 65 79 20 7b 0a 20  .struct FKey {. 
132d0 20 54 61 62 6c 65 20 2a 70 46 72 6f 6d 3b 20 20   Table *pFrom;  
132e0 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f 6e 74     /* Table cont
132f0 61 69 6e 69 6e 67 20 74 68 65 20 52 45 46 45 52  aining the REFER
13300 45 4e 43 45 53 20 63 6c 61 75 73 65 20 28 61 6b  ENCES clause (ak
13310 61 3a 20 43 68 69 6c 64 29 20 2a 2f 0a 20 20 46  a: Child) */.  F
13320 4b 65 79 20 2a 70 4e 65 78 74 46 72 6f 6d 3b 20  Key *pNextFrom; 
13330 20 2f 2a 20 4e 65 78 74 20 46 4b 65 79 20 77 69   /* Next FKey wi
13340 74 68 20 74 68 65 20 73 61 6d 65 20 69 6e 20 70  th the same in p
13350 46 72 6f 6d 2e 20 4e 65 78 74 20 70 61 72 65 6e  From. Next paren
13360 74 20 6f 66 20 70 46 72 6f 6d 20 2a 2f 0a 20 20  t of pFrom */.  
13370 63 68 61 72 20 2a 7a 54 6f 3b 20 20 20 20 20 20  char *zTo;      
13380 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 61 62    /* Name of tab
13390 6c 65 20 74 68 61 74 20 74 68 65 20 6b 65 79 20  le that the key 
133a0 70 6f 69 6e 74 73 20 74 6f 20 28 61 6b 61 3a 20  points to (aka: 
133b0 50 61 72 65 6e 74 29 20 2a 2f 0a 20 20 46 4b 65  Parent) */.  FKe
133c0 79 20 2a 70 4e 65 78 74 54 6f 3b 20 20 20 20 2f  y *pNextTo;    /
133d0 2a 20 4e 65 78 74 20 77 69 74 68 20 74 68 65 20  * Next with the 
133e0 73 61 6d 65 20 7a 54 6f 2e 20 4e 65 78 74 20 63  same zTo. Next c
133f0 68 69 6c 64 20 6f 66 20 7a 54 6f 2e 20 2a 2f 0a  hild of zTo. */.
13400 20 20 46 4b 65 79 20 2a 70 50 72 65 76 54 6f 3b    FKey *pPrevTo;
13410 20 20 20 20 2f 2a 20 50 72 65 76 69 6f 75 73 20      /* Previous 
13420 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 7a 54  with the same zT
13430 6f 20 2a 2f 0a 20 20 69 6e 74 20 6e 43 6f 6c 3b  o */.  int nCol;
13440 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
13450 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69 6e  er of columns in
13460 20 74 68 69 73 20 6b 65 79 20 2a 2f 0a 20 20 2f   this key */.  /
13470 2a 20 45 56 3a 20 52 2d 33 30 33 32 33 2d 32 31  * EV: R-30323-21
13480 39 31 37 20 2a 2f 0a 20 20 75 38 20 69 73 44 65  917 */.  u8 isDe
13490 66 65 72 72 65 64 3b 20 20 20 20 20 20 20 2f 2a  ferred;       /*
134a0 20 54 72 75 65 20 69 66 20 63 6f 6e 73 74 72 61   True if constra
134b0 69 6e 74 20 63 68 65 63 6b 69 6e 67 20 69 73 20  int checking is 
134c0 64 65 66 65 72 72 65 64 20 74 69 6c 6c 20 43 4f  deferred till CO
134d0 4d 4d 49 54 20 2a 2f 0a 20 20 75 38 20 61 41 63  MMIT */.  u8 aAc
134e0 74 69 6f 6e 5b 32 5d 3b 20 20 20 20 20 20 20 20  tion[2];        
134f0 2f 2a 20 4f 4e 20 44 45 4c 45 54 45 20 61 6e 64  /* ON DELETE and
13500 20 4f 4e 20 55 50 44 41 54 45 20 61 63 74 69 6f   ON UPDATE actio
13510 6e 73 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  ns, respectively
13520 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 61   */.  Trigger *a
13530 70 54 72 69 67 67 65 72 5b 32 5d 3b 2f 2a 20 54  pTrigger[2];/* T
13540 72 69 67 67 65 72 73 20 66 6f 72 20 61 41 63 74  riggers for aAct
13550 69 6f 6e 5b 5d 20 61 63 74 69 6f 6e 73 20 2a 2f  ion[] actions */
13560 0a 20 20 73 74 72 75 63 74 20 73 43 6f 6c 4d 61  .  struct sColMa
13570 70 20 7b 20 20 20 20 20 20 2f 2a 20 4d 61 70 70  p {      /* Mapp
13580 69 6e 67 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ing of columns i
13590 6e 20 70 46 72 6f 6d 20 74 6f 20 63 6f 6c 75 6d  n pFrom to colum
135a0 6e 73 20 69 6e 20 7a 54 6f 20 2a 2f 0a 20 20 20  ns in zTo */.   
135b0 20 69 6e 74 20 69 46 72 6f 6d 3b 20 20 20 20 20   int iFrom;     
135c0 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
135d0 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 20 70 46 72  of column in pFr
135e0 6f 6d 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  om */.    char *
135f0 7a 43 6f 6c 3b 20 20 20 20 20 20 20 20 20 20 20  zCol;           
13600 2f 2a 20 4e 61 6d 65 20 6f 66 20 63 6f 6c 75 6d  /* Name of colum
13610 6e 20 69 6e 20 7a 54 6f 2e 20 20 49 66 20 4e 55  n in zTo.  If NU
13620 4c 4c 20 75 73 65 20 50 52 49 4d 41 52 59 20 4b  LL use PRIMARY K
13630 45 59 20 2a 2f 0a 20 20 7d 20 61 43 6f 6c 5b 31  EY */.  } aCol[1
13640 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ];            /*
13650 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20 65   One entry for e
13660 61 63 68 20 6f 66 20 6e 43 6f 6c 20 63 6f 6c 75  ach of nCol colu
13670 6d 6e 73 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a  mns */.};../*.**
13680 20 53 51 4c 69 74 65 20 73 75 70 70 6f 72 74 73   SQLite supports
13690 20 6d 61 6e 79 20 64 69 66 66 65 72 65 6e 74 20   many different 
136a0 77 61 79 73 20 74 6f 20 72 65 73 6f 6c 76 65 20  ways to resolve 
136b0 61 20 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20  a constraint.** 
136c0 65 72 72 6f 72 2e 20 20 52 4f 4c 4c 42 41 43 4b  error.  ROLLBACK
136d0 20 70 72 6f 63 65 73 73 69 6e 67 20 6d 65 61 6e   processing mean
136e0 73 20 74 68 61 74 20 61 20 63 6f 6e 73 74 72 61  s that a constra
136f0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 0a 2a 2a  int violation.**
13700 20 63 61 75 73 65 73 20 74 68 65 20 6f 70 65 72   causes the oper
13710 61 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73  ation in process
13720 20 74 6f 20 66 61 69 6c 20 61 6e 64 20 66 6f 72   to fail and for
13730 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 72 61   the current tra
13740 6e 73 61 63 74 69 6f 6e 0a 2a 2a 20 74 6f 20 62  nsaction.** to b
13750 65 20 72 6f 6c 6c 65 64 20 62 61 63 6b 2e 20 20  e rolled back.  
13760 41 42 4f 52 54 20 70 72 6f 63 65 73 73 69 6e 67  ABORT processing
13770 20 6d 65 61 6e 73 20 74 68 65 20 6f 70 65 72 61   means the opera
13780 74 69 6f 6e 20 69 6e 20 70 72 6f 63 65 73 73 0a  tion in process.
13790 2a 2a 20 66 61 69 6c 73 20 61 6e 64 20 61 6e 79  ** fails and any
137a0 20 70 72 69 6f 72 20 63 68 61 6e 67 65 73 20 66   prior changes f
137b0 72 6f 6d 20 74 68 61 74 20 6f 6e 65 20 6f 70 65  rom that one ope
137c0 72 61 74 69 6f 6e 20 61 72 65 20 62 61 63 6b 65  ration are backe
137d0 64 20 6f 75 74 2c 0a 2a 2a 20 62 75 74 20 74 68  d out,.** but th
137e0 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73  e transaction is
137f0 20 6e 6f 74 20 72 6f 6c 6c 65 64 20 62 61 63 6b   not rolled back
13800 2e 20 20 46 41 49 4c 20 70 72 6f 63 65 73 73 69  .  FAIL processi
13810 6e 67 20 6d 65 61 6e 73 20 74 68 61 74 0a 2a 2a  ng means that.**
13820 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 69   the operation i
13830 6e 20 70 72 6f 67 72 65 73 73 20 73 74 6f 70 73  n progress stops
13840 20 61 6e 64 20 72 65 74 75 72 6e 73 20 61 6e 20   and returns an 
13850 65 72 72 6f 72 20 63 6f 64 65 2e 20 20 42 75 74  error code.  But
13860 20 70 72 69 6f 72 0a 2a 2a 20 63 68 61 6e 67 65   prior.** change
13870 73 20 64 75 65 20 74 6f 20 74 68 65 20 73 61 6d  s due to the sam
13880 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 72 65 20  e operation are 
13890 6e 6f 74 20 62 61 63 6b 65 64 20 6f 75 74 20 61  not backed out a
138a0 6e 64 20 6e 6f 20 72 6f 6c 6c 62 61 63 6b 0a 2a  nd no rollback.*
138b0 2a 20 6f 63 63 75 72 73 2e 20 20 49 47 4e 4f 52  * occurs.  IGNOR
138c0 45 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68 65  E means that the
138d0 20 70 61 72 74 69 63 75 6c 61 72 20 72 6f 77 20   particular row 
138e0 74 68 61 74 20 63 61 75 73 65 64 20 74 68 65 20  that caused the 
138f0 63 6f 6e 73 74 72 61 69 6e 74 0a 2a 2a 20 65 72  constraint.** er
13900 72 6f 72 20 69 73 20 6e 6f 74 20 69 6e 73 65 72  ror is not inser
13910 74 65 64 20 6f 72 20 75 70 64 61 74 65 64 2e 20  ted or updated. 
13920 20 50 72 6f 63 65 73 73 69 6e 67 20 63 6f 6e 74   Processing cont
13930 69 6e 75 65 73 20 61 6e 64 20 6e 6f 20 65 72 72  inues and no err
13940 6f 72 0a 2a 2a 20 69 73 20 72 65 74 75 72 6e 65  or.** is returne
13950 64 2e 20 20 52 45 50 4c 41 43 45 20 6d 65 61 6e  d.  REPLACE mean
13960 73 20 74 68 61 74 20 70 72 65 65 78 69 73 74 69  s that preexisti
13970 6e 67 20 64 61 74 61 62 61 73 65 20 72 6f 77 73  ng database rows
13980 20 74 68 61 74 20 63 61 75 73 65 64 0a 2a 2a 20   that caused.** 
13990 61 20 55 4e 49 51 55 45 20 63 6f 6e 73 74 72 61  a UNIQUE constra
139a0 69 6e 74 20 76 69 6f 6c 61 74 69 6f 6e 20 61 72  int violation ar
139b0 65 20 72 65 6d 6f 76 65 64 20 73 6f 20 74 68 61  e removed so tha
139c0 74 20 74 68 65 20 6e 65 77 20 69 6e 73 65 72 74  t the new insert
139d0 20 6f 72 0a 2a 2a 20 75 70 64 61 74 65 20 63 61   or.** update ca
139e0 6e 20 70 72 6f 63 65 65 64 2e 20 20 50 72 6f 63  n proceed.  Proc
139f0 65 73 73 69 6e 67 20 63 6f 6e 74 69 6e 75 65 73  essing continues
13a00 20 61 6e 64 20 6e 6f 20 65 72 72 6f 72 20 69 73   and no error is
13a10 20 72 65 70 6f 72 74 65 64 2e 0a 2a 2a 0a 2a 2a   reported..**.**
13a20 20 52 45 53 54 52 49 43 54 2c 20 53 45 54 4e 55   RESTRICT, SETNU
13a30 4c 4c 2c 20 61 6e 64 20 43 41 53 43 41 44 45 20  LL, and CASCADE 
13a40 61 63 74 69 6f 6e 73 20 61 70 70 6c 79 20 6f 6e  actions apply on
13a50 6c 79 20 74 6f 20 66 6f 72 65 69 67 6e 20 6b 65  ly to foreign ke
13a60 79 73 2e 0a 2a 2a 20 52 45 53 54 52 49 43 54 20  ys..** RESTRICT 
13a70 69 73 20 74 68 65 20 73 61 6d 65 20 61 73 20 41  is the same as A
13a80 42 4f 52 54 20 66 6f 72 20 49 4d 4d 45 44 49 41  BORT for IMMEDIA
13a90 54 45 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20  TE foreign keys 
13aa0 61 6e 64 20 74 68 65 0a 2a 2a 20 73 61 6d 65 20  and the.** same 
13ab0 61 73 20 52 4f 4c 4c 42 41 43 4b 20 66 6f 72 20  as ROLLBACK for 
13ac0 44 45 46 45 52 52 45 44 20 6b 65 79 73 2e 20 20  DEFERRED keys.  
13ad0 53 45 54 4e 55 4c 4c 20 6d 65 61 6e 73 20 74 68  SETNULL means th
13ae0 61 74 20 74 68 65 20 66 6f 72 65 69 67 6e 0a 2a  at the foreign.*
13af0 2a 20 6b 65 79 20 69 73 20 73 65 74 20 74 6f 20  * key is set to 
13b00 4e 55 4c 4c 2e 20 20 43 41 53 43 41 44 45 20 6d  NULL.  CASCADE m
13b10 65 61 6e 73 20 74 68 61 74 20 61 20 44 45 4c 45  eans that a DELE
13b20 54 45 20 6f 72 20 55 50 44 41 54 45 20 6f 66 20  TE or UPDATE of 
13b30 74 68 65 0a 2a 2a 20 72 65 66 65 72 65 6e 63 65  the.** reference
13b40 64 20 74 61 62 6c 65 20 72 6f 77 20 69 73 20 70  d table row is p
13b50 72 6f 70 61 67 61 74 65 64 20 69 6e 74 6f 20 74  ropagated into t
13b60 68 65 20 72 6f 77 20 74 68 61 74 20 68 6f 6c 64  he row that hold
13b70 73 20 74 68 65 0a 2a 2a 20 66 6f 72 65 69 67 6e  s the.** foreign
13b80 20 6b 65 79 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20   key..**.** The 
13b90 66 6f 6c 6c 6f 77 69 6e 67 20 73 79 6d 62 6f 6c  following symbol
13ba0 69 63 20 76 61 6c 75 65 73 20 61 72 65 20 75 73  ic values are us
13bb0 65 64 20 74 6f 20 72 65 63 6f 72 64 20 77 68 69  ed to record whi
13bc0 63 68 20 74 79 70 65 0a 2a 2a 20 6f 66 20 61 63  ch type.** of ac
13bd0 74 69 6f 6e 20 74 6f 20 74 61 6b 65 2e 0a 2a 2f  tion to take..*/
13be0 0a 23 64 65 66 69 6e 65 20 4f 45 5f 4e 6f 6e 65  .#define OE_None
13bf0 20 20 20 20 20 30 20 20 20 2f 2a 20 54 68 65 72       0   /* Ther
13c00 65 20 69 73 20 6e 6f 20 63 6f 6e 73 74 72 61 69  e is no constrai
13c10 6e 74 20 74 6f 20 63 68 65 63 6b 20 2a 2f 0a 23  nt to check */.#
13c20 64 65 66 69 6e 65 20 4f 45 5f 52 6f 6c 6c 62 61  define OE_Rollba
13c30 63 6b 20 31 20 20 20 2f 2a 20 46 61 69 6c 20 74  ck 1   /* Fail t
13c40 68 65 20 6f 70 65 72 61 74 69 6f 6e 20 61 6e 64  he operation and
13c50 20 72 6f 6c 6c 62 61 63 6b 20 74 68 65 20 74 72   rollback the tr
13c60 61 6e 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65  ansaction */.#de
13c70 66 69 6e 65 20 4f 45 5f 41 62 6f 72 74 20 20 20  fine OE_Abort   
13c80 20 32 20 20 20 2f 2a 20 42 61 63 6b 20 6f 75 74   2   /* Back out
13c90 20 63 68 61 6e 67 65 73 20 62 75 74 20 64 6f 20   changes but do 
13ca0 6e 6f 20 72 6f 6c 6c 62 61 63 6b 20 74 72 61 6e  no rollback tran
13cb0 73 61 63 74 69 6f 6e 20 2a 2f 0a 23 64 65 66 69  saction */.#defi
13cc0 6e 65 20 4f 45 5f 46 61 69 6c 20 20 20 20 20 33  ne OE_Fail     3
13cd0 20 20 20 2f 2a 20 53 74 6f 70 20 74 68 65 20 6f     /* Stop the o
13ce0 70 65 72 61 74 69 6f 6e 20 62 75 74 20 6c 65 61  peration but lea
13cf0 76 65 20 61 6c 6c 20 70 72 69 6f 72 20 63 68 61  ve all prior cha
13d00 6e 67 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20  nges */.#define 
13d10 4f 45 5f 49 67 6e 6f 72 65 20 20 20 34 20 20 20  OE_Ignore   4   
13d20 2f 2a 20 49 67 6e 6f 72 65 20 74 68 65 20 65 72  /* Ignore the er
13d30 72 6f 72 2e 20 44 6f 20 6e 6f 74 20 64 6f 20 74  ror. Do not do t
13d40 68 65 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44  he INSERT or UPD
13d50 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  ATE */.#define O
13d60 45 5f 52 65 70 6c 61 63 65 20 20 35 20 20 20 2f  E_Replace  5   /
13d70 2a 20 44 65 6c 65 74 65 20 65 78 69 73 74 69 6e  * Delete existin
13d80 67 20 72 65 63 6f 72 64 2c 20 74 68 65 6e 20 64  g record, then d
13d90 6f 20 49 4e 53 45 52 54 20 6f 72 20 55 50 44 41  o INSERT or UPDA
13da0 54 45 20 2a 2f 0a 0a 23 64 65 66 69 6e 65 20 4f  TE */..#define O
13db0 45 5f 52 65 73 74 72 69 63 74 20 36 20 20 20 2f  E_Restrict 6   /
13dc0 2a 20 4f 45 5f 41 62 6f 72 74 20 66 6f 72 20 49  * OE_Abort for I
13dd0 4d 4d 45 44 49 41 54 45 2c 20 4f 45 5f 52 6f 6c  MMEDIATE, OE_Rol
13de0 6c 62 61 63 6b 20 66 6f 72 20 44 45 46 45 52 52  lback for DEFERR
13df0 45 44 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  ED */.#define OE
13e00 5f 53 65 74 4e 75 6c 6c 20 20 37 20 20 20 2f 2a  _SetNull  7   /*
13e10 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
13e20 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 4e 55   key value to NU
13e30 4c 4c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 45  LL */.#define OE
13e40 5f 53 65 74 44 66 6c 74 20 20 38 20 20 20 2f 2a  _SetDflt  8   /*
13e50 20 53 65 74 20 74 68 65 20 66 6f 72 65 69 67 6e   Set the foreign
13e60 20 6b 65 79 20 76 61 6c 75 65 20 74 6f 20 69 74   key value to it
13e70 73 20 64 65 66 61 75 6c 74 20 2a 2f 0a 23 64 65  s default */.#de
13e80 66 69 6e 65 20 4f 45 5f 43 61 73 63 61 64 65 20  fine OE_Cascade 
13e90 20 39 20 20 20 2f 2a 20 43 61 73 63 61 64 65 20   9   /* Cascade 
13ea0 74 68 65 20 63 68 61 6e 67 65 73 20 2a 2f 0a 0a  the changes */..
13eb0 23 64 65 66 69 6e 65 20 4f 45 5f 44 65 66 61 75  #define OE_Defau
13ec0 6c 74 20 20 31 30 20 20 2f 2a 20 44 6f 20 77 68  lt  10  /* Do wh
13ed0 61 74 65 76 65 72 20 74 68 65 20 64 65 66 61 75  atever the defau
13ee0 6c 74 20 61 63 74 69 6f 6e 20 69 73 20 2a 2f 0a  lt action is */.
13ef0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
13f00 6e 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f  nce of the follo
13f10 77 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 69  wing structure i
13f20 73 20 70 61 73 73 65 64 20 61 73 20 74 68 65 20  s passed as the 
13f30 66 69 72 73 74 0a 2a 2a 20 61 72 67 75 6d 65 6e  first.** argumen
13f40 74 20 74 6f 20 73 71 6c 69 74 65 33 56 64 62 65  t to sqlite3Vdbe
13f50 4b 65 79 43 6f 6d 70 61 72 65 20 61 6e 64 20 69  KeyCompare and i
13f60 73 20 75 73 65 64 20 74 6f 20 63 6f 6e 74 72 6f  s used to contro
13f70 6c 20 74 68 65 0a 2a 2a 20 63 6f 6d 70 61 72 69  l the.** compari
13f80 73 6f 6e 20 6f 66 20 74 68 65 20 74 77 6f 20 69  son of the two i
13f90 6e 64 65 78 20 6b 65 79 73 2e 0a 2a 2a 0a 2a 2a  ndex keys..**.**
13fa0 20 4e 6f 74 65 20 74 68 61 74 20 61 53 6f 72 74   Note that aSort
13fb0 4f 72 64 65 72 5b 5d 20 61 6e 64 20 61 43 6f 6c  Order[] and aCol
13fc0 6c 5b 5d 20 68 61 76 65 20 6e 46 69 65 6c 64 2b  l[] have nField+
13fd0 31 20 73 6c 6f 74 73 2e 20 20 54 68 65 72 65 0a  1 slots.  There.
13fe0 2a 2a 20 61 72 65 20 6e 46 69 65 6c 64 20 73 6c  ** are nField sl
13ff0 6f 74 73 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  ots for the colu
14000 6d 6e 73 20 6f 66 20 61 6e 20 69 6e 64 65 78 20  mns of an index 
14010 74 68 65 6e 20 6f 6e 65 20 65 78 74 72 61 20 73  then one extra s
14020 6c 6f 74 0a 2a 2a 20 66 6f 72 20 74 68 65 20 72  lot.** for the r
14030 6f 77 69 64 20 61 74 20 74 68 65 20 65 6e 64 2e  owid at the end.
14040 0a 2a 2f 0a 73 74 72 75 63 74 20 4b 65 79 49 6e  .*/.struct KeyIn
14050 66 6f 20 7b 0a 20 20 75 33 32 20 6e 52 65 66 3b  fo {.  u32 nRef;
14060 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75             /* Nu
14070 6d 62 65 72 20 6f 66 20 72 65 66 65 72 65 6e 63  mber of referenc
14080 65 73 20 74 6f 20 74 68 69 73 20 4b 65 79 49 6e  es to this KeyIn
14090 66 6f 20 6f 62 6a 65 63 74 20 2a 2f 0a 20 20 75  fo object */.  u
140a0 38 20 65 6e 63 3b 20 20 20 20 20 20 20 20 20 20  8 enc;          
140b0 20 20 20 2f 2a 20 54 65 78 74 20 65 6e 63 6f 64     /* Text encod
140c0 69 6e 67 20 2d 20 6f 6e 65 20 6f 66 20 74 68 65  ing - one of the
140d0 20 53 51 4c 49 54 45 5f 55 54 46 2a 20 76 61 6c   SQLITE_UTF* val
140e0 75 65 73 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69  ues */.  u16 nFi
140f0 65 6c 64 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  eld;         /* 
14100 4e 75 6d 62 65 72 20 6f 66 20 6b 65 79 20 63 6f  Number of key co
14110 6c 75 6d 6e 73 20 69 6e 20 74 68 65 20 69 6e 64  lumns in the ind
14120 65 78 20 2a 2f 0a 20 20 75 31 36 20 6e 58 46 69  ex */.  u16 nXFi
14130 65 6c 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e  eld;        /* N
14140 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73  umber of columns
14150 20 62 65 79 6f 6e 64 20 74 68 65 20 6b 65 79 20   beyond the key 
14160 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 73 71 6c  columns */.  sql
14170 69 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20  ite3 *db;       
14180 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65   /* The database
14190 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20   connection */. 
141a0 20 75 38 20 2a 61 53 6f 72 74 4f 72 64 65 72 3b   u8 *aSortOrder;
141b0 20 20 20 20 20 2f 2a 20 53 6f 72 74 20 6f 72 64       /* Sort ord
141c0 65 72 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  er for each colu
141d0 6d 6e 2e 20 2a 2f 0a 20 20 43 6f 6c 6c 53 65 71  mn. */.  CollSeq
141e0 20 2a 61 43 6f 6c 6c 5b 31 5d 3b 20 20 2f 2a 20   *aColl[1];  /* 
141f0 43 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  Collating sequen
14200 63 65 20 66 6f 72 20 65 61 63 68 20 74 65 72 6d  ce for each term
14210 20 6f 66 20 74 68 65 20 6b 65 79 20 2a 2f 0a 7d   of the key */.}
14220 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6f 62  ;../*.** This ob
14230 6a 65 63 74 20 68 6f 6c 64 73 20 61 20 72 65 63  ject holds a rec
14240 6f 72 64 20 77 68 69 63 68 20 68 61 73 20 62 65  ord which has be
14250 65 6e 20 70 61 72 73 65 64 20 6f 75 74 20 69 6e  en parsed out in
14260 74 6f 20 69 6e 64 69 76 69 64 75 61 6c 0a 2a 2a  to individual.**
14270 20 66 69 65 6c 64 73 2c 20 66 6f 72 20 74 68 65   fields, for the
14280 20 70 75 72 70 6f 73 65 73 20 6f 66 20 64 6f 69   purposes of doi
14290 6e 67 20 61 20 63 6f 6d 70 61 72 69 73 6f 6e 2e  ng a comparison.
142a0 0a 2a 2a 0a 2a 2a 20 41 20 72 65 63 6f 72 64 20  .**.** A record 
142b0 69 73 20 61 6e 20 6f 62 6a 65 63 74 20 74 68 61  is an object tha
142c0 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f  t contains one o
142d0 72 20 6d 6f 72 65 20 66 69 65 6c 64 73 20 6f 66  r more fields of
142e0 20 64 61 74 61 2e 0a 2a 2a 20 52 65 63 6f 72 64   data..** Record
142f0 73 20 61 72 65 20 75 73 65 64 20 74 6f 20 73 74  s are used to st
14300 6f 72 65 20 74 68 65 20 63 6f 6e 74 65 6e 74 20  ore the content 
14310 6f 66 20 61 20 74 61 62 6c 65 20 72 6f 77 20 61  of a table row a
14320 6e 64 20 74 6f 20 73 74 6f 72 65 0a 2a 2a 20 74  nd to store.** t
14330 68 65 20 6b 65 79 20 6f 66 20 61 6e 20 69 6e 64  he key of an ind
14340 65 78 2e 20 20 41 20 62 6c 6f 62 20 65 6e 63 6f  ex.  A blob enco
14350 64 69 6e 67 20 6f 66 20 61 20 72 65 63 6f 72 64  ding of a record
14360 20 69 73 20 63 72 65 61 74 65 64 20 62 79 0a 2a   is created by.*
14370 2a 20 74 68 65 20 4f 50 5f 4d 61 6b 65 52 65 63  * the OP_MakeRec
14380 6f 72 64 20 6f 70 63 6f 64 65 20 6f 66 20 74 68  ord opcode of th
14390 65 20 56 44 42 45 20 61 6e 64 20 69 73 20 64 69  e VDBE and is di
143a0 73 61 73 73 65 6d 62 6c 65 64 20 62 79 20 74 68  sassembled by th
143b0 65 0a 2a 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 20 6f  e.** OP_Column o
143c0 70 63 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20 41 6e 20  pcode..**.** An 
143d0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
143e0 20 6f 62 6a 65 63 74 20 73 65 72 76 65 73 20 61   object serves a
143f0 73 20 61 20 22 6b 65 79 22 20 66 6f 72 20 64 6f  s a "key" for do
14400 69 6e 67 20 61 20 73 65 61 72 63 68 20 6f 6e 0a  ing a search on.
14410 2a 2a 20 61 6e 20 69 6e 64 65 78 20 62 2b 74 72  ** an index b+tr
14420 65 65 2e 20 54 68 65 20 67 6f 61 6c 20 6f 66 20  ee. The goal of 
14430 74 68 65 20 73 65 61 72 63 68 20 69 73 20 74 6f  the search is to
14440 20 66 69 6e 64 20 74 68 65 20 65 6e 74 72 79 20   find the entry 
14450 74 68 61 74 0a 2a 2a 20 69 73 20 63 6c 6f 73 65  that.** is close
14460 64 20 74 6f 20 74 68 65 20 6b 65 79 20 64 65 73  d to the key des
14470 63 72 69 62 65 64 20 62 79 20 74 68 69 73 20 6f  cribed by this o
14480 62 6a 65 63 74 2e 20 20 54 68 69 73 20 6f 62 6a  bject.  This obj
14490 65 63 74 20 6d 69 67 68 74 20 68 6f 6c 64 0a 2a  ect might hold.*
144a0 2a 20 6a 75 73 74 20 61 20 70 72 65 66 69 78 20  * just a prefix 
144b0 6f 66 20 74 68 65 20 6b 65 79 2e 20 20 54 68 65  of the key.  The
144c0 20 6e 75 6d 62 65 72 20 6f 66 20 66 69 65 6c 64   number of field
144d0 73 20 69 73 20 67 69 76 65 6e 20 62 79 0a 2a 2a  s is given by.**
144e0 20 70 4b 65 79 49 6e 66 6f 2d 3e 6e 46 69 65 6c   pKeyInfo->nFiel
144f0 64 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 72 31 20  d..**.** The r1 
14500 61 6e 64 20 72 32 20 66 69 65 6c 64 73 20 61 72  and r2 fields ar
14510 65 20 74 68 65 20 76 61 6c 75 65 73 20 74 6f 20  e the values to 
14520 72 65 74 75 72 6e 20 69 66 20 74 68 69 73 20 6b  return if this k
14530 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 0a  ey is less than.
14540 2a 2a 20 6f 72 20 67 72 65 61 74 65 72 20 74 68  ** or greater th
14550 61 6e 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20  an a key in the 
14560 62 74 72 65 65 2c 20 72 65 73 70 65 63 74 69 76  btree, respectiv
14570 65 6c 79 2e 20 20 54 68 65 73 65 20 61 72 65 20  ely.  These are 
14580 6e 6f 72 6d 61 6c 6c 79 0a 2a 2a 20 2d 31 20 61  normally.** -1 a
14590 6e 64 20 2b 31 20 72 65 73 70 65 63 74 69 76 65  nd +1 respective
145a0 6c 79 2c 20 62 75 74 20 6d 69 67 68 74 20 62 65  ly, but might be
145b0 20 69 6e 76 65 72 74 65 64 20 74 6f 20 2b 31 20   inverted to +1 
145c0 61 6e 64 20 2d 31 20 69 66 20 74 68 65 20 62 2d  and -1 if the b-
145d0 74 72 65 65 0a 2a 2a 20 69 73 20 69 6e 20 44 45  tree.** is in DE
145e0 53 43 20 6f 72 64 65 72 2e 0a 2a 2a 0a 2a 2a 20  SC order..**.** 
145f0 54 68 65 20 6b 65 79 20 63 6f 6d 70 61 72 69 73  The key comparis
14600 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20 61 63 74  on functions act
14610 75 61 6c 6c 79 20 72 65 74 75 72 6e 20 64 65 66  ually return def
14620 61 75 6c 74 5f 72 63 20 77 68 65 6e 20 74 68 65  ault_rc when the
14630 79 20 66 69 6e 64 0a 2a 2a 20 61 6e 20 65 71 75  y find.** an equ
14640 61 6c 73 20 63 6f 6d 70 61 72 69 73 6f 6e 2e 20  als comparison. 
14650 20 64 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20   default_rc can 
14660 62 65 20 2d 31 2c 20 30 2c 20 6f 72 20 2b 31 2e  be -1, 0, or +1.
14670 20 20 49 66 20 74 68 65 72 65 20 61 72 65 0a 2a    If there are.*
14680 2a 20 6d 75 6c 74 69 70 6c 65 20 65 6e 74 72 69  * multiple entri
14690 65 73 20 69 6e 20 74 68 65 20 62 2d 74 72 65 65  es in the b-tree
146a0 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 6b   with the same k
146b0 65 79 20 28 77 68 65 6e 20 6f 6e 6c 79 20 6c 6f  ey (when only lo
146c0 6f 6b 69 6e 67 0a 2a 2a 20 61 74 20 74 68 65 20  oking.** at the 
146d0 66 69 72 73 74 20 70 4b 65 79 49 6e 66 6f 2d 3e  first pKeyInfo->
146e0 6e 46 69 65 6c 64 73 2c 29 20 74 68 65 6e 20 64  nFields,) then d
146f0 65 66 61 75 6c 74 5f 72 63 20 63 61 6e 20 62 65  efault_rc can be
14700 20 73 65 74 20 74 6f 20 2d 31 20 74 6f 0a 2a 2a   set to -1 to.**
14710 20 63 61 75 73 65 20 74 68 65 20 73 65 61 72 63   cause the searc
14720 68 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6c 61  h to find the la
14730 73 74 20 6d 61 74 63 68 2c 20 6f 72 20 2b 31 20  st match, or +1 
14740 74 6f 20 63 61 75 73 65 20 74 68 65 20 73 65 61  to cause the sea
14750 72 63 68 20 74 6f 0a 2a 2a 20 66 69 6e 64 20 74  rch to.** find t
14760 68 65 20 66 69 72 73 74 20 6d 61 74 63 68 2e 0a  he first match..
14770 2a 2a 0a 2a 2a 20 54 68 65 20 6b 65 79 20 63 6f  **.** The key co
14780 6d 70 61 72 69 73 6f 6e 20 66 75 6e 63 74 69 6f  mparison functio
14790 6e 73 20 77 69 6c 6c 20 73 65 74 20 65 71 53 65  ns will set eqSe
147a0 65 6e 20 74 6f 20 74 72 75 65 20 69 66 20 74 68  en to true if th
147b0 65 79 20 65 76 65 72 0a 2a 2a 20 67 65 74 20 61  ey ever.** get a
147c0 6e 64 20 65 71 75 61 6c 20 72 65 73 75 6c 74 73  nd equal results
147d0 20 77 68 65 6e 20 63 6f 6d 70 61 72 69 6e 67 20   when comparing 
147e0 74 68 69 73 20 73 74 72 75 63 74 75 72 65 20 74  this structure t
147f0 6f 20 61 20 62 2d 74 72 65 65 20 72 65 63 6f 72  o a b-tree recor
14800 64 2e 0a 2a 2a 20 57 68 65 6e 20 64 65 66 61 75  d..** When defau
14810 6c 74 5f 72 63 21 3d 30 2c 20 74 68 65 20 73 65  lt_rc!=0, the se
14820 61 72 63 68 20 6d 69 67 68 74 20 65 6e 64 20 75  arch might end u
14830 70 20 6f 6e 20 74 68 65 20 72 65 63 6f 72 64 20  p on the record 
14840 69 6d 6d 65 64 69 61 74 65 6c 79 0a 2a 2a 20 62  immediately.** b
14850 65 66 6f 72 65 20 74 68 65 20 66 69 72 73 74 20  efore the first 
14860 6d 61 74 63 68 20 6f 72 20 69 6d 6d 65 64 69 61  match or immedia
14870 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20 6c  tely after the l
14880 61 73 74 20 6d 61 74 63 68 2e 20 20 54 68 65 0a  ast match.  The.
14890 2a 2a 20 65 71 53 65 65 6e 20 66 69 65 6c 64 20  ** eqSeen field 
148a0 77 69 6c 6c 20 69 6e 64 69 63 61 74 65 20 77 68  will indicate wh
148b0 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 6e 20  ether or not an 
148c0 65 78 61 63 74 20 6d 61 74 63 68 20 65 78 69 73  exact match exis
148d0 74 73 20 69 6e 20 74 68 65 0a 2a 2a 20 62 2d 74  ts in the.** b-t
148e0 72 65 65 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 55  ree..*/.struct U
148f0 6e 70 61 63 6b 65 64 52 65 63 6f 72 64 20 7b 0a  npackedRecord {.
14900 20 20 4b 65 79 49 6e 66 6f 20 2a 70 4b 65 79 49    KeyInfo *pKeyI
14910 6e 66 6f 3b 20 20 2f 2a 20 43 6f 6c 6c 61 74 69  nfo;  /* Collati
14920 6f 6e 20 61 6e 64 20 73 6f 72 74 2d 6f 72 64 65  on and sort-orde
14930 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 2a 2f  r information */
14940 0a 20 20 4d 65 6d 20 2a 61 4d 65 6d 3b 20 20 20  .  Mem *aMem;   
14950 20 20 20 20 20 20 20 2f 2a 20 56 61 6c 75 65 73         /* Values
14960 20 2a 2f 0a 20 20 75 31 36 20 6e 46 69 65 6c 64   */.  u16 nField
14970 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
14980 62 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 69  ber of entries i
14990 6e 20 61 70 4d 65 6d 5b 5d 20 2a 2f 0a 20 20 69  n apMem[] */.  i
149a0 38 20 64 65 66 61 75 6c 74 5f 72 63 3b 20 20 20  8 default_rc;   
149b0 20 20 20 2f 2a 20 43 6f 6d 70 61 72 69 73 6f 6e     /* Comparison
149c0 20 72 65 73 75 6c 74 20 69 66 20 6b 65 79 73 20   result if keys 
149d0 61 72 65 20 65 71 75 61 6c 20 2a 2f 0a 20 20 75  are equal */.  u
149e0 38 20 65 72 72 43 6f 64 65 3b 20 20 20 20 20 20  8 errCode;      
149f0 20 20 20 2f 2a 20 45 72 72 6f 72 20 64 65 74 65     /* Error dete
14a00 63 74 65 64 20 62 79 20 78 52 65 63 6f 72 64 43  cted by xRecordC
14a10 6f 6d 70 61 72 65 20 28 43 4f 52 52 55 50 54 20  ompare (CORRUPT 
14a20 6f 72 20 4e 4f 4d 45 4d 29 20 2a 2f 0a 20 20 69  or NOMEM) */.  i
14a30 38 20 72 31 3b 20 20 20 20 20 20 20 20 20 20 20  8 r1;           
14a40 20 20 20 2f 2a 20 56 61 6c 75 65 20 74 6f 20 72     /* Value to r
14a50 65 74 75 72 6e 20 69 66 20 28 6c 68 73 20 3e 20  eturn if (lhs > 
14a60 72 68 73 29 20 2a 2f 0a 20 20 69 38 20 72 32 3b  rhs) */.  i8 r2;
14a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
14a80 20 56 61 6c 75 65 20 74 6f 20 72 65 74 75 72 6e   Value to return
14a90 20 69 66 20 28 72 68 73 20 3c 20 6c 68 73 29 20   if (rhs < lhs) 
14aa0 2a 2f 0a 20 20 75 38 20 65 71 53 65 65 6e 3b 20  */.  u8 eqSeen; 
14ab0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
14ac0 20 69 66 20 61 6e 20 65 71 75 61 6c 69 74 79 20   if an equality 
14ad0 63 6f 6d 70 61 72 69 73 6f 6e 20 68 61 73 20 62  comparison has b
14ae0 65 65 6e 20 73 65 65 6e 20 2a 2f 0a 7d 3b 0a 0a  een seen */.};..
14af0 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20 53 51 4c 20  ./*.** Each SQL 
14b00 69 6e 64 65 78 20 69 73 20 72 65 70 72 65 73 65  index is represe
14b10 6e 74 65 64 20 69 6e 20 6d 65 6d 6f 72 79 20 62  nted in memory b
14b20 79 20 61 6e 0a 2a 2a 20 69 6e 73 74 61 6e 63 65  y an.** instance
14b30 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
14b40 67 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  g structure..**.
14b50 2a 2a 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  ** The columns o
14b60 66 20 74 68 65 20 74 61 62 6c 65 20 74 68 61 74  f the table that
14b70 20 61 72 65 20 74 6f 20 62 65 20 69 6e 64 65 78   are to be index
14b80 65 64 20 61 72 65 20 64 65 73 63 72 69 62 65 64  ed are described
14b90 0a 2a 2a 20 62 79 20 74 68 65 20 61 69 43 6f 6c  .** by the aiCol
14ba0 75 6d 6e 5b 5d 20 66 69 65 6c 64 20 6f 66 20 74  umn[] field of t
14bb0 68 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20  his structure.  
14bc0 46 6f 72 20 65 78 61 6d 70 6c 65 2c 20 73 75 70  For example, sup
14bd0 70 6f 73 65 0a 2a 2a 20 77 65 20 68 61 76 65 20  pose.** we have 
14be0 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74 61  the following ta
14bf0 62 6c 65 20 61 6e 64 20 69 6e 64 65 78 3a 0a 2a  ble and index:.*
14c00 2a 0a 2a 2a 20 20 20 20 20 43 52 45 41 54 45 20  *.**     CREATE 
14c10 54 41 42 4c 45 20 45 78 31 28 63 31 20 69 6e 74  TABLE Ex1(c1 int
14c20 2c 20 63 32 20 69 6e 74 2c 20 63 33 20 74 65 78  , c2 int, c3 tex
14c30 74 29 3b 0a 2a 2a 20 20 20 20 20 43 52 45 41 54  t);.**     CREAT
14c40 45 20 49 4e 44 45 58 20 45 78 32 20 4f 4e 20 45  E INDEX Ex2 ON E
14c50 78 31 28 63 33 2c 63 31 29 3b 0a 2a 2a 0a 2a 2a  x1(c3,c1);.**.**
14c60 20 49 6e 20 74 68 65 20 54 61 62 6c 65 20 73 74   In the Table st
14c70 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62 69  ructure describi
14c80 6e 67 20 45 78 31 2c 20 6e 43 6f 6c 3d 3d 33 20  ng Ex1, nCol==3 
14c90 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72  because there ar
14ca0 65 0a 2a 2a 20 74 68 72 65 65 20 63 6f 6c 75 6d  e.** three colum
14cb0 6e 73 20 69 6e 20 74 68 65 20 74 61 62 6c 65 2e  ns in the table.
14cc0 20 20 49 6e 20 74 68 65 20 49 6e 64 65 78 20 73    In the Index s
14cd0 74 72 75 63 74 75 72 65 20 64 65 73 63 72 69 62  tructure describ
14ce0 69 6e 67 0a 2a 2a 20 45 78 32 2c 20 6e 43 6f 6c  ing.** Ex2, nCol
14cf0 75 6d 6e 3d 3d 32 20 73 69 6e 63 65 20 32 20 6f  umn==2 since 2 o
14d00 66 20 74 68 65 20 33 20 63 6f 6c 75 6d 6e 73 20  f the 3 columns 
14d10 6f 66 20 45 78 31 20 61 72 65 20 69 6e 64 65 78  of Ex1 are index
14d20 65 64 2e 0a 2a 2a 20 54 68 65 20 76 61 6c 75 65  ed..** The value
14d30 20 6f 66 20 61 69 43 6f 6c 75 6d 6e 20 69 73 20   of aiColumn is 
14d40 7b 32 2c 20 30 7d 2e 20 20 61 69 43 6f 6c 75 6d  {2, 0}.  aiColum
14d50 6e 5b 30 5d 3d 3d 32 20 62 65 63 61 75 73 65 20  n[0]==2 because 
14d60 74 68 65 0a 2a 2a 20 66 69 72 73 74 20 63 6f 6c  the.** first col
14d70 75 6d 6e 20 74 6f 20 62 65 20 69 6e 64 65 78 65  umn to be indexe
14d80 64 20 28 63 33 29 20 68 61 73 20 61 6e 20 69 6e  d (c3) has an in
14d90 64 65 78 20 6f 66 20 32 20 69 6e 20 45 78 31 2e  dex of 2 in Ex1.
14da0 61 43 6f 6c 5b 5d 2e 0a 2a 2a 20 54 68 65 20 73  aCol[]..** The s
14db0 65 63 6f 6e 64 20 63 6f 6c 75 6d 6e 20 74 6f 20  econd column to 
14dc0 62 65 20 69 6e 64 65 78 65 64 20 28 63 31 29 20  be indexed (c1) 
14dd0 68 61 73 20 61 6e 20 69 6e 64 65 78 20 6f 66 20  has an index of 
14de0 30 20 69 6e 0a 2a 2a 20 45 78 31 2e 61 43 6f 6c  0 in.** Ex1.aCol
14df0 5b 5d 2c 20 68 65 6e 63 65 20 45 78 32 2e 61 69  [], hence Ex2.ai
14e00 43 6f 6c 75 6d 6e 5b 31 5d 3d 3d 30 2e 0a 2a 2a  Column[1]==0..**
14e10 0a 2a 2a 20 54 68 65 20 49 6e 64 65 78 2e 6f 6e  .** The Index.on
14e20 45 72 72 6f 72 20 66 69 65 6c 64 20 64 65 74 65  Error field dete
14e30 72 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f  rmines whether o
14e40 72 20 6e 6f 74 20 74 68 65 20 69 6e 64 65 78 65  r not the indexe
14e50 64 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 6d 75 73  d columns.** mus
14e60 74 20 62 65 20 75 6e 69 71 75 65 20 61 6e 64 20  t be unique and 
14e70 77 68 61 74 20 74 6f 20 64 6f 20 69 66 20 74 68  what to do if th
14e80 65 79 20 61 72 65 20 6e 6f 74 2e 20 20 57 68 65  ey are not.  Whe
14e90 6e 20 49 6e 64 65 78 2e 6f 6e 45 72 72 6f 72 3d  n Index.onError=
14ea0 4f 45 5f 4e 6f 6e 65 2c 0a 2a 2a 20 69 74 20 6d  OE_None,.** it m
14eb0 65 61 6e 73 20 74 68 69 73 20 69 73 20 6e 6f 74  eans this is not
14ec0 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78 2e   a unique index.
14ed0 20 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 69    Otherwise it i
14ee0 73 20 61 20 75 6e 69 71 75 65 20 69 6e 64 65 78  s a unique index
14ef0 0a 2a 2a 20 61 6e 64 20 74 68 65 20 76 61 6c 75  .** and the valu
14f00 65 20 6f 66 20 49 6e 64 65 78 2e 6f 6e 45 72 72  e of Index.onErr
14f10 6f 72 20 69 6e 64 69 63 61 74 65 20 74 68 65 20  or indicate the 
14f20 77 68 69 63 68 20 63 6f 6e 66 6c 69 63 74 20 72  which conflict r
14f30 65 73 6f 6c 75 74 69 6f 6e 0a 2a 2a 20 61 6c 67  esolution.** alg
14f40 6f 72 69 74 68 6d 20 74 6f 20 65 6d 70 6c 6f 79  orithm to employ
14f50 20 77 68 65 6e 65 76 65 72 20 61 6e 20 61 74 74   whenever an att
14f60 65 6d 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20  empt is made to 
14f70 69 6e 73 65 72 74 20 61 20 6e 6f 6e 2d 75 6e 69  insert a non-uni
14f80 71 75 65 0a 2a 2a 20 65 6c 65 6d 65 6e 74 2e 0a  que.** element..
14f90 2a 2a 0a 2a 2a 20 57 68 69 6c 65 20 70 61 72 73  **.** While pars
14fa0 69 6e 67 20 61 20 43 52 45 41 54 45 20 54 41 42  ing a CREATE TAB
14fb0 4c 45 20 6f 72 20 43 52 45 41 54 45 20 49 4e 44  LE or CREATE IND
14fc0 45 58 20 73 74 61 74 65 6d 65 6e 74 20 69 6e 20  EX statement in 
14fd0 6f 72 64 65 72 20 74 6f 0a 2a 2a 20 67 65 6e 65  order to.** gene
14fe0 72 61 74 65 20 56 44 42 45 20 63 6f 64 65 20 28  rate VDBE code (
14ff0 61 73 20 6f 70 70 6f 73 65 64 20 74 6f 20 70 61  as opposed to pa
15000 72 73 69 6e 67 20 6f 6e 65 20 72 65 61 64 20 66  rsing one read f
15010 72 6f 6d 20 61 6e 20 73 71 6c 69 74 65 5f 6d 61  rom an sqlite_ma
15020 73 74 65 72 0a 2a 2a 20 74 61 62 6c 65 20 61 73  ster.** table as
15030 20 70 61 72 74 20 6f 66 20 70 61 72 73 69 6e 67   part of parsing
15040 20 61 6e 20 65 78 69 73 74 69 6e 67 20 64 61 74   an existing dat
15050 61 62 61 73 65 20 73 63 68 65 6d 61 29 2c 20 74  abase schema), t
15060 72 61 6e 73 69 65 6e 74 20 69 6e 73 74 61 6e 63  ransient instanc
15070 65 73 0a 2a 2a 20 6f 66 20 74 68 69 73 20 73 74  es.** of this st
15080 72 75 63 74 75 72 65 20 6d 61 79 20 62 65 20 63  ructure may be c
15090 72 65 61 74 65 64 2e 20 49 6e 20 74 68 69 73 20  reated. In this 
150a0 63 61 73 65 20 74 68 65 20 49 6e 64 65 78 2e 74  case the Index.t
150b0 6e 75 6d 20 76 61 72 69 61 62 6c 65 20 69 73 0a  num variable is.
150c0 2a 2a 20 75 73 65 64 20 74 6f 20 73 74 6f 72 65  ** used to store
150d0 20 74 68 65 20 61 64 64 72 65 73 73 20 6f 66 20   the address of 
150e0 61 20 56 44 42 45 20 69 6e 73 74 72 75 63 74 69  a VDBE instructi
150f0 6f 6e 2c 20 6e 6f 74 20 61 20 64 61 74 61 62 61  on, not a databa
15100 73 65 20 70 61 67 65 0a 2a 2a 20 6e 75 6d 62 65  se page.** numbe
15110 72 20 28 69 74 20 63 61 6e 6e 6f 74 20 2d 20 74  r (it cannot - t
15120 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
15130 20 69 73 20 6e 6f 74 20 61 6c 6c 6f 63 61 74 65   is not allocate
15140 64 20 75 6e 74 69 6c 20 74 68 65 20 56 44 42 45  d until the VDBE
15150 0a 2a 2a 20 70 72 6f 67 72 61 6d 20 69 73 20 65  .** program is e
15160 78 65 63 75 74 65 64 29 2e 20 53 65 65 20 63 6f  xecuted). See co
15170 6e 76 65 72 74 54 6f 57 69 74 68 6f 75 74 52 6f  nvertToWithoutRo
15180 77 69 64 54 61 62 6c 65 28 29 20 66 6f 72 20 64  widTable() for d
15190 65 74 61 69 6c 73 2e 0a 2a 2f 0a 73 74 72 75 63  etails..*/.struc
151a0 74 20 49 6e 64 65 78 20 7b 0a 20 20 63 68 61 72  t Index {.  char
151b0 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20 20   *zName;        
151c0 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
151d0 74 68 69 73 20 69 6e 64 65 78 20 2a 2f 0a 20 20  this index */.  
151e0 69 31 36 20 2a 61 69 43 6f 6c 75 6d 6e 3b 20 20  i16 *aiColumn;  
151f0 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68 69 63           /* Whic
15200 68 20 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73  h columns are us
15210 65 64 20 62 79 20 74 68 69 73 20 69 6e 64 65 78  ed by this index
15220 2e 20 20 31 73 74 20 69 73 20 30 20 2a 2f 0a 20  .  1st is 0 */. 
15230 20 4c 6f 67 45 73 74 20 2a 61 69 52 6f 77 4c 6f   LogEst *aiRowLo
15240 67 45 73 74 3b 20 20 20 20 20 2f 2a 20 46 72 6f  gEst;     /* Fro
15250 6d 20 41 4e 41 4c 59 5a 45 3a 20 45 73 74 2e 20  m ANALYZE: Est. 
15260 72 6f 77 73 20 73 65 6c 65 63 74 65 64 20 62 79  rows selected by
15270 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 2a 2f 0a   each column */.
15280 20 20 54 61 62 6c 65 20 2a 70 54 61 62 6c 65 3b    Table *pTable;
15290 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
152a0 65 20 53 51 4c 20 74 61 62 6c 65 20 62 65 69 6e  e SQL table bein
152b0 67 20 69 6e 64 65 78 65 64 20 2a 2f 0a 20 20 63  g indexed */.  c
152c0 68 61 72 20 2a 7a 43 6f 6c 41 66 66 3b 20 20 20  har *zColAff;   
152d0 20 20 20 20 20 20 20 20 2f 2a 20 53 74 72 69 6e          /* Strin
152e0 67 20 64 65 66 69 6e 69 6e 67 20 74 68 65 20 61  g defining the a
152f0 66 66 69 6e 69 74 79 20 6f 66 20 65 61 63 68 20  ffinity of each 
15300 63 6f 6c 75 6d 6e 20 2a 2f 0a 20 20 49 6e 64 65  column */.  Inde
15310 78 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20  x *pNext;       
15320 20 20 20 20 20 2f 2a 20 54 68 65 20 6e 65 78 74       /* The next
15330 20 69 6e 64 65 78 20 61 73 73 6f 63 69 61 74 65   index associate
15340 64 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  d with the same 
15350 74 61 62 6c 65 20 2a 2f 0a 20 20 53 63 68 65 6d  table */.  Schem
15360 61 20 2a 70 53 63 68 65 6d 61 3b 20 20 20 20 20  a *pSchema;     
15370 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20 63 6f      /* Schema co
15380 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 69 6e  ntaining this in
15390 64 65 78 20 2a 2f 0a 20 20 75 38 20 2a 61 53 6f  dex */.  u8 *aSo
153a0 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20 20  rtOrder;        
153b0 20 20 2f 2a 20 66 6f 72 20 65 61 63 68 20 63 6f    /* for each co
153c0 6c 75 6d 6e 3a 20 54 72 75 65 3d 3d 44 45 53 43  lumn: True==DESC
153d0 2c 20 46 61 6c 73 65 3d 3d 41 53 43 20 2a 2f 0a  , False==ASC */.
153e0 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2a 61    const char **a
153f0 7a 43 6f 6c 6c 3b 20 20 20 20 20 2f 2a 20 41 72  zColl;     /* Ar
15400 72 61 79 20 6f 66 20 63 6f 6c 6c 61 74 69 6f 6e  ray of collation
15410 20 73 65 71 75 65 6e 63 65 20 6e 61 6d 65 73 20   sequence names 
15420 66 6f 72 20 69 6e 64 65 78 20 2a 2f 0a 20 20 45  for index */.  E
15430 78 70 72 20 2a 70 50 61 72 74 49 64 78 57 68 65  xpr *pPartIdxWhe
15440 72 65 3b 20 20 20 20 20 2f 2a 20 57 48 45 52 45  re;     /* WHERE
15450 20 63 6c 61 75 73 65 20 66 6f 72 20 70 61 72 74   clause for part
15460 69 61 6c 20 69 6e 64 69 63 65 73 20 2a 2f 0a 20  ial indices */. 
15470 20 45 78 70 72 4c 69 73 74 20 2a 61 43 6f 6c 45   ExprList *aColE
15480 78 70 72 3b 20 20 20 20 20 20 2f 2a 20 43 6f 6c  xpr;      /* Col
15490 75 6d 6e 20 65 78 70 72 65 73 73 69 6f 6e 73 20  umn expressions 
154a0 2a 2f 0a 20 20 69 6e 74 20 74 6e 75 6d 3b 20 20  */.  int tnum;  
154b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
154c0 20 44 42 20 50 61 67 65 20 63 6f 6e 74 61 69 6e   DB Page contain
154d0 69 6e 67 20 72 6f 6f 74 20 6f 66 20 74 68 69 73  ing root of this
154e0 20 69 6e 64 65 78 20 2a 2f 0a 20 20 4c 6f 67 45   index */.  LogE
154f0 73 74 20 73 7a 49 64 78 52 6f 77 3b 20 20 20 20  st szIdxRow;    
15500 20 20 20 20 20 2f 2a 20 45 73 74 69 6d 61 74 65       /* Estimate
15510 64 20 61 76 65 72 61 67 65 20 72 6f 77 20 73 69  d average row si
15520 7a 65 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  ze in bytes */. 
15530 20 75 31 36 20 6e 4b 65 79 43 6f 6c 3b 20 20 20   u16 nKeyCol;   
15540 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
15550 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 66  ber of columns f
15560 6f 72 6d 69 6e 67 20 74 68 65 20 6b 65 79 20 2a  orming the key *
15570 2f 0a 20 20 75 31 36 20 6e 43 6f 6c 75 6d 6e 3b  /.  u16 nColumn;
15580 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
15590 4e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  Number of column
155a0 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  s stored in the 
155b0 69 6e 64 65 78 20 2a 2f 0a 20 20 75 38 20 6f 6e  index */.  u8 on
155c0 45 72 72 6f 72 3b 20 20 20 20 20 20 20 20 20 20  Error;          
155d0 20 20 20 20 2f 2a 20 4f 45 5f 41 62 6f 72 74 2c      /* OE_Abort,
155e0 20 4f 45 5f 49 67 6e 6f 72 65 2c 20 4f 45 5f 52   OE_Ignore, OE_R
155f0 65 70 6c 61 63 65 2c 20 6f 72 20 4f 45 5f 4e 6f  eplace, or OE_No
15600 6e 65 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ne */.  unsigned
15610 20 69 64 78 54 79 70 65 3a 32 3b 20 20 20 20 20   idxType:2;     
15620 20 2f 2a 20 31 3d 3d 55 4e 49 51 55 45 2c 20 32   /* 1==UNIQUE, 2
15630 3d 3d 50 52 49 4d 41 52 59 20 4b 45 59 2c 20 30  ==PRIMARY KEY, 0
15640 3d 3d 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  ==CREATE INDEX *
15650 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20 62 55 6e  /.  unsigned bUn
15660 6f 72 64 65 72 65 64 3a 31 3b 20 20 20 2f 2a 20  ordered:1;   /* 
15670 55 73 65 20 74 68 69 73 20 69 6e 64 65 78 20 66  Use this index f
15680 6f 72 20 3d 3d 20 6f 72 20 49 4e 20 71 75 65 72  or == or IN quer
15690 69 65 73 20 6f 6e 6c 79 20 2a 2f 0a 20 20 75 6e  ies only */.  un
156a0 73 69 67 6e 65 64 20 75 6e 69 71 4e 6f 74 4e 75  signed uniqNotNu
156b0 6c 6c 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20 69  ll:1;  /* True i
156c0 66 20 55 4e 49 51 55 45 20 61 6e 64 20 4e 4f 54  f UNIQUE and NOT
156d0 20 4e 55 4c 4c 20 66 6f 72 20 61 6c 6c 20 63 6f   NULL for all co
156e0 6c 75 6d 6e 73 20 2a 2f 0a 20 20 75 6e 73 69 67  lumns */.  unsig
156f0 6e 65 64 20 69 73 52 65 73 69 7a 65 64 3a 31 3b  ned isResized:1;
15700 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 72      /* True if r
15710 65 73 69 7a 65 49 6e 64 65 78 4f 62 6a 65 63 74  esizeIndexObject
15720 28 29 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  () has been call
15730 65 64 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64  ed */.  unsigned
15740 20 69 73 43 6f 76 65 72 69 6e 67 3a 31 3b 20 20   isCovering:1;  
15750 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 69 73   /* True if this
15760 20 69 73 20 61 20 63 6f 76 65 72 69 6e 67 20 69   is a covering i
15770 6e 64 65 78 20 2a 2f 0a 20 20 75 6e 73 69 67 6e  ndex */.  unsign
15780 65 64 20 6e 6f 53 6b 69 70 53 63 61 6e 3a 31 3b  ed noSkipScan:1;
15790 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 74 72 79     /* Do not try
157a0 20 74 6f 20 75 73 65 20 73 6b 69 70 2d 73 63 61   to use skip-sca
157b0 6e 20 69 66 20 74 72 75 65 20 2a 2f 0a 20 20 75  n if true */.  u
157c0 6e 73 69 67 6e 65 64 20 68 61 73 53 74 61 74 31  nsigned hasStat1
157d0 3a 31 3b 20 20 20 20 20 2f 2a 20 61 69 52 6f 77  :1;     /* aiRow
157e0 4c 6f 67 45 73 74 20 76 61 6c 75 65 73 20 63 6f  LogEst values co
157f0 6d 65 20 66 72 6f 6d 20 73 71 6c 69 74 65 5f 73  me from sqlite_s
15800 74 61 74 31 20 2a 2f 0a 23 69 66 64 65 66 20 53  tat1 */.#ifdef S
15810 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41  QLITE_ENABLE_STA
15820 54 33 5f 4f 52 5f 53 54 41 54 34 0a 20 20 69 6e  T3_OR_STAT4.  in
15830 74 20 6e 53 61 6d 70 6c 65 3b 20 20 20 20 20 20  t nSample;      
15840 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
15850 20 6f 66 20 65 6c 65 6d 65 6e 74 73 20 69 6e 20   of elements in 
15860 61 53 61 6d 70 6c 65 5b 5d 20 2a 2f 0a 20 20 69  aSample[] */.  i
15870 6e 74 20 6e 53 61 6d 70 6c 65 43 6f 6c 3b 20 20  nt nSampleCol;  
15880 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a 65 20          /* Size 
15890 6f 66 20 49 6e 64 65 78 53 61 6d 70 6c 65 2e 61  of IndexSample.a
158a0 6e 45 71 5b 5d 20 61 6e 64 20 73 6f 20 6f 6e 20  nEq[] and so on 
158b0 2a 2f 0a 20 20 74 52 6f 77 63 6e 74 20 2a 61 41  */.  tRowcnt *aA
158c0 76 67 45 71 3b 20 20 20 20 20 20 20 20 20 2f 2a  vgEq;         /*
158d0 20 41 76 65 72 61 67 65 20 6e 45 71 20 76 61 6c   Average nEq val
158e0 75 65 73 20 66 6f 72 20 6b 65 79 73 20 6e 6f 74  ues for keys not
158f0 20 69 6e 20 61 53 61 6d 70 6c 65 20 2a 2f 0a 20   in aSample */. 
15900 20 49 6e 64 65 78 53 61 6d 70 6c 65 20 2a 61 53   IndexSample *aS
15910 61 6d 70 6c 65 3b 20 20 20 20 2f 2a 20 53 61 6d  ample;    /* Sam
15920 70 6c 65 73 20 6f 66 20 74 68 65 20 6c 65 66 74  ples of the left
15930 2d 6d 6f 73 74 20 6b 65 79 20 2a 2f 0a 20 20 74  -most key */.  t
15940 52 6f 77 63 6e 74 20 2a 61 69 52 6f 77 45 73 74  Rowcnt *aiRowEst
15950 3b 20 20 20 20 20 20 20 2f 2a 20 4e 6f 6e 2d 6c  ;       /* Non-l
15960 6f 67 61 72 69 74 68 6d 69 63 20 73 74 61 74 31  ogarithmic stat1
15970 20 64 61 74 61 20 66 6f 72 20 74 68 69 73 20 69   data for this i
15980 6e 64 65 78 20 2a 2f 0a 20 20 74 52 6f 77 63 6e  ndex */.  tRowcn
15990 74 20 6e 52 6f 77 45 73 74 30 3b 20 20 20 20 20  t nRowEst0;     
159a0 20 20 20 2f 2a 20 4e 6f 6e 2d 6c 6f 67 61 72 69     /* Non-logari
159b0 74 68 6d 69 63 20 6e 75 6d 62 65 72 20 6f 66 20  thmic number of 
159c0 72 6f 77 73 20 69 6e 20 74 68 65 20 69 6e 64 65  rows in the inde
159d0 78 20 2a 2f 0a 23 65 6e 64 69 66 0a 7d 3b 0a 0a  x */.#endif.};..
159e0 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65 64 20 76 61  /*.** Allowed va
159f0 6c 75 65 73 20 66 6f 72 20 49 6e 64 65 78 2e 69  lues for Index.i
15a00 64 78 54 79 70 65 0a 2a 2f 0a 23 64 65 66 69 6e  dxType.*/.#defin
15a10 65 20 53 51 4c 49 54 45 5f 49 44 58 54 59 50 45  e SQLITE_IDXTYPE
15a20 5f 41 50 50 44 45 46 20 20 20 20 20 20 30 20 20  _APPDEF      0  
15a30 20 2f 2a 20 43 72 65 61 74 65 64 20 75 73 69 6e   /* Created usin
15a40 67 20 43 52 45 41 54 45 20 49 4e 44 45 58 20 2a  g CREATE INDEX *
15a50 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  /.#define SQLITE
15a60 5f 49 44 58 54 59 50 45 5f 55 4e 49 51 55 45 20  _IDXTYPE_UNIQUE 
15a70 20 20 20 20 20 31 20 20 20 2f 2a 20 49 6d 70 6c       1   /* Impl
15a80 65 6d 65 6e 74 73 20 61 20 55 4e 49 51 55 45 20  ements a UNIQUE 
15a90 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23 64  constraint */.#d
15aa0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 44 58  efine SQLITE_IDX
15ab0 54 59 50 45 5f 50 52 49 4d 41 52 59 4b 45 59 20  TYPE_PRIMARYKEY 
15ac0 20 32 20 20 20 2f 2a 20 49 73 20 74 68 65 20 50   2   /* Is the P
15ad0 52 49 4d 41 52 59 20 4b 45 59 20 66 6f 72 20 74  RIMARY KEY for t
15ae0 68 65 20 74 61 62 6c 65 20 2a 2f 0a 0a 2f 2a 20  he table */../* 
15af0 52 65 74 75 72 6e 20 74 72 75 65 20 69 66 20 69  Return true if i
15b00 6e 64 65 78 20 58 20 69 73 20 61 20 50 52 49 4d  ndex X is a PRIM
15b10 41 52 59 20 4b 45 59 20 69 6e 64 65 78 20 2a 2f  ARY KEY index */
15b20 0a 23 64 65 66 69 6e 65 20 49 73 50 72 69 6d 61  .#define IsPrima
15b30 72 79 4b 65 79 49 6e 64 65 78 28 58 29 20 20 28  ryKeyIndex(X)  (
15b40 28 58 29 2d 3e 69 64 78 54 79 70 65 3d 3d 53 51  (X)->idxType==SQ
15b50 4c 49 54 45 5f 49 44 58 54 59 50 45 5f 50 52 49  LITE_IDXTYPE_PRI
15b60 4d 41 52 59 4b 45 59 29 0a 0a 2f 2a 20 52 65 74  MARYKEY)../* Ret
15b70 75 72 6e 20 74 72 75 65 20 69 66 20 69 6e 64 65  urn true if inde
15b80 78 20 58 20 69 73 20 61 20 55 4e 49 51 55 45 20  x X is a UNIQUE 
15b90 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65  index */.#define
15ba0 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 58   IsUniqueIndex(X
15bb0 29 20 20 20 20 20 20 28 28 58 29 2d 3e 6f 6e 45  )      ((X)->onE
15bc0 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e 65 29 0a 0a  rror!=OE_None)..
15bd0 2f 2a 20 54 68 65 20 49 6e 64 65 78 2e 61 69 43  /* The Index.aiC
15be0 6f 6c 75 6d 6e 5b 5d 20 76 61 6c 75 65 73 20 61  olumn[] values a
15bf0 72 65 20 6e 6f 72 6d 61 6c 6c 79 20 70 6f 73 69  re normally posi
15c00 74 69 76 65 20 69 6e 74 65 67 65 72 2e 20 20 42  tive integer.  B
15c10 75 74 0a 2a 2a 20 74 68 65 72 65 20 61 72 65 20  ut.** there are 
15c20 73 6f 6d 65 20 6e 65 67 61 74 69 76 65 20 76 61  some negative va
15c30 6c 75 65 73 20 74 68 61 74 20 68 61 76 65 20 73  lues that have s
15c40 70 65 63 69 61 6c 20 6d 65 61 6e 69 6e 67 3a 0a  pecial meaning:.
15c50 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 52 4f  */.#define XN_RO
15c60 57 49 44 20 20 20 20 20 28 2d 31 29 20 20 20 20  WID     (-1)    
15c70 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
15c80 6d 6e 20 69 73 20 74 68 65 20 72 6f 77 69 64 20  mn is the rowid 
15c90 2a 2f 0a 23 64 65 66 69 6e 65 20 58 4e 5f 45 58  */.#define XN_EX
15ca0 50 52 20 20 20 20 20 20 28 2d 32 29 20 20 20 20  PR      (-2)    
15cb0 20 2f 2a 20 49 6e 64 65 78 65 64 20 63 6f 6c 75   /* Indexed colu
15cc0 6d 6e 20 69 73 20 61 6e 20 65 78 70 72 65 73 73  mn is an express
15cd0 69 6f 6e 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 45 61  ion */../*.** Ea
15ce0 63 68 20 73 61 6d 70 6c 65 20 73 74 6f 72 65 64  ch sample stored
15cf0 20 69 6e 20 74 68 65 20 73 71 6c 69 74 65 5f 73   in the sqlite_s
15d00 74 61 74 33 20 74 61 62 6c 65 20 69 73 20 72 65  tat3 table is re
15d10 70 72 65 73 65 6e 74 65 64 20 69 6e 20 6d 65 6d  presented in mem
15d20 6f 72 79 0a 2a 2a 20 75 73 69 6e 67 20 61 20 73  ory.** using a s
15d30 74 72 75 63 74 75 72 65 20 6f 66 20 74 68 69 73  tructure of this
15d40 20 74 79 70 65 2e 20 20 53 65 65 20 64 6f 63 75   type.  See docu
15d50 6d 65 6e 74 61 74 69 6f 6e 20 61 74 20 74 68 65  mentation at the
15d60 20 74 6f 70 20 6f 66 20 74 68 65 0a 2a 2a 20 61   top of the.** a
15d70 6e 61 6c 79 7a 65 2e 63 20 73 6f 75 72 63 65 20  nalyze.c source 
15d80 66 69 6c 65 20 66 6f 72 20 61 64 64 69 74 69 6f  file for additio
15d90 6e 61 6c 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e  nal information.
15da0 0a 2a 2f 0a 73 74 72 75 63 74 20 49 6e 64 65 78  .*/.struct Index
15db0 53 61 6d 70 6c 65 20 7b 0a 20 20 76 6f 69 64 20  Sample {.  void 
15dc0 2a 70 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20  *p;          /* 
15dd0 50 6f 69 6e 74 65 72 20 74 6f 20 73 61 6d 70 6c  Pointer to sampl
15de0 65 64 20 72 65 63 6f 72 64 20 2a 2f 0a 20 20 69  ed record */.  i
15df0 6e 74 20 6e 3b 20 20 20 20 20 20 20 20 20 20 20  nt n;           
15e00 20 2f 2a 20 53 69 7a 65 20 6f 66 20 72 65 63 6f   /* Size of reco
15e10 72 64 20 69 6e 20 62 79 74 65 73 20 2a 2f 0a 20  rd in bytes */. 
15e20 20 74 52 6f 77 63 6e 74 20 2a 61 6e 45 71 3b 20   tRowcnt *anEq; 
15e30 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
15e40 72 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20  r of rows where 
15e50 74 68 65 20 6b 65 79 20 65 71 75 61 6c 73 20 74  the key equals t
15e60 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20 20  his sample */.  
15e70 74 52 6f 77 63 6e 74 20 2a 61 6e 4c 74 3b 20 20  tRowcnt *anLt;  
15e80 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65 72    /* Est. number
15e90 20 6f 66 20 72 6f 77 73 20 77 68 65 72 65 20 6b   of rows where k
15ea0 65 79 20 69 73 20 6c 65 73 73 20 74 68 61 6e 20  ey is less than 
15eb0 74 68 69 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 20  this sample */. 
15ec0 20 74 52 6f 77 63 6e 74 20 2a 61 6e 44 4c 74 3b   tRowcnt *anDLt;
15ed0 20 20 20 2f 2a 20 45 73 74 2e 20 6e 75 6d 62 65     /* Est. numbe
15ee0 72 20 6f 66 20 64 69 73 74 69 6e 63 74 20 6b 65  r of distinct ke
15ef0 79 73 20 6c 65 73 73 20 74 68 61 6e 20 74 68 69  ys less than thi
15f00 73 20 73 61 6d 70 6c 65 20 2a 2f 0a 7d 3b 0a 0a  s sample */.};..
15f10 2f 2a 0a 2a 2a 20 45 61 63 68 20 74 6f 6b 65 6e  /*.** Each token
15f20 20 63 6f 6d 69 6e 67 20 6f 75 74 20 6f 66 20 74   coming out of t
15f30 68 65 20 6c 65 78 65 72 20 69 73 20 61 6e 20 69  he lexer is an i
15f40 6e 73 74 61 6e 63 65 20 6f 66 0a 2a 2a 20 74 68  nstance of.** th
15f50 69 73 20 73 74 72 75 63 74 75 72 65 2e 20 20 54  is structure.  T
15f60 6f 6b 65 6e 73 20 61 72 65 20 61 6c 73 6f 20 75  okens are also u
15f70 73 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 61  sed as part of a
15f80 6e 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a 2a  n expression..**
15f90 0a 2a 2a 20 4e 6f 74 65 20 69 66 20 54 6f 6b 65  .** Note if Toke
15fa0 6e 2e 7a 3d 3d 30 20 74 68 65 6e 20 54 6f 6b 65  n.z==0 then Toke
15fb0 6e 2e 64 79 6e 20 61 6e 64 20 54 6f 6b 65 6e 2e  n.dyn and Token.
15fc0 6e 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 20  n are undefined 
15fd0 61 6e 64 0a 2a 2a 20 6d 61 79 20 63 6f 6e 74 61  and.** may conta
15fe0 69 6e 20 72 61 6e 64 6f 6d 20 76 61 6c 75 65 73  in random values
15ff0 2e 20 20 44 6f 20 6e 6f 74 20 6d 61 6b 65 20 61  .  Do not make a
16000 6e 79 20 61 73 73 75 6d 70 74 69 6f 6e 73 20 61  ny assumptions a
16010 62 6f 75 74 20 54 6f 6b 65 6e 2e 64 79 6e 0a 2a  bout Token.dyn.*
16020 2a 20 61 6e 64 20 54 6f 6b 65 6e 2e 6e 20 77 68  * and Token.n wh
16030 65 6e 20 54 6f 6b 65 6e 2e 7a 3d 3d 30 2e 0a 2a  en Token.z==0..*
16040 2f 0a 73 74 72 75 63 74 20 54 6f 6b 65 6e 20 7b  /.struct Token {
16050 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  .  const char *z
16060 3b 20 20 20 20 20 2f 2a 20 54 65 78 74 20 6f 66  ;     /* Text of
16070 20 74 68 65 20 74 6f 6b 65 6e 2e 20 20 4e 6f 74   the token.  Not
16080 20 4e 55 4c 4c 2d 74 65 72 6d 69 6e 61 74 65 64   NULL-terminated
16090 21 20 2a 2f 0a 20 20 75 6e 73 69 67 6e 65 64 20  ! */.  unsigned 
160a0 69 6e 74 20 6e 3b 20 20 20 20 2f 2a 20 4e 75 6d  int n;    /* Num
160b0 62 65 72 20 6f 66 20 63 68 61 72 61 63 74 65 72  ber of character
160c0 73 20 69 6e 20 74 68 69 73 20 74 6f 6b 65 6e 20  s in this token 
160d0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  */.};../*.** An 
160e0 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 69 73  instance of this
160f0 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   structure conta
16100 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ins information 
16110 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
16120 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 61  te.** code for a
16130 20 53 45 4c 45 43 54 20 74 68 61 74 20 63 6f 6e   SELECT that con
16140 74 61 69 6e 73 20 61 67 67 72 65 67 61 74 65 20  tains aggregate 
16150 66 75 6e 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a  functions..**.**
16160 20 49 66 20 45 78 70 72 2e 6f 70 3d 3d 54 4b 5f   If Expr.op==TK_
16170 41 47 47 5f 43 4f 4c 55 4d 4e 20 6f 72 20 54 4b  AGG_COLUMN or TK
16180 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 74 68  _AGG_FUNCTION th
16190 65 6e 20 45 78 70 72 2e 70 41 67 67 49 6e 66 6f  en Expr.pAggInfo
161a0 20 69 73 20 61 0a 2a 2a 20 70 6f 69 6e 74 65 72   is a.** pointer
161b0 20 74 6f 20 74 68 69 73 20 73 74 72 75 63 74 75   to this structu
161c0 72 65 2e 20 20 54 68 65 20 45 78 70 72 2e 69 43  re.  The Expr.iC
161d0 6f 6c 75 6d 6e 20 66 69 65 6c 64 20 69 73 20 74  olumn field is t
161e0 68 65 20 69 6e 64 65 78 20 69 6e 0a 2a 2a 20 41  he index in.** A
161f0 67 67 49 6e 66 6f 2e 61 43 6f 6c 5b 5d 20 6f 72  ggInfo.aCol[] or
16200 20 41 67 67 49 6e 66 6f 2e 61 46 75 6e 63 5b 5d   AggInfo.aFunc[]
16210 20 6f 66 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20   of information 
16220 6e 65 65 64 65 64 20 74 6f 20 67 65 6e 65 72 61  needed to genera
16230 74 65 0a 2a 2a 20 63 6f 64 65 20 66 6f 72 20 74  te.** code for t
16240 68 61 74 20 6e 6f 64 65 2e 0a 2a 2a 0a 2a 2a 20  hat node..**.** 
16250 41 67 67 49 6e 66 6f 2e 70 47 72 6f 75 70 42 79  AggInfo.pGroupBy
16260 20 61 6e 64 20 41 67 67 49 6e 66 6f 2e 61 46 75   and AggInfo.aFu
16270 6e 63 2e 70 45 78 70 72 20 70 6f 69 6e 74 20 74  nc.pExpr point t
16280 6f 20 66 69 65 6c 64 73 20 77 69 74 68 69 6e 20  o fields within 
16290 74 68 65 0a 2a 2a 20 6f 72 69 67 69 6e 61 6c 20  the.** original 
162a0 53 65 6c 65 63 74 20 73 74 72 75 63 74 75 72 65  Select structure
162b0 20 74 68 61 74 20 64 65 73 63 72 69 62 65 73 20   that describes 
162c0 74 68 65 20 53 45 4c 45 43 54 20 73 74 61 74 65  the SELECT state
162d0 6d 65 6e 74 2e 20 20 54 68 65 73 65 0a 2a 2a 20  ment.  These.** 
162e0 66 69 65 6c 64 73 20 64 6f 20 6e 6f 74 20 6e 65  fields do not ne
162f0 65 64 20 74 6f 20 62 65 20 66 72 65 65 64 20 77  ed to be freed w
16300 68 65 6e 20 64 65 61 6c 6c 6f 63 61 74 69 6e 67  hen deallocating
16310 20 74 68 65 20 41 67 67 49 6e 66 6f 20 73 74 72   the AggInfo str
16320 75 63 74 75 72 65 2e 0a 2a 2f 0a 73 74 72 75 63  ucture..*/.struc
16330 74 20 41 67 67 49 6e 66 6f 20 7b 0a 20 20 75 38  t AggInfo {.  u8
16340 20 64 69 72 65 63 74 4d 6f 64 65 3b 20 20 20 20   directMode;    
16350 20 20 20 20 20 20 2f 2a 20 44 69 72 65 63 74 20        /* Direct 
16360 72 65 6e 64 65 72 69 6e 67 20 6d 6f 64 65 20 6d  rendering mode m
16370 65 61 6e 73 20 74 61 6b 65 20 64 61 74 61 20 64  eans take data d
16380 69 72 65 63 74 6c 79 0a 20 20 20 20 20 20 20 20  irectly.        
16390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
163a0 20 20 2a 2a 20 66 72 6f 6d 20 73 6f 75 72 63 65    ** from source
163b0 20 74 61 62 6c 65 73 20 72 61 74 68 65 72 20 74   tables rather t
163c0 68 61 6e 20 66 72 6f 6d 20 61 63 63 75 6d 75 6c  han from accumul
163d0 61 74 6f 72 73 20 2a 2f 0a 20 20 75 38 20 75 73  ators */.  u8 us
163e0 65 53 6f 72 74 69 6e 67 49 64 78 3b 20 20 20 20  eSortingIdx;    
163f0 20 20 20 2f 2a 20 49 6e 20 64 69 72 65 63 74 20     /* In direct 
16400 6d 6f 64 65 2c 20 72 65 66 65 72 65 6e 63 65 20  mode, reference 
16410 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
16420 78 20 72 61 74 68 65 72 0a 20 20 20 20 20 20 20  x rather.       
16430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16440 20 20 20 2a 2a 20 74 68 61 6e 20 74 68 65 20 73     ** than the s
16450 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
16460 20 69 6e 74 20 73 6f 72 74 69 6e 67 49 64 78 3b   int sortingIdx;
16470 20 20 20 20 20 20 20 20 20 2f 2a 20 43 75 72 73           /* Curs
16480 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 68 65  or number of the
16490 20 73 6f 72 74 69 6e 67 20 69 6e 64 65 78 20 2a   sorting index *
164a0 2f 0a 20 20 69 6e 74 20 73 6f 72 74 69 6e 67 49  /.  int sortingI
164b0 64 78 50 54 61 62 3b 20 20 20 20 20 2f 2a 20 43  dxPTab;     /* C
164c0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20  ursor number of 
164d0 70 73 65 75 64 6f 2d 74 61 62 6c 65 20 2a 2f 0a  pseudo-table */.
164e0 20 20 69 6e 74 20 6e 53 6f 72 74 69 6e 67 43 6f    int nSortingCo
164f0 6c 75 6d 6e 3b 20 20 20 20 20 2f 2a 20 4e 75 6d  lumn;     /* Num
16500 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e 73 20 69  ber of columns i
16510 6e 20 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e  n the sorting in
16520 64 65 78 20 2a 2f 0a 20 20 69 6e 74 20 6d 6e 52  dex */.  int mnR
16530 65 67 2c 20 6d 78 52 65 67 3b 20 20 20 20 20 20  eg, mxReg;      
16540 20 2f 2a 20 52 61 6e 67 65 20 6f 66 20 72 65 67   /* Range of reg
16550 69 73 74 65 72 73 20 61 6c 6c 6f 63 61 74 65 64  isters allocated
16560 20 66 6f 72 20 61 43 6f 6c 20 61 6e 64 20 61 46   for aCol and aF
16570 75 6e 63 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73  unc */.  ExprLis
16580 74 20 2a 70 47 72 6f 75 70 42 79 3b 20 20 20 20  t *pGroupBy;    
16590 20 2f 2a 20 54 68 65 20 67 72 6f 75 70 20 62 79   /* The group by
165a0 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 73 74 72   clause */.  str
165b0 75 63 74 20 41 67 67 49 6e 66 6f 5f 63 6f 6c 20  uct AggInfo_col 
165c0 7b 20 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68  {    /* For each
165d0 20 63 6f 6c 75 6d 6e 20 75 73 65 64 20 69 6e 20   column used in 
165e0 73 6f 75 72 63 65 20 74 61 62 6c 65 73 20 2a 2f  source tables */
165f0 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
16600 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16610 20 53 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f   Source table */
16620 0a 20 20 20 20 69 6e 74 20 69 54 61 62 6c 65 3b  .    int iTable;
16630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
16640 20 43 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f   Cursor number o
16650 66 20 74 68 65 20 73 6f 75 72 63 65 20 74 61 62  f the source tab
16660 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 43  le */.    int iC
16670 6f 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20  olumn;          
16680 20 20 20 2f 2a 20 43 6f 6c 75 6d 6e 20 6e 75 6d     /* Column num
16690 62 65 72 20 77 69 74 68 69 6e 20 74 68 65 20 73  ber within the s
166a0 6f 75 72 63 65 20 74 61 62 6c 65 20 2a 2f 0a 20  ource table */. 
166b0 20 20 20 69 6e 74 20 69 53 6f 72 74 65 72 43 6f     int iSorterCo
166c0 6c 75 6d 6e 3b 20 20 20 20 20 20 20 2f 2a 20 43  lumn;       /* C
166d0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20  olumn number in 
166e0 74 68 65 20 73 6f 72 74 69 6e 67 20 69 6e 64 65  the sorting inde
166f0 78 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65  x */.    int iMe
16700 6d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  m;              
16710 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61    /* Memory loca
16720 74 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61  tion that acts a
16730 73 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f  s accumulator */
16740 0a 20 20 20 20 45 78 70 72 20 2a 70 45 78 70 72  .    Expr *pExpr
16750 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
16760 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 65 78   The original ex
16770 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20 7d 20  pression */.  } 
16780 2a 61 43 6f 6c 3b 0a 20 20 69 6e 74 20 6e 43 6f  *aCol;.  int nCo
16790 6c 75 6d 6e 3b 20 20 20 20 20 20 20 20 20 20 20  lumn;           
167a0 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 75 73   /* Number of us
167b0 65 64 20 65 6e 74 72 69 65 73 20 69 6e 20 61 43  ed entries in aC
167c0 6f 6c 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6e 41  ol[] */.  int nA
167d0 63 63 75 6d 75 6c 61 74 6f 72 3b 20 20 20 20 20  ccumulator;     
167e0 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 63    /* Number of c
167f0 6f 6c 75 6d 6e 73 20 74 68 61 74 20 73 68 6f 77  olumns that show
16800 20 74 68 72 6f 75 67 68 20 74 6f 20 74 68 65 20   through to the 
16810 6f 75 74 70 75 74 2e 0a 20 20 20 20 20 20 20 20  output..        
16820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16830 20 20 2a 2a 20 41 64 64 69 74 69 6f 6e 61 6c 20    ** Additional 
16840 63 6f 6c 75 6d 6e 73 20 61 72 65 20 75 73 65 64  columns are used
16850 20 6f 6e 6c 79 20 61 73 20 70 61 72 61 6d 65 74   only as paramet
16860 65 72 73 20 74 6f 0a 20 20 20 20 20 20 20 20 20  ers to.         
16870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16880 20 2a 2a 20 61 67 67 72 65 67 61 74 65 20 66 75   ** aggregate fu
16890 6e 63 74 69 6f 6e 73 20 2a 2f 0a 20 20 73 74 72  nctions */.  str
168a0 75 63 74 20 41 67 67 49 6e 66 6f 5f 66 75 6e 63  uct AggInfo_func
168b0 20 7b 20 20 20 2f 2a 20 46 6f 72 20 65 61 63 68   {   /* For each
168c0 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
168d0 69 6f 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72 20  ion */.    Expr 
168e0 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20 20 20  *pExpr;         
168f0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
16900 6e 20 65 6e 63 6f 64 69 6e 67 20 74 68 65 20 66  n encoding the f
16910 75 6e 63 74 69 6f 6e 20 2a 2f 0a 20 20 20 20 46  unction */.    F
16920 75 6e 63 44 65 66 20 2a 70 46 75 6e 63 3b 20 20  uncDef *pFunc;  
16930 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 61          /* The a
16940 67 67 72 65 67 61 74 65 20 66 75 6e 63 74 69 6f  ggregate functio
16950 6e 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  n implementation
16960 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 4d 65 6d   */.    int iMem
16970 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
16980 20 2f 2a 20 4d 65 6d 6f 72 79 20 6c 6f 63 61 74   /* Memory locat
16990 69 6f 6e 20 74 68 61 74 20 61 63 74 73 20 61 73  ion that acts as
169a0 20 61 63 63 75 6d 75 6c 61 74 6f 72 20 2a 2f 0a   accumulator */.
169b0 20 20 20 20 69 6e 74 20 69 44 69 73 74 69 6e 63      int iDistinc
169c0 74 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  t;           /* 
169d0 45 70 68 65 6d 65 72 61 6c 20 74 61 62 6c 65 20  Ephemeral table 
169e0 75 73 65 64 20 74 6f 20 65 6e 66 6f 72 63 65 20  used to enforce 
169f0 44 49 53 54 49 4e 43 54 20 2a 2f 0a 20 20 7d 20  DISTINCT */.  } 
16a00 2a 61 46 75 6e 63 3b 0a 20 20 69 6e 74 20 6e 46  *aFunc;.  int nF
16a10 75 6e 63 3b 20 20 20 20 20 20 20 20 20 20 20 20  unc;            
16a20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 65    /* Number of e
16a30 6e 74 72 69 65 73 20 69 6e 20 61 46 75 6e 63 5b  ntries in aFunc[
16a40 5d 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54  ] */.};../*.** T
16a50 68 65 20 64 61 74 61 74 79 70 65 20 79 6e 56 61  he datatype ynVa
16a60 72 20 69 73 20 61 20 73 69 67 6e 65 64 20 69 6e  r is a signed in
16a70 74 65 67 65 72 2c 20 65 69 74 68 65 72 20 31 36  teger, either 16
16a80 2d 62 69 74 20 6f 72 20 33 32 2d 62 69 74 2e 0a  -bit or 32-bit..
16a90 2a 2a 20 55 73 75 61 6c 6c 79 20 69 74 20 69 73  ** Usually it is
16aa0 20 31 36 2d 62 69 74 73 2e 20 20 42 75 74 20 69   16-bits.  But i
16ab0 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52  f SQLITE_MAX_VAR
16ac0 49 41 42 4c 45 5f 4e 55 4d 42 45 52 20 69 73 20  IABLE_NUMBER is 
16ad0 67 72 65 61 74 65 72 0a 2a 2a 20 74 68 61 6e 20  greater.** than 
16ae0 33 32 37 36 37 20 77 65 20 68 61 76 65 20 74 6f  32767 we have to
16af0 20 6d 61 6b 65 20 69 74 20 33 32 2d 62 69 74 2e   make it 32-bit.
16b00 20 20 31 36 2d 62 69 74 20 69 73 20 70 72 65 66    16-bit is pref
16b10 65 72 72 65 64 20 62 65 63 61 75 73 65 0a 2a 2a  erred because.**
16b20 20 69 74 20 75 73 65 73 20 6c 65 73 73 20 6d 65   it uses less me
16b30 6d 6f 72 79 20 69 6e 20 74 68 65 20 45 78 70 72  mory in the Expr
16b40 20 6f 62 6a 65 63 74 2c 20 77 68 69 63 68 20 69   object, which i
16b50 73 20 61 20 62 69 67 20 6d 65 6d 6f 72 79 20 75  s a big memory u
16b60 73 65 72 0a 2a 2a 20 69 6e 20 73 79 73 74 65 6d  ser.** in system
16b70 73 20 77 69 74 68 20 6c 6f 74 73 20 6f 66 20 70  s with lots of p
16b80 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
16b90 74 73 2e 20 20 41 6e 64 20 66 65 77 20 61 70 70  ts.  And few app
16ba0 6c 69 63 61 74 69 6f 6e 73 0a 2a 2a 20 6e 65 65  lications.** nee
16bb0 64 20 6d 6f 72 65 20 74 68 61 6e 20 61 62 6f 75  d more than abou
16bc0 74 20 31 30 20 6f 72 20 32 30 20 76 61 72 69 61  t 10 or 20 varia
16bd0 62 6c 65 73 2e 20 20 42 75 74 20 73 6f 6d 65 20  bles.  But some 
16be0 65 78 74 72 65 6d 65 20 75 73 65 72 73 20 77 61  extreme users wa
16bf0 6e 74 0a 2a 2a 20 74 6f 20 68 61 76 65 20 70 72  nt.** to have pr
16c00 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74  epared statement
16c10 73 20 77 69 74 68 20 6f 76 65 72 20 33 32 37 36  s with over 3276
16c20 37 20 76 61 72 69 61 62 6c 65 73 2c 20 61 6e 64  7 variables, and
16c30 20 66 6f 72 20 74 68 65 6d 0a 2a 2a 20 74 68 65   for them.** the
16c40 20 6f 70 74 69 6f 6e 20 69 73 20 61 76 61 69 6c   option is avail
16c50 61 62 6c 65 20 28 61 74 20 63 6f 6d 70 69 6c 65  able (at compile
16c60 2d 74 69 6d 65 29 2e 0a 2a 2f 0a 23 69 66 20 53  -time)..*/.#if S
16c70 51 4c 49 54 45 5f 4d 41 58 5f 56 41 52 49 41 42  QLITE_MAX_VARIAB
16c80 4c 45 5f 4e 55 4d 42 45 52 3c 3d 33 32 37 36 37  LE_NUMBER<=32767
16c90 0a 74 79 70 65 64 65 66 20 69 31 36 20 79 6e 56  .typedef i16 ynV
16ca0 61 72 3b 0a 23 65 6c 73 65 0a 74 79 70 65 64 65  ar;.#else.typede
16cb0 66 20 69 6e 74 20 79 6e 56 61 72 3b 0a 23 65 6e  f int ynVar;.#en
16cc0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 45 61 63 68 20  dif../*.** Each 
16cd0 6e 6f 64 65 20 6f 66 20 61 6e 20 65 78 70 72 65  node of an expre
16ce0 73 73 69 6f 6e 20 69 6e 20 74 68 65 20 70 61 72  ssion in the par
16cf0 73 65 20 74 72 65 65 20 69 73 20 61 6e 20 69 6e  se tree is an in
16d00 73 74 61 6e 63 65 0a 2a 2a 20 6f 66 20 74 68 69  stance.** of thi
16d10 73 20 73 74 72 75 63 74 75 72 65 2e 0a 2a 2a 0a  s structure..**.
16d20 2a 2a 20 45 78 70 72 2e 6f 70 20 69 73 20 74 68  ** Expr.op is th
16d30 65 20 6f 70 63 6f 64 65 2e 20 54 68 65 20 69 6e  e opcode. The in
16d40 74 65 67 65 72 20 70 61 72 73 65 72 20 74 6f 6b  teger parser tok
16d50 65 6e 20 63 6f 64 65 73 20 61 72 65 20 72 65 75  en codes are reu
16d60 73 65 64 0a 2a 2a 20 61 73 20 6f 70 63 6f 64 65  sed.** as opcode
16d70 73 20 68 65 72 65 2e 20 46 6f 72 20 65 78 61 6d  s here. For exam
16d80 70 6c 65 2c 20 74 68 65 20 70 61 72 73 65 72 20  ple, the parser 
16d90 64 65 66 69 6e 65 73 20 54 4b 5f 47 45 20 74 6f  defines TK_GE to
16da0 20 62 65 20 61 6e 20 69 6e 74 65 67 65 72 0a 2a   be an integer.*
16db0 2a 20 63 6f 64 65 20 72 65 70 72 65 73 65 6e 74  * code represent
16dc0 69 6e 67 20 74 68 65 20 22 3e 3d 22 20 6f 70 65  ing the ">=" ope
16dd0 72 61 74 6f 72 2e 20 54 68 69 73 20 73 61 6d 65  rator. This same
16de0 20 69 6e 74 65 67 65 72 20 63 6f 64 65 20 69 73   integer code is
16df0 20 72 65 75 73 65 64 0a 2a 2a 20 74 6f 20 72 65   reused.** to re
16e00 70 72 65 73 65 6e 74 20 74 68 65 20 67 72 65 61  present the grea
16e10 74 65 72 2d 74 68 61 6e 2d 6f 72 2d 65 71 75 61  ter-than-or-equa
16e20 6c 2d 74 6f 20 6f 70 65 72 61 74 6f 72 20 69 6e  l-to operator in
16e30 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 0a   the expression.
16e40 2a 2a 20 74 72 65 65 2e 0a 2a 2a 0a 2a 2a 20 49  ** tree..**.** I
16e50 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
16e60 20 69 73 20 61 6e 20 53 51 4c 20 6c 69 74 65 72   is an SQL liter
16e70 61 6c 20 28 54 4b 5f 49 4e 54 45 47 45 52 2c 20  al (TK_INTEGER, 
16e80 54 4b 5f 46 4c 4f 41 54 2c 20 54 4b 5f 42 4c 4f  TK_FLOAT, TK_BLO
16e90 42 2c 0a 2a 2a 20 6f 72 20 54 4b 5f 53 54 52 49  B,.** or TK_STRI
16ea0 4e 47 29 2c 20 74 68 65 6e 20 45 78 70 72 2e 74  NG), then Expr.t
16eb0 6f 6b 65 6e 20 63 6f 6e 74 61 69 6e 73 20 74 68  oken contains th
16ec0 65 20 74 65 78 74 20 6f 66 20 74 68 65 20 53 51  e text of the SQ
16ed0 4c 20 6c 69 74 65 72 61 6c 2e 20 49 66 0a 2a 2a  L literal. If.**
16ee0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
16ef0 69 73 20 61 20 76 61 72 69 61 62 6c 65 20 28 54  is a variable (T
16f00 4b 5f 56 41 52 49 41 42 4c 45 29 2c 20 74 68 65  K_VARIABLE), the
16f10 6e 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e  n Expr.token con
16f20 74 61 69 6e 73 20 74 68 65 0a 2a 2a 20 76 61 72  tains the.** var
16f30 69 61 62 6c 65 20 6e 61 6d 65 2e 20 46 69 6e 61  iable name. Fina
16f40 6c 6c 79 2c 20 69 66 20 74 68 65 20 65 78 70 72  lly, if the expr
16f50 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
16f60 20 66 75 6e 63 74 69 6f 6e 20 28 54 4b 5f 46 55   function (TK_FU
16f70 4e 43 54 49 4f 4e 29 2c 0a 2a 2a 20 74 68 65 6e  NCTION),.** then
16f80 20 45 78 70 72 2e 74 6f 6b 65 6e 20 63 6f 6e 74   Expr.token cont
16f90 61 69 6e 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  ains the name of
16fa0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 2e 0a 2a   the function..*
16fb0 2a 0a 2a 2a 20 45 78 70 72 2e 70 52 69 67 68 74  *.** Expr.pRight
16fc0 20 61 6e 64 20 45 78 70 72 2e 70 4c 65 66 74 20   and Expr.pLeft 
16fd0 61 72 65 20 74 68 65 20 6c 65 66 74 20 61 6e 64  are the left and
16fe0 20 72 69 67 68 74 20 73 75 62 65 78 70 72 65 73   right subexpres
16ff0 73 69 6f 6e 73 20 6f 66 20 61 0a 2a 2a 20 62 69  sions of a.** bi
17000 6e 61 72 79 20 6f 70 65 72 61 74 6f 72 2e 20 45  nary operator. E
17010 69 74 68 65 72 20 6f 72 20 62 6f 74 68 20 6d 61  ither or both ma
17020 79 20 62 65 20 4e 55 4c 4c 2e 0a 2a 2a 0a 2a 2a  y be NULL..**.**
17030 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69 73   Expr.x.pList is
17040 20 61 20 6c 69 73 74 20 6f 66 20 61 72 67 75 6d   a list of argum
17050 65 6e 74 73 20 69 66 20 74 68 65 20 65 78 70 72  ents if the expr
17060 65 73 73 69 6f 6e 20 69 73 20 61 6e 20 53 51 4c  ession is an SQL
17070 20 66 75 6e 63 74 69 6f 6e 2c 0a 2a 2a 20 61 20   function,.** a 
17080 43 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 20  CASE expression 
17090 6f 72 20 61 6e 20 49 4e 20 65 78 70 72 65 73 73  or an IN express
170a0 69 6f 6e 20 6f 66 20 74 68 65 20 66 6f 72 6d 20  ion of the form 
170b0 22 3c 6c 68 73 3e 20 49 4e 20 28 3c 79 3e 2c 20  "<lhs> IN (<y>, 
170c0 3c 7a 3e 2e 2e 2e 29 22 2e 0a 2a 2a 20 45 78 70  <z>...)"..** Exp
170d0 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20 75  r.x.pSelect is u
170e0 73 65 64 20 69 66 20 74 68 65 20 65 78 70 72 65  sed if the expre
170f0 73 73 69 6f 6e 20 69 73 20 61 20 73 75 62 2d 73  ssion is a sub-s
17100 65 6c 65 63 74 20 6f 72 20 61 6e 20 65 78 70 72  elect or an expr
17110 65 73 73 69 6f 6e 20 6f 66 0a 2a 2a 20 74 68 65  ession of.** the
17120 20 66 6f 72 6d 20 22 3c 6c 68 73 3e 20 49 4e 20   form "<lhs> IN 
17130 28 53 45 4c 45 43 54 20 2e 2e 2e 29 22 2e 20 49  (SELECT ...)". I
17140 66 20 74 68 65 20 45 50 5f 78 49 73 53 65 6c 65  f the EP_xIsSele
17150 63 74 20 62 69 74 20 69 73 20 73 65 74 20 69 6e  ct bit is set in
17160 20 74 68 65 0a 2a 2a 20 45 78 70 72 2e 66 6c 61   the.** Expr.fla
17170 67 73 20 6d 61 73 6b 2c 20 74 68 65 6e 20 45 78  gs mask, then Ex
17180 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 69 73 20  pr.x.pSelect is 
17190 76 61 6c 69 64 2e 20 4f 74 68 65 72 77 69 73 65  valid. Otherwise
171a0 2c 20 45 78 70 72 2e 78 2e 70 4c 69 73 74 20 69  , Expr.x.pList i
171b0 73 0a 2a 2a 20 76 61 6c 69 64 2e 0a 2a 2a 0a 2a  s.** valid..**.*
171c0 2a 20 41 6e 20 65 78 70 72 65 73 73 69 6f 6e 20  * An expression 
171d0 6f 66 20 74 68 65 20 66 6f 72 6d 20 49 44 20 6f  of the form ID o
171e0 72 20 49 44 2e 49 44 20 72 65 66 65 72 73 20 74  r ID.ID refers t
171f0 6f 20 61 20 63 6f 6c 75 6d 6e 20 69 6e 20 61 20  o a column in a 
17200 74 61 62 6c 65 2e 0a 2a 2a 20 46 6f 72 20 73 75  table..** For su
17210 63 68 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  ch expressions, 
17220 45 78 70 72 2e 6f 70 20 69 73 20 73 65 74 20 74  Expr.op is set t
17230 6f 20 54 4b 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20  o TK_COLUMN and 
17240 45 78 70 72 2e 69 54 61 62 6c 65 20 69 73 0a 2a  Expr.iTable is.*
17250 2a 20 74 68 65 20 69 6e 74 65 67 65 72 20 63 75  * the integer cu
17260 72 73 6f 72 20 6e 75 6d 62 65 72 20 6f 66 20 61  rsor number of a
17270 20 56 44 42 45 20 63 75 72 73 6f 72 20 70 6f 69   VDBE cursor poi
17280 6e 74 69 6e 67 20 74 6f 20 74 68 61 74 20 74 61  nting to that ta
17290 62 6c 65 20 61 6e 64 0a 2a 2a 20 45 78 70 72 2e  ble and.** Expr.
172a0 69 43 6f 6c 75 6d 6e 20 69 73 20 74 68 65 20 63  iColumn is the c
172b0 6f 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 66 6f 72  olumn number for
172c0 20 74 68 65 20 73 70 65 63 69 66 69 63 20 63 6f   the specific co
172d0 6c 75 6d 6e 2e 20 20 49 66 20 74 68 65 0a 2a 2a  lumn.  If the.**
172e0 20 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 75   expression is u
172f0 73 65 64 20 61 73 20 61 20 72 65 73 75 6c 74 20  sed as a result 
17300 69 6e 20 61 6e 20 61 67 67 72 65 67 61 74 65 20  in an aggregate 
17310 53 45 4c 45 43 54 2c 20 74 68 65 6e 20 74 68 65  SELECT, then the
17320 0a 2a 2a 20 76 61 6c 75 65 20 69 73 20 61 6c 73  .** value is als
17330 6f 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  o stored in the 
17340 45 78 70 72 2e 69 41 67 67 20 63 6f 6c 75 6d 6e  Expr.iAgg column
17350 20 69 6e 20 74 68 65 20 61 67 67 72 65 67 61 74   in the aggregat
17360 65 20 73 6f 20 74 68 61 74 0a 2a 2a 20 69 74 20  e so that.** it 
17370 63 61 6e 20 62 65 20 61 63 63 65 73 73 65 64 20  can be accessed 
17380 61 66 74 65 72 20 61 6c 6c 20 61 67 67 72 65 67  after all aggreg
17390 61 74 65 73 20 61 72 65 20 63 6f 6d 70 75 74 65  ates are compute
173a0 64 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  d..**.** If the 
173b0 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 6e  expression is an
173c0 20 75 6e 62 6f 75 6e 64 20 76 61 72 69 61 62 6c   unbound variabl
173d0 65 20 6d 61 72 6b 65 72 20 28 61 20 71 75 65 73  e marker (a ques
173e0 74 69 6f 6e 20 6d 61 72 6b 0a 2a 2a 20 63 68 61  tion mark.** cha
173f0 72 61 63 74 65 72 20 27 3f 27 20 69 6e 20 74 68  racter '?' in th
17400 65 20 6f 72 69 67 69 6e 61 6c 20 53 51 4c 29 20  e original SQL) 
17410 74 68 65 6e 20 74 68 65 20 45 78 70 72 2e 69 54  then the Expr.iT
17420 61 62 6c 65 20 68 6f 6c 64 73 20 74 68 65 20 69  able holds the i
17430 6e 64 65 78 0a 2a 2a 20 6e 75 6d 62 65 72 20 66  ndex.** number f
17440 6f 72 20 74 68 61 74 20 76 61 72 69 61 62 6c 65  or that variable
17450 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 65  ..**.** If the e
17460 78 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 73  xpression is a s
17470 75 62 71 75 65 72 79 20 74 68 65 6e 20 45 78 70  ubquery then Exp
17480 72 2e 69 43 6f 6c 75 6d 6e 20 68 6f 6c 64 73 20  r.iColumn holds 
17490 61 6e 20 69 6e 74 65 67 65 72 0a 2a 2a 20 72 65  an integer.** re
174a0 67 69 73 74 65 72 20 6e 75 6d 62 65 72 20 63 6f  gister number co
174b0 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 72 65 73  ntaining the res
174c0 75 6c 74 20 6f 66 20 74 68 65 20 73 75 62 71 75  ult of the subqu
174d0 65 72 79 2e 20 20 49 66 20 74 68 65 0a 2a 2a 20  ery.  If the.** 
174e0 73 75 62 71 75 65 72 79 20 67 69 76 65 73 20 61  subquery gives a
174f0 20 63 6f 6e 73 74 61 6e 74 20 72 65 73 75 6c 74   constant result
17500 2c 20 74 68 65 6e 20 69 54 61 62 6c 65 20 69 73  , then iTable is
17510 20 2d 31 2e 20 20 49 66 20 74 68 65 20 73 75 62   -1.  If the sub
17520 71 75 65 72 79 0a 2a 2a 20 67 69 76 65 73 20 61  query.** gives a
17530 20 64 69 66 66 65 72 65 6e 74 20 61 6e 73 77 65   different answe
17540 72 20 61 74 20 64 69 66 66 65 72 65 6e 74 20 74  r at different t
17550 69 6d 65 73 20 64 75 72 69 6e 67 20 73 74 61 74  imes during stat
17560 65 6d 65 6e 74 20 70 72 6f 63 65 73 73 69 6e 67  ement processing
17570 0a 2a 2a 20 74 68 65 6e 20 69 54 61 62 6c 65 20  .** then iTable 
17580 69 73 20 74 68 65 20 61 64 64 72 65 73 73 20 6f  is the address o
17590 66 20 61 20 73 75 62 72 6f 75 74 69 6e 65 20 74  f a subroutine t
175a0 68 61 74 20 63 6f 6d 70 75 74 65 73 20 74 68 65  hat computes the
175b0 20 73 75 62 71 75 65 72 79 2e 0a 2a 2a 0a 2a 2a   subquery..**.**
175c0 20 49 66 20 74 68 65 20 45 78 70 72 20 69 73 20   If the Expr is 
175d0 6f 66 20 74 79 70 65 20 4f 50 5f 43 6f 6c 75 6d  of type OP_Colum
175e0 6e 2c 20 61 6e 64 20 74 68 65 20 74 61 62 6c 65  n, and the table
175f0 20 69 74 20 69 73 20 73 65 6c 65 63 74 69 6e 67   it is selecting
17600 20 66 72 6f 6d 0a 2a 2a 20 69 73 20 61 20 64 69   from.** is a di
17610 73 6b 20 74 61 62 6c 65 20 6f 72 20 74 68 65 20  sk table or the 
17620 22 6f 6c 64 2e 2a 22 20 70 73 65 75 64 6f 2d 74  "old.*" pseudo-t
17630 61 62 6c 65 2c 20 74 68 65 6e 20 70 54 61 62 20  able, then pTab 
17640 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 0a 2a 2a  points to the.**
17650 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74   corresponding t
17660 61 62 6c 65 20 64 65 66 69 6e 69 74 69 6f 6e 2e  able definition.
17670 0a 2a 2a 0a 2a 2a 20 41 4c 4c 4f 43 41 54 49 4f  .**.** ALLOCATIO
17680 4e 20 4e 4f 54 45 53 3a 0a 2a 2a 0a 2a 2a 20 45  N NOTES:.**.** E
17690 78 70 72 20 6f 62 6a 65 63 74 73 20 63 61 6e 20  xpr objects can 
176a0 75 73 65 20 61 20 6c 6f 74 20 6f 66 20 6d 65 6d  use a lot of mem
176b0 6f 72 79 20 73 70 61 63 65 20 69 6e 20 64 61 74  ory space in dat
176c0 61 62 61 73 65 20 73 63 68 65 6d 61 2e 20 20 54  abase schema.  T
176d0 6f 0a 2a 2a 20 68 65 6c 70 20 72 65 64 75 63 65  o.** help reduce
176e0 20 6d 65 6d 6f 72 79 20 72 65 71 75 69 72 65 6d   memory requirem
176f0 65 6e 74 73 2c 20 73 6f 6d 65 74 69 6d 65 73 20  ents, sometimes 
17700 61 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 77  an Expr object w
17710 69 6c 6c 20 62 65 0a 2a 2a 20 74 72 75 6e 63 61  ill be.** trunca
17720 74 65 64 2e 20 20 41 6e 64 20 74 6f 20 72 65 64  ted.  And to red
17730 75 63 65 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  uce the number o
17740 66 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74  f memory allocat
17750 69 6f 6e 73 2c 20 73 6f 6d 65 74 69 6d 65 73 0a  ions, sometimes.
17760 2a 2a 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45  ** two or more E
17770 78 70 72 20 6f 62 6a 65 63 74 73 20 77 69 6c 6c  xpr objects will
17780 20 62 65 20 73 74 6f 72 65 64 20 69 6e 20 61 20   be stored in a 
17790 73 69 6e 67 6c 65 20 6d 65 6d 6f 72 79 20 61 6c  single memory al
177a0 6c 6f 63 61 74 69 6f 6e 2c 0a 2a 2a 20 74 6f 67  location,.** tog
177b0 65 74 68 65 72 20 77 69 74 68 20 45 78 70 72 2e  ether with Expr.
177c0 7a 54 6f 6b 65 6e 20 73 74 72 69 6e 67 73 2e 0a  zToken strings..
177d0 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 45 50 5f  **.** If the EP_
177e0 52 65 64 75 63 65 64 20 61 6e 64 20 45 50 5f 54  Reduced and EP_T
177f0 6f 6b 65 6e 4f 6e 6c 79 20 66 6c 61 67 73 20 61  okenOnly flags a
17800 72 65 20 73 65 74 20 77 68 65 6e 0a 2a 2a 20 61  re set when.** a
17810 6e 20 45 78 70 72 20 6f 62 6a 65 63 74 20 69 73  n Expr object is
17820 20 74 72 75 6e 63 61 74 65 64 2e 20 20 57 68 65   truncated.  Whe
17830 6e 20 45 50 5f 52 65 64 75 63 65 64 20 69 73 20  n EP_Reduced is 
17840 73 65 74 2c 20 74 68 65 6e 20 61 6c 6c 0a 2a 2a  set, then all.**
17850 20 74 68 65 20 63 68 69 6c 64 20 45 78 70 72 20   the child Expr 
17860 6f 62 6a 65 63 74 73 20 69 6e 20 74 68 65 20 45  objects in the E
17870 78 70 72 2e 70 4c 65 66 74 20 61 6e 64 20 45 78  xpr.pLeft and Ex
17880 70 72 2e 70 52 69 67 68 74 20 73 75 62 74 72 65  pr.pRight subtre
17890 65 73 0a 2a 2a 20 61 72 65 20 63 6f 6e 74 61 69  es.** are contai
178a0 6e 65 64 20 77 69 74 68 69 6e 20 74 68 65 20 73  ned within the s
178b0 61 6d 65 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ame memory alloc
178c0 61 74 69 6f 6e 2e 20 20 4e 6f 74 65 2c 20 68 6f  ation.  Note, ho
178d0 77 65 76 65 72 2c 20 74 68 61 74 0a 2a 2a 20 74  wever, that.** t
178e0 68 65 20 73 75 62 74 72 65 65 73 20 69 6e 20 45  he subtrees in E
178f0 78 70 72 2e 78 2e 70 4c 69 73 74 20 6f 72 20 45  xpr.x.pList or E
17900 78 70 72 2e 78 2e 70 53 65 6c 65 63 74 20 61 72  xpr.x.pSelect ar
17910 65 20 61 6c 77 61 79 73 20 73 65 70 61 72 61 74  e always separat
17920 65 6c 79 0a 2a 2a 20 61 6c 6c 6f 63 61 74 65 64  ely.** allocated
17930 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20  , regardless of 
17940 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45  whether or not E
17950 50 5f 52 65 64 75 63 65 64 20 69 73 20 73 65 74  P_Reduced is set
17960 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 45 78 70 72  ..*/.struct Expr
17970 20 7b 0a 20 20 75 38 20 6f 70 3b 20 20 20 20 20   {.  u8 op;     
17980 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4f              /* O
17990 70 65 72 61 74 69 6f 6e 20 70 65 72 66 6f 72 6d  peration perform
179a0 65 64 20 62 79 20 74 68 69 73 20 6e 6f 64 65 20  ed by this node 
179b0 2a 2f 0a 20 20 63 68 61 72 20 61 66 66 69 6e 69  */.  char affini
179c0 74 79 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ty;         /* T
179d0 68 65 20 61 66 66 69 6e 69 74 79 20 6f 66 20 74  he affinity of t
179e0 68 65 20 63 6f 6c 75 6d 6e 20 6f 72 20 30 20 69  he column or 0 i
179f0 66 20 6e 6f 74 20 61 20 63 6f 6c 75 6d 6e 20 2a  f not a column *
17a00 2f 0a 20 20 75 33 32 20 66 6c 61 67 73 3b 20 20  /.  u32 flags;  
17a10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 61             /* Va
17a20 72 69 6f 75 73 20 66 6c 61 67 73 2e 20 20 45 50  rious flags.  EP
17a30 5f 2a 20 53 65 65 20 62 65 6c 6f 77 20 2a 2f 0a  _* See below */.
17a40 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20 63 68    union {.    ch
17a50 61 72 20 2a 7a 54 6f 6b 65 6e 3b 20 20 20 20 20  ar *zToken;     
17a60 20 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 76 61       /* Token va
17a70 6c 75 65 2e 20 5a 65 72 6f 20 74 65 72 6d 69 6e  lue. Zero termin
17a80 61 74 65 64 20 61 6e 64 20 64 65 71 75 6f 74 65  ated and dequote
17a90 64 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 56 61  d */.    int iVa
17aa0 6c 75 65 3b 20 20 20 20 20 20 20 20 20 20 20 20  lue;            
17ab0 2f 2a 20 4e 6f 6e 2d 6e 65 67 61 74 69 76 65 20  /* Non-negative 
17ac0 69 6e 74 65 67 65 72 20 76 61 6c 75 65 20 69 66  integer value if
17ad0 20 45 50 5f 49 6e 74 56 61 6c 75 65 20 2a 2f 0a   EP_IntValue */.
17ae0 20 20 7d 20 75 3b 0a 0a 20 20 2f 2a 20 49 66 20    } u;..  /* If 
17af0 74 68 65 20 45 50 5f 54 6f 6b 65 6e 4f 6e 6c 79  the EP_TokenOnly
17b00 20 66 6c 61 67 20 69 73 20 73 65 74 20 69 6e 20   flag is set in 
17b10 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73 20 6d  the Expr.flags m
17b20 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20 20 2a  ask, then no.  *
17b30 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c 6f 63  * space is alloc
17b40 61 74 65 64 20 66 6f 72 20 74 68 65 20 66 69 65  ated for the fie
17b50 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73 20 70  lds below this p
17b60 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d 70 74  oint. An attempt
17b70 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73 73 20   to.  ** access 
17b80 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75 6c 74  them will result
17b90 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74 20 6f   in a segfault o
17ba0 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e 0a 20  r malfunction.. 
17bb0 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   ***************
17bc0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17bd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17be0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17bf0 2a 2a 2a 2a 2a 2a 2f 0a 0a 20 20 45 78 70 72 20  ******/..  Expr 
17c00 2a 70 4c 65 66 74 3b 20 20 20 20 20 20 20 20 20  *pLeft;         
17c10 20 20 2f 2a 20 4c 65 66 74 20 73 75 62 6e 6f 64    /* Left subnod
17c20 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 52 69  e */.  Expr *pRi
17c30 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  ght;          /*
17c40 20 52 69 67 68 74 20 73 75 62 6e 6f 64 65 20 2a   Right subnode *
17c50 2f 0a 20 20 75 6e 69 6f 6e 20 7b 0a 20 20 20 20  /.  union {.    
17c60 45 78 70 72 4c 69 73 74 20 2a 70 4c 69 73 74 3b  ExprList *pList;
17c70 20 20 20 20 20 2f 2a 20 6f 70 20 3d 20 49 4e 2c       /* op = IN,
17c80 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54 2c   EXISTS, SELECT,
17c90 20 43 41 53 45 2c 20 46 55 4e 43 54 49 4f 4e 2c   CASE, FUNCTION,
17ca0 20 42 45 54 57 45 45 4e 20 2a 2f 0a 20 20 20 20   BETWEEN */.    
17cb0 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63 74 3b  Select *pSelect;
17cc0 20 20 20 20 20 2f 2a 20 45 50 5f 78 49 73 53 65       /* EP_xIsSe
17cd0 6c 65 63 74 20 61 6e 64 20 6f 70 20 3d 20 49 4e  lect and op = IN
17ce0 2c 20 45 58 49 53 54 53 2c 20 53 45 4c 45 43 54  , EXISTS, SELECT
17cf0 20 2a 2f 0a 20 20 7d 20 78 3b 0a 0a 20 20 2f 2a   */.  } x;..  /*
17d00 20 49 66 20 74 68 65 20 45 50 5f 52 65 64 75 63   If the EP_Reduc
17d10 65 64 20 66 6c 61 67 20 69 73 20 73 65 74 20 69  ed flag is set i
17d20 6e 20 74 68 65 20 45 78 70 72 2e 66 6c 61 67 73  n the Expr.flags
17d30 20 6d 61 73 6b 2c 20 74 68 65 6e 20 6e 6f 0a 20   mask, then no. 
17d40 20 2a 2a 20 73 70 61 63 65 20 69 73 20 61 6c 6c   ** space is all
17d50 6f 63 61 74 65 64 20 66 6f 72 20 74 68 65 20 66  ocated for the f
17d60 69 65 6c 64 73 20 62 65 6c 6f 77 20 74 68 69 73  ields below this
17d70 20 70 6f 69 6e 74 2e 20 41 6e 20 61 74 74 65 6d   point. An attem
17d80 70 74 20 74 6f 0a 20 20 2a 2a 20 61 63 63 65 73  pt to.  ** acces
17d90 73 20 74 68 65 6d 20 77 69 6c 6c 20 72 65 73 75  s them will resu
17da0 6c 74 20 69 6e 20 61 20 73 65 67 66 61 75 6c 74  lt in a segfault
17db0 20 6f 72 20 6d 61 6c 66 75 6e 63 74 69 6f 6e 2e   or malfunction.
17dc0 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .  *************
17dd0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17de0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17df0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
17e00 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 23 69 66 20 53  ********/..#if S
17e10 51 4c 49 54 45 5f 4d 41 58 5f 45 58 50 52 5f 44  QLITE_MAX_EXPR_D
17e20 45 50 54 48 3e 30 0a 20 20 69 6e 74 20 6e 48 65  EPTH>0.  int nHe
17e30 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20 20  ight;           
17e40 2f 2a 20 48 65 69 67 68 74 20 6f 66 20 74 68 65  /* Height of the
17e50 20 74 72 65 65 20 68 65 61 64 65 64 20 62 79 20   tree headed by 
17e60 74 68 69 73 20 6e 6f 64 65 20 2a 2f 0a 23 65 6e  this node */.#en
17e70 64 69 66 0a 20 20 69 6e 74 20 69 54 61 62 6c 65  dif.  int iTable
17e80 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
17e90 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 63 75 72 73 6f  TK_COLUMN: curso
17ea0 72 20 6e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c  r number of tabl
17eb0 65 20 68 6f 6c 64 69 6e 67 20 63 6f 6c 75 6d 6e  e holding column
17ec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
17ed0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f            ** TK_
17ee0 52 45 47 49 53 54 45 52 3a 20 72 65 67 69 73 74  REGISTER: regist
17ef0 65 72 20 6e 75 6d 62 65 72 0a 20 20 20 20 20 20  er number.      
17f00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f10 20 20 20 2a 2a 20 54 4b 5f 54 52 49 47 47 45 52     ** TK_TRIGGER
17f20 3a 20 31 20 2d 3e 20 6e 65 77 2c 20 30 20 2d 3e  : 1 -> new, 0 ->
17f30 20 6f 6c 64 0a 20 20 20 20 20 20 20 20 20 20 20   old.           
17f40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
17f50 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 3a 20 20 31   EP_Unlikely:  1
17f60 33 34 32 31 37 37 32 38 20 74 69 6d 65 73 20 6c  34217728 times l
17f70 69 6b 65 6c 69 68 6f 6f 64 0a 20 20 20 20 20 20  ikelihood.      
17f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17f90 20 20 20 2a 2a 20 54 4b 5f 53 45 4c 45 43 54 3a     ** TK_SELECT:
17fa0 20 31 73 74 20 72 65 67 69 73 74 65 72 20 6f 66   1st register of
17fb0 20 72 65 73 75 6c 74 20 76 65 63 74 6f 72 20 2a   result vector *
17fc0 2f 0a 20 20 79 6e 56 61 72 20 69 43 6f 6c 75 6d  /.  ynVar iColum
17fd0 6e 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b  n;         /* TK
17fe0 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75 6d 6e 20  _COLUMN: column 
17ff0 69 6e 64 65 78 2e 20 20 2d 31 20 66 6f 72 20 72  index.  -1 for r
18000 6f 77 69 64 2e 0a 20 20 20 20 20 20 20 20 20 20  owid..          
18010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a                 *
18020 2a 20 54 4b 5f 56 41 52 49 41 42 4c 45 3a 20 76  * TK_VARIABLE: v
18030 61 72 69 61 62 6c 65 20 6e 75 6d 62 65 72 20 28  ariable number (
18040 61 6c 77 61 79 73 20 3e 3d 20 31 29 2e 0a 20 20  always >= 1)..  
18050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18060 20 20 20 20 20 20 20 2a 2a 20 54 4b 5f 53 45 4c         ** TK_SEL
18070 45 43 54 5f 43 4f 4c 55 4d 4e 3a 20 63 6f 6c 75  ECT_COLUMN: colu
18080 6d 6e 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74  mn of the result
18090 20 76 65 63 74 6f 72 20 2a 2f 0a 20 20 69 31 36   vector */.  i16
180a0 20 69 41 67 67 3b 20 20 20 20 20 20 20 20 20 20   iAgg;          
180b0 20 20 20 20 2f 2a 20 57 68 69 63 68 20 65 6e 74      /* Which ent
180c0 72 79 20 69 6e 20 70 41 67 67 49 6e 66 6f 2d 3e  ry in pAggInfo->
180d0 61 43 6f 6c 5b 5d 20 6f 72 20 2d 3e 61 46 75 6e  aCol[] or ->aFun
180e0 63 5b 5d 20 2a 2f 0a 20 20 69 31 36 20 69 52 69  c[] */.  i16 iRi
180f0 67 68 74 4a 6f 69 6e 54 61 62 6c 65 3b 20 20 20  ghtJoinTable;   
18100 2f 2a 20 49 66 20 45 50 5f 46 72 6f 6d 4a 6f 69  /* If EP_FromJoi
18110 6e 2c 20 74 68 65 20 72 69 67 68 74 20 74 61 62  n, the right tab
18120 6c 65 20 6f 66 20 74 68 65 20 6a 6f 69 6e 20 2a  le of the join *
18130 2f 0a 20 20 75 38 20 6f 70 32 3b 20 20 20 20 20  /.  u8 op2;     
18140 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 4b             /* TK
18150 5f 52 45 47 49 53 54 45 52 3a 20 6f 72 69 67 69  _REGISTER: origi
18160 6e 61 6c 20 76 61 6c 75 65 20 6f 66 20 45 78 70  nal value of Exp
18170 72 2e 6f 70 0a 20 20 20 20 20 20 20 20 20 20 20  r.op.           
18180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 2a                **
18190 20 54 4b 5f 43 4f 4c 55 4d 4e 3a 20 74 68 65 20   TK_COLUMN: the 
181a0 76 61 6c 75 65 20 6f 66 20 70 35 20 66 6f 72 20  value of p5 for 
181b0 4f 50 5f 43 6f 6c 75 6d 6e 0a 20 20 20 20 20 20  OP_Column.      
181c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
181d0 20 20 20 2a 2a 20 54 4b 5f 41 47 47 5f 46 55 4e     ** TK_AGG_FUN
181e0 43 54 49 4f 4e 3a 20 6e 65 73 74 69 6e 67 20 64  CTION: nesting d
181f0 65 70 74 68 20 2a 2f 0a 20 20 41 67 67 49 6e 66  epth */.  AggInf
18200 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20 20 20 20  o *pAggInfo;    
18210 20 2f 2a 20 55 73 65 64 20 62 79 20 54 4b 5f 41   /* Used by TK_A
18220 47 47 5f 43 4f 4c 55 4d 4e 20 61 6e 64 20 54 4b  GG_COLUMN and TK
18230 5f 41 47 47 5f 46 55 4e 43 54 49 4f 4e 20 2a 2f  _AGG_FUNCTION */
18240 0a 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20  .  Table *pTab; 
18250 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 61 62            /* Tab
18260 6c 65 20 66 6f 72 20 54 4b 5f 43 4f 4c 55 4d 4e  le for TK_COLUMN
18270 20 65 78 70 72 65 73 73 69 6f 6e 73 2e 20 2a 2f   expressions. */
18280 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 66  .};../*.** The f
18290 6f 6c 6c 6f 77 69 6e 67 20 61 72 65 20 74 68 65  ollowing are the
182a0 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 62 69 74   meanings of bit
182b0 73 20 69 6e 20 74 68 65 20 45 78 70 72 2e 66 6c  s in the Expr.fl
182c0 61 67 73 20 66 69 65 6c 64 2e 0a 2a 2f 0a 23 64  ags field..*/.#d
182d0 65 66 69 6e 65 20 45 50 5f 46 72 6f 6d 4a 6f 69  efine EP_FromJoi
182e0 6e 20 20 30 78 30 30 30 30 30 31 20 2f 2a 20 4f  n  0x000001 /* O
182f0 72 69 67 69 6e 61 74 65 73 20 69 6e 20 4f 4e 2f  riginates in ON/
18300 55 53 49 4e 47 20 63 6c 61 75 73 65 20 6f 66 20  USING clause of 
18310 6f 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64  outer join */.#d
18320 65 66 69 6e 65 20 45 50 5f 41 67 67 20 20 20 20  efine EP_Agg    
18330 20 20 20 30 78 30 30 30 30 30 32 20 2f 2a 20 43     0x000002 /* C
18340 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
18350 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
18360 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23 64 65 66 69  nctions */.#defi
18370 6e 65 20 45 50 5f 52 65 73 6f 6c 76 65 64 20 20  ne EP_Resolved  
18380 30 78 30 30 30 30 30 34 20 2f 2a 20 49 44 73 20  0x000004 /* IDs 
18390 68 61 76 65 20 62 65 65 6e 20 72 65 73 6f 6c 76  have been resolv
183a0 65 64 20 74 6f 20 43 4f 4c 55 4d 4e 73 20 2a 2f  ed to COLUMNs */
183b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
183c0 20 20 20 2f 2a 20 30 78 30 30 30 30 30 38 20 2f     /* 0x000008 /
183d0 2f 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20  / available for 
183e0 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  use */.#define E
183f0 50 5f 44 69 73 74 69 6e 63 74 20 20 30 78 30 30  P_Distinct  0x00
18400 30 30 31 30 20 2f 2a 20 41 67 67 72 65 67 61 74  0010 /* Aggregat
18410 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 74 68 20  e function with 
18420 44 49 53 54 49 4e 43 54 20 6b 65 79 77 6f 72 64  DISTINCT keyword
18430 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 56   */.#define EP_V
18440 61 72 53 65 6c 65 63 74 20 30 78 30 30 30 30 32  arSelect 0x00002
18450 30 20 2f 2a 20 70 53 65 6c 65 63 74 20 69 73 20  0 /* pSelect is 
18460 63 6f 72 72 65 6c 61 74 65 64 2c 20 6e 6f 74 20  correlated, not 
18470 63 6f 6e 73 74 61 6e 74 20 2a 2f 0a 23 64 65 66  constant */.#def
18480 69 6e 65 20 45 50 5f 44 62 6c 51 75 6f 74 65 64  ine EP_DblQuoted
18490 20 30 78 30 30 30 30 34 30 20 2f 2a 20 74 6f 6b   0x000040 /* tok
184a0 65 6e 2e 7a 20 77 61 73 20 6f 72 69 67 69 6e 61  en.z was origina
184b0 6c 6c 79 20 69 6e 20 22 2e 2e 2e 22 20 2a 2f 0a  lly in "..." */.
184c0 23 64 65 66 69 6e 65 20 45 50 5f 49 6e 66 69 78  #define EP_Infix
184d0 46 75 6e 63 20 30 78 30 30 30 30 38 30 20 2f 2a  Func 0x000080 /*
184e0 20 54 72 75 65 20 66 6f 72 20 61 6e 20 69 6e 66   True for an inf
184f0 69 78 20 66 75 6e 63 74 69 6f 6e 3a 20 4c 49 4b  ix function: LIK
18500 45 2c 20 47 4c 4f 42 2c 20 65 74 63 20 2a 2f 0a  E, GLOB, etc */.
18510 23 64 65 66 69 6e 65 20 45 50 5f 43 6f 6c 6c 61  #define EP_Colla
18520 74 65 20 20 20 30 78 30 30 30 31 30 30 20 2f 2a  te   0x000100 /*
18530 20 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61   Tree contains a
18540 20 54 4b 5f 43 4f 4c 4c 41 54 45 20 6f 70 65 72   TK_COLLATE oper
18550 61 74 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20  ator */.#define 
18560 45 50 5f 47 65 6e 65 72 69 63 20 20 20 30 78 30  EP_Generic   0x0
18570 30 30 32 30 30 20 2f 2a 20 49 67 6e 6f 72 65 20  00200 /* Ignore 
18580 43 4f 4c 4c 41 54 45 20 6f 72 20 61 66 66 69 6e  COLLATE or affin
18590 69 74 79 20 6f 6e 20 74 68 69 73 20 74 72 65 65  ity on this tree
185a0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 49   */.#define EP_I
185b0 6e 74 56 61 6c 75 65 20 20 30 78 30 30 30 34 30  ntValue  0x00040
185c0 30 20 2f 2a 20 49 6e 74 65 67 65 72 20 76 61 6c  0 /* Integer val
185d0 75 65 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20  ue contained in 
185e0 75 2e 69 56 61 6c 75 65 20 2a 2f 0a 23 64 65 66  u.iValue */.#def
185f0 69 6e 65 20 45 50 5f 78 49 73 53 65 6c 65 63 74  ine EP_xIsSelect
18600 20 30 78 30 30 30 38 30 30 20 2f 2a 20 78 2e 70   0x000800 /* x.p
18610 53 65 6c 65 63 74 20 69 73 20 76 61 6c 69 64 20  Select is valid 
18620 28 6f 74 68 65 72 77 69 73 65 20 78 2e 70 4c 69  (otherwise x.pLi
18630 73 74 20 69 73 29 20 2a 2f 0a 23 64 65 66 69 6e  st is) */.#defin
18640 65 20 45 50 5f 53 6b 69 70 20 20 20 20 20 20 30  e EP_Skip      0
18650 78 30 30 31 30 30 30 20 2f 2a 20 43 4f 4c 4c 41  x001000 /* COLLA
18660 54 45 2c 20 41 53 2c 20 6f 72 20 55 4e 4c 49 4b  TE, AS, or UNLIK
18670 45 4c 59 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ELY */.#define E
18680 50 5f 52 65 64 75 63 65 64 20 20 20 30 78 30 30  P_Reduced   0x00
18690 32 30 30 30 20 2f 2a 20 45 78 70 72 20 73 74 72  2000 /* Expr str
186a0 75 63 74 20 45 58 50 52 5f 52 45 44 55 43 45 44  uct EXPR_REDUCED
186b0 53 49 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20  SIZE bytes only 
186c0 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 54 6f  */.#define EP_To
186d0 6b 65 6e 4f 6e 6c 79 20 30 78 30 30 34 30 30 30  kenOnly 0x004000
186e0 20 2f 2a 20 45 78 70 72 20 73 74 72 75 63 74 20   /* Expr struct 
186f0 45 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49  EXPR_TOKENONLYSI
18700 5a 45 20 62 79 74 65 73 20 6f 6e 6c 79 20 2a 2f  ZE bytes only */
18710 0a 23 64 65 66 69 6e 65 20 45 50 5f 53 74 61 74  .#define EP_Stat
18720 69 63 20 20 20 20 30 78 30 30 38 30 30 30 20 2f  ic    0x008000 /
18730 2a 20 48 65 6c 64 20 69 6e 20 6d 65 6d 6f 72 79  * Held in memory
18740 20 6e 6f 74 20 6f 62 74 61 69 6e 65 64 20 66 72   not obtained fr
18750 6f 6d 20 6d 61 6c 6c 6f 63 28 29 20 2a 2f 0a 23  om malloc() */.#
18760 64 65 66 69 6e 65 20 45 50 5f 4d 65 6d 54 6f 6b  define EP_MemTok
18770 65 6e 20 20 30 78 30 31 30 30 30 30 20 2f 2a 20  en  0x010000 /* 
18780 4e 65 65 64 20 74 6f 20 73 71 6c 69 74 65 33 44  Need to sqlite3D
18790 62 46 72 65 65 28 29 20 45 78 70 72 2e 7a 54 6f  bFree() Expr.zTo
187a0 6b 65 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  ken */.#define E
187b0 50 5f 4e 6f 52 65 64 75 63 65 20 20 30 78 30 32  P_NoReduce  0x02
187c0 30 30 30 30 20 2f 2a 20 43 61 6e 6e 6f 74 20 45  0000 /* Cannot E
187d0 58 50 52 44 55 50 5f 52 45 44 55 43 45 20 74 68  XPRDUP_REDUCE th
187e0 69 73 20 45 78 70 72 20 2a 2f 0a 23 64 65 66 69  is Expr */.#defi
187f0 6e 65 20 45 50 5f 55 6e 6c 69 6b 65 6c 79 20 20  ne EP_Unlikely  
18800 30 78 30 34 30 30 30 30 20 2f 2a 20 75 6e 6c 69  0x040000 /* unli
18810 6b 65 6c 79 28 29 20 6f 72 20 6c 69 6b 65 6c 69  kely() or likeli
18820 68 6f 6f 64 28 29 20 66 75 6e 63 74 69 6f 6e 20  hood() function 
18830 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 6f  */.#define EP_Co
18840 6e 73 74 46 75 6e 63 20 30 78 30 38 30 30 30 30  nstFunc 0x080000
18850 20 2f 2a 20 41 20 53 51 4c 49 54 45 5f 46 55 4e   /* A SQLITE_FUN
18860 43 5f 43 4f 4e 53 54 41 4e 54 20 6f 72 20 5f 53  C_CONSTANT or _S
18870 4c 4f 43 48 4e 47 20 66 75 6e 63 74 69 6f 6e 20  LOCHNG function 
18880 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50 5f 43 61  */.#define EP_Ca
18890 6e 42 65 4e 75 6c 6c 20 30 78 31 30 30 30 30 30  nBeNull 0x100000
188a0 20 2f 2a 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20   /* Can be null 
188b0 64 65 73 70 69 74 65 20 4e 4f 54 20 4e 55 4c 4c  despite NOT NULL
188c0 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 23   constraint */.#
188d0 64 65 66 69 6e 65 20 45 50 5f 53 75 62 71 75 65  define EP_Subque
188e0 72 79 20 20 30 78 32 30 30 30 30 30 20 2f 2a 20  ry  0x200000 /* 
188f0 54 72 65 65 20 63 6f 6e 74 61 69 6e 73 20 61 20  Tree contains a 
18900 54 4b 5f 53 45 4c 45 43 54 20 6f 70 65 72 61 74  TK_SELECT operat
18910 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45 50  or */.#define EP
18920 5f 41 6c 69 61 73 20 20 20 20 20 30 78 34 30 30  _Alias     0x400
18930 30 30 30 20 2f 2a 20 49 73 20 61 6e 20 61 6c 69  000 /* Is an ali
18940 61 73 20 66 6f 72 20 61 20 72 65 73 75 6c 74 20  as for a result 
18950 73 65 74 20 63 6f 6c 75 6d 6e 20 2a 2f 0a 23 64  set column */.#d
18960 65 66 69 6e 65 20 45 50 5f 4c 65 61 66 20 20 20  efine EP_Leaf   
18970 20 20 20 30 78 38 30 30 30 30 30 20 2f 2a 20 45     0x800000 /* E
18980 78 70 72 2e 70 4c 65 66 74 2c 20 2e 70 52 69 67  xpr.pLeft, .pRig
18990 68 74 2c 20 2e 75 2e 70 53 65 6c 65 63 74 20 61  ht, .u.pSelect a
189a0 6c 6c 20 4e 55 4c 4c 20 2a 2f 0a 0a 2f 2a 0a 2a  ll NULL */../*.*
189b0 2a 20 43 6f 6d 62 69 6e 61 74 69 6f 6e 73 20 6f  * Combinations o
189c0 66 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20 45 50  f two or more EP
189d0 5f 2a 20 66 6c 61 67 73 0a 2a 2f 0a 23 64 65 66  _* flags.*/.#def
189e0 69 6e 65 20 45 50 5f 50 72 6f 70 61 67 61 74 65  ine EP_Propagate
189f0 20 28 45 50 5f 43 6f 6c 6c 61 74 65 7c 45 50 5f   (EP_Collate|EP_
18a00 53 75 62 71 75 65 72 79 29 20 2f 2a 20 50 72 6f  Subquery) /* Pro
18a10 70 61 67 61 74 65 20 74 68 65 73 65 20 62 69 74  pagate these bit
18a20 73 20 75 70 20 74 72 65 65 20 2a 2f 0a 0a 2f 2a  s up tree */../*
18a30 0a 2a 2a 20 54 68 65 73 65 20 6d 61 63 72 6f 73  .** These macros
18a40 20 63 61 6e 20 62 65 20 75 73 65 64 20 74 6f 20   can be used to 
18a50 74 65 73 74 2c 20 73 65 74 2c 20 6f 72 20 63 6c  test, set, or cl
18a60 65 61 72 20 62 69 74 73 20 69 6e 20 74 68 65 0a  ear bits in the.
18a70 2a 2a 20 45 78 70 72 2e 66 6c 61 67 73 20 66 69  ** Expr.flags fi
18a80 65 6c 64 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  eld..*/.#define 
18a90 45 78 70 72 48 61 73 50 72 6f 70 65 72 74 79 28  ExprHasProperty(
18aa0 45 2c 50 29 20 20 20 20 20 28 28 28 45 29 2d 3e  E,P)     (((E)->
18ab0 66 6c 61 67 73 26 28 50 29 29 21 3d 30 29 0a 23  flags&(P))!=0).#
18ac0 64 65 66 69 6e 65 20 45 78 70 72 48 61 73 41 6c  define ExprHasAl
18ad0 6c 50 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20  lProperty(E,P)  
18ae0 28 28 28 45 29 2d 3e 66 6c 61 67 73 26 28 50 29  (((E)->flags&(P)
18af0 29 3d 3d 28 50 29 29 0a 23 64 65 66 69 6e 65 20  )==(P)).#define 
18b00 45 78 70 72 53 65 74 50 72 6f 70 65 72 74 79 28  ExprSetProperty(
18b10 45 2c 50 29 20 20 20 20 20 28 45 29 2d 3e 66 6c  E,P)     (E)->fl
18b20 61 67 73 7c 3d 28 50 29 0a 23 64 65 66 69 6e 65  ags|=(P).#define
18b30 20 45 78 70 72 43 6c 65 61 72 50 72 6f 70 65 72   ExprClearProper
18b40 74 79 28 45 2c 50 29 20 20 20 28 45 29 2d 3e 66  ty(E,P)   (E)->f
18b50 6c 61 67 73 26 3d 7e 28 50 29 0a 0a 2f 2a 20 54  lags&=~(P)../* T
18b60 68 65 20 45 78 70 72 53 65 74 56 56 41 50 72 6f  he ExprSetVVAPro
18b70 70 65 72 74 79 28 29 20 6d 61 63 72 6f 20 69 73  perty() macro is
18b80 20 75 73 65 64 20 66 6f 72 20 56 65 72 69 66 69   used for Verifi
18b90 63 61 74 69 6f 6e 2c 20 56 61 6c 69 64 61 74 69  cation, Validati
18ba0 6f 6e 2c 0a 2a 2a 20 61 6e 64 20 41 63 63 72 65  on,.** and Accre
18bb0 64 69 74 61 74 69 6f 6e 20 6f 6e 6c 79 2e 20 20  ditation only.  
18bc0 49 74 20 77 6f 72 6b 73 20 6c 69 6b 65 20 45 78  It works like Ex
18bd0 70 72 53 65 74 50 72 6f 70 65 72 74 79 28 29 20  prSetProperty() 
18be0 64 75 72 69 6e 67 20 56 56 41 0a 2a 2a 20 70 72  during VVA.** pr
18bf0 6f 63 65 73 73 65 73 20 62 75 74 20 69 73 20 61  ocesses but is a
18c00 20 6e 6f 2d 6f 70 20 66 6f 72 20 64 65 6c 69 76   no-op for deliv
18c10 65 72 79 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53  ery..*/.#ifdef S
18c20 51 4c 49 54 45 5f 44 45 42 55 47 0a 23 20 64 65  QLITE_DEBUG.# de
18c30 66 69 6e 65 20 45 78 70 72 53 65 74 56 56 41 50  fine ExprSetVVAP
18c40 72 6f 70 65 72 74 79 28 45 2c 50 29 20 20 28 45  roperty(E,P)  (E
18c50 29 2d 3e 66 6c 61 67 73 7c 3d 28 50 29 0a 23 65  )->flags|=(P).#e
18c60 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 45 78 70  lse.# define Exp
18c70 72 53 65 74 56 56 41 50 72 6f 70 65 72 74 79 28  rSetVVAProperty(
18c80 45 2c 50 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a  E,P).#endif../*.
18c90 2a 2a 20 4d 61 63 72 6f 73 20 74 6f 20 64 65 74  ** Macros to det
18ca0 65 72 6d 69 6e 65 20 74 68 65 20 6e 75 6d 62 65  ermine the numbe
18cb0 72 20 6f 66 20 62 79 74 65 73 20 72 65 71 75 69  r of bytes requi
18cc0 72 65 64 20 62 79 20 61 20 6e 6f 72 6d 61 6c 20  red by a normal 
18cd0 45 78 70 72 0a 2a 2a 20 73 74 72 75 63 74 2c 20  Expr.** struct, 
18ce0 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20 77  an Expr struct w
18cf0 69 74 68 20 74 68 65 20 45 50 5f 52 65 64 75 63  ith the EP_Reduc
18d00 65 64 20 66 6c 61 67 20 73 65 74 20 69 6e 20 45  ed flag set in E
18d10 78 70 72 2e 66 6c 61 67 73 0a 2a 2a 20 61 6e 64  xpr.flags.** and
18d20 20 61 6e 20 45 78 70 72 20 73 74 72 75 63 74 20   an Expr struct 
18d30 77 69 74 68 20 74 68 65 20 45 50 5f 54 6f 6b 65  with the EP_Toke
18d40 6e 4f 6e 6c 79 20 66 6c 61 67 20 73 65 74 2e 0a  nOnly flag set..
18d50 2a 2f 0a 23 64 65 66 69 6e 65 20 45 58 50 52 5f  */.#define EXPR_
18d60 46 55 4c 4c 53 49 5a 45 20 20 20 20 20 20 20 20  FULLSIZE        
18d70 20 20 20 73 69 7a 65 6f 66 28 45 78 70 72 29 20     sizeof(Expr) 
18d80 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 75 6c            /* Ful
18d90 6c 20 73 69 7a 65 20 2a 2f 0a 23 64 65 66 69 6e  l size */.#defin
18da0 65 20 45 58 50 52 5f 52 45 44 55 43 45 44 53 49  e EXPR_REDUCEDSI
18db0 5a 45 20 20 20 20 20 20 20 20 6f 66 66 73 65 74  ZE        offset
18dc0 6f 66 28 45 78 70 72 2c 69 54 61 62 6c 65 29 20  of(Expr,iTable) 
18dd0 20 2f 2a 20 43 6f 6d 6d 6f 6e 20 66 65 61 74 75   /* Common featu
18de0 72 65 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 45  res */.#define E
18df0 58 50 52 5f 54 4f 4b 45 4e 4f 4e 4c 59 53 49 5a  XPR_TOKENONLYSIZ
18e00 45 20 20 20 20 20 20 6f 66 66 73 65 74 6f 66 28  E      offsetof(
18e10 45 78 70 72 2c 70 4c 65 66 74 29 20 20 20 2f 2a  Expr,pLeft)   /*
18e20 20 46 65 77 65 72 20 66 65 61 74 75 72 65 73 20   Fewer features 
18e30 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 46 6c 61 67 73 20  */../*.** Flags 
18e40 70 61 73 73 65 64 20 74 6f 20 74 68 65 20 73 71  passed to the sq
18e50 6c 69 74 65 33 45 78 70 72 44 75 70 28 29 20 66  lite3ExprDup() f
18e60 75 6e 63 74 69 6f 6e 2e 20 53 65 65 20 74 68 65  unction. See the
18e70 20 68 65 61 64 65 72 20 63 6f 6d 6d 65 6e 74 0a   header comment.
18e80 2a 2a 20 61 62 6f 76 65 20 73 71 6c 69 74 65 33  ** above sqlite3
18e90 45 78 70 72 44 75 70 28 29 20 66 6f 72 20 64 65  ExprDup() for de
18ea0 74 61 69 6c 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e  tails..*/.#defin
18eb0 65 20 45 58 50 52 44 55 50 5f 52 45 44 55 43 45  e EXPRDUP_REDUCE
18ec0 20 20 20 20 20 20 20 20 20 30 78 30 30 30 31 20           0x0001 
18ed0 20 2f 2a 20 55 73 65 64 20 72 65 64 75 63 65 64   /* Used reduced
18ee0 2d 73 69 7a 65 20 45 78 70 72 20 6e 6f 64 65 73  -size Expr nodes
18ef0 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 6c 69 73   */../*.** A lis
18f00 74 20 6f 66 20 65 78 70 72 65 73 73 69 6f 6e 73  t of expressions
18f10 2e 20 20 45 61 63 68 20 65 78 70 72 65 73 73 69  .  Each expressi
18f20 6f 6e 20 6d 61 79 20 6f 70 74 69 6f 6e 61 6c 6c  on may optionall
18f30 79 20 68 61 76 65 20 61 0a 2a 2a 20 6e 61 6d 65  y have a.** name
18f40 2e 20 20 41 6e 20 65 78 70 72 2f 6e 61 6d 65 20  .  An expr/name 
18f50 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 63 61 6e 20  combination can 
18f60 62 65 20 75 73 65 64 20 69 6e 20 73 65 76 65 72  be used in sever
18f70 61 6c 20 77 61 79 73 2c 20 73 75 63 68 0a 2a 2a  al ways, such.**
18f80 20 61 73 20 74 68 65 20 6c 69 73 74 20 6f 66 20   as the list of 
18f90 22 65 78 70 72 20 41 53 20 49 44 22 20 66 69 65  "expr AS ID" fie
18fa0 6c 64 73 20 66 6f 6c 6c 6f 77 69 6e 67 20 61 20  lds following a 
18fb0 22 53 45 4c 45 43 54 22 20 6f 72 20 69 6e 20 74  "SELECT" or in t
18fc0 68 65 0a 2a 2a 20 6c 69 73 74 20 6f 66 20 22 49  he.** list of "I
18fd0 44 20 3d 20 65 78 70 72 22 20 69 74 65 6d 73 20  D = expr" items 
18fe0 69 6e 20 61 6e 20 55 50 44 41 54 45 2e 20 20 41  in an UPDATE.  A
18ff0 20 6c 69 73 74 20 6f 66 20 65 78 70 72 65 73 73   list of express
19000 69 6f 6e 73 20 63 61 6e 0a 2a 2a 20 61 6c 73 6f  ions can.** also
19010 20 62 65 20 75 73 65 64 20 61 73 20 74 68 65 20   be used as the 
19020 61 72 67 75 6d 65 6e 74 20 74 6f 20 61 20 66 75  argument to a fu
19030 6e 63 74 69 6f 6e 2c 20 69 6e 20 77 68 69 63 68  nction, in which
19040 20 63 61 73 65 20 74 68 65 20 61 2e 7a 4e 61 6d   case the a.zNam
19050 65 0a 2a 2a 20 66 69 65 6c 64 20 69 73 20 6e 6f  e.** field is no
19060 74 20 75 73 65 64 2e 0a 2a 2a 0a 2a 2a 20 42 79  t used..**.** By
19070 20 64 65 66 61 75 6c 74 20 74 68 65 20 45 78 70   default the Exp
19080 72 2e 7a 53 70 61 6e 20 66 69 65 6c 64 20 68 6f  r.zSpan field ho
19090 6c 64 73 20 61 20 68 75 6d 61 6e 2d 72 65 61 64  lds a human-read
190a0 61 62 6c 65 20 64 65 73 63 72 69 70 74 69 6f 6e  able description
190b0 20 6f 66 0a 2a 2a 20 74 68 65 20 65 78 70 72 65   of.** the expre
190c0 73 73 69 6f 6e 20 74 68 61 74 20 69 73 20 75 73  ssion that is us
190d0 65 64 20 69 6e 20 74 68 65 20 67 65 6e 65 72 61  ed in the genera
190e0 74 69 6f 6e 20 6f 66 20 65 72 72 6f 72 20 6d 65  tion of error me
190f0 73 73 61 67 65 73 20 61 6e 64 0a 2a 2a 20 63 6f  ssages and.** co
19100 6c 75 6d 6e 20 6c 61 62 65 6c 73 2e 20 20 49 6e  lumn labels.  In
19110 20 74 68 69 73 20 63 61 73 65 2c 20 45 78 70 72   this case, Expr
19120 2e 7a 53 70 61 6e 20 69 73 20 74 79 70 69 63 61  .zSpan is typica
19130 6c 6c 79 20 74 68 65 20 74 65 78 74 20 6f 66 20  lly the text of 
19140 61 0a 2a 2a 20 63 6f 6c 75 6d 6e 20 65 78 70 72  a.** column expr
19150 65 73 73 69 6f 6e 20 61 73 20 69 74 20 65 78 69  ession as it exi
19160 73 74 73 20 69 6e 20 61 20 53 45 4c 45 43 54 20  sts in a SELECT 
19170 73 74 61 74 65 6d 65 6e 74 2e 20 20 48 6f 77 65  statement.  Howe
19180 76 65 72 2c 20 69 66 0a 2a 2a 20 74 68 65 20 62  ver, if.** the b
19190 53 70 61 6e 49 73 54 61 62 20 66 6c 61 67 20 69  SpanIsTab flag i
191a0 73 20 73 65 74 2c 20 74 68 65 6e 20 7a 53 70 61  s set, then zSpa
191b0 6e 20 69 73 20 6f 76 65 72 6c 6f 61 64 65 64 20  n is overloaded 
191c0 74 6f 20 6d 65 61 6e 20 74 68 65 20 6e 61 6d 65  to mean the name
191d0 0a 2a 2a 20 6f 66 20 74 68 65 20 72 65 73 75 6c  .** of the resul
191e0 74 20 63 6f 6c 75 6d 6e 20 69 6e 20 74 68 65 20  t column in the 
191f0 66 6f 72 6d 3a 20 44 41 54 41 42 41 53 45 2e 54  form: DATABASE.T
19200 41 42 4c 45 2e 43 4f 4c 55 4d 4e 2e 20 20 54 68  ABLE.COLUMN.  Th
19210 69 73 20 6c 61 74 65 72 0a 2a 2a 20 66 6f 72 6d  is later.** form
19220 20 69 73 20 75 73 65 64 20 66 6f 72 20 6e 61 6d   is used for nam
19230 65 20 72 65 73 6f 6c 75 74 69 6f 6e 20 77 69 74  e resolution wit
19240 68 20 6e 65 73 74 65 64 20 46 52 4f 4d 20 63 6c  h nested FROM cl
19250 61 75 73 65 73 2e 0a 2a 2f 0a 73 74 72 75 63 74  auses..*/.struct
19260 20 45 78 70 72 4c 69 73 74 20 7b 0a 20 20 69 6e   ExprList {.  in
19270 74 20 6e 45 78 70 72 3b 20 20 20 20 20 20 20 20  t nExpr;        
19280 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
19290 66 20 65 78 70 72 65 73 73 69 6f 6e 73 20 6f 6e  f expressions on
192a0 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 20 20 69   the list */.  i
192b0 6e 74 20 6e 41 6c 6c 6f 63 3b 20 20 20 20 20 20  nt nAlloc;      
192c0 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20        /* Number 
192d0 6f 66 20 61 5b 5d 20 73 6c 6f 74 73 20 61 6c 6c  of a[] slots all
192e0 6f 63 61 74 65 64 20 2a 2f 0a 20 20 73 74 72 75  ocated */.  stru
192f0 63 74 20 45 78 70 72 4c 69 73 74 5f 69 74 65 6d  ct ExprList_item
19300 20 7b 20 2f 2a 20 46 6f 72 20 65 61 63 68 20 65   { /* For each e
19310 78 70 72 65 73 73 69 6f 6e 20 69 6e 20 74 68 65  xpression in the
19320 20 6c 69 73 74 20 2a 2f 0a 20 20 20 20 45 78 70   list */.    Exp
19330 72 20 2a 70 45 78 70 72 3b 20 20 20 20 20 20 20  r *pExpr;       
19340 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73       /* The pars
19350 65 20 74 72 65 65 20 66 6f 72 20 74 68 69 73 20  e tree for this 
19360 65 78 70 72 65 73 73 69 6f 6e 20 2a 2f 0a 20 20  expression */.  
19370 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20    char *zName;  
19380 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 6b            /* Tok
19390 65 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  en associated wi
193a0 74 68 20 74 68 69 73 20 65 78 70 72 65 73 73 69  th this expressi
193b0 6f 6e 20 2a 2f 0a 20 20 20 20 63 68 61 72 20 2a  on */.    char *
193c0 7a 53 70 61 6e 3b 20 20 20 20 20 20 20 20 20 20  zSpan;          
193d0 20 20 2f 2a 20 4f 72 69 67 69 6e 61 6c 20 74 65    /* Original te
193e0 78 74 20 6f 66 20 74 68 65 20 65 78 70 72 65 73  xt of the expres
193f0 73 69 6f 6e 20 2a 2f 0a 20 20 20 20 75 38 20 73  sion */.    u8 s
19400 6f 72 74 4f 72 64 65 72 3b 20 20 20 20 20 20 20  ortOrder;       
19410 20 20 20 20 2f 2a 20 31 20 66 6f 72 20 44 45 53      /* 1 for DES
19420 43 20 6f 72 20 30 20 66 6f 72 20 41 53 43 20 2a  C or 0 for ASC *
19430 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 64  /.    unsigned d
19440 6f 6e 65 20 3a 31 3b 20 20 20 20 20 20 20 2f 2a  one :1;       /*
19450 20 41 20 66 6c 61 67 20 74 6f 20 69 6e 64 69 63   A flag to indic
19460 61 74 65 20 77 68 65 6e 20 70 72 6f 63 65 73 73  ate when process
19470 69 6e 67 20 69 73 20 66 69 6e 69 73 68 65 64 20  ing is finished 
19480 2a 2f 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20  */.    unsigned 
19490 62 53 70 61 6e 49 73 54 61 62 20 3a 31 3b 20 2f  bSpanIsTab :1; /
194a0 2a 20 7a 53 70 61 6e 20 68 6f 6c 64 73 20 44 42  * zSpan holds DB
194b0 2e 54 41 42 4c 45 2e 43 4f 4c 55 4d 4e 20 2a 2f  .TABLE.COLUMN */
194c0 0a 20 20 20 20 75 6e 73 69 67 6e 65 64 20 72 65  .    unsigned re
194d0 75 73 61 62 6c 65 20 3a 31 3b 20 20 20 2f 2a 20  usable :1;   /* 
194e0 43 6f 6e 73 74 61 6e 74 20 65 78 70 72 65 73 73  Constant express
194f0 69 6f 6e 20 69 73 20 72 65 75 73 61 62 6c 65 20  ion is reusable 
19500 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20 7b 0a 20  */.    union {. 
19510 20 20 20 20 20 73 74 72 75 63 74 20 7b 0a 20 20       struct {.  
19520 20 20 20 20 20 20 75 31 36 20 69 4f 72 64 65 72        u16 iOrder
19530 42 79 43 6f 6c 3b 20 20 20 20 20 20 2f 2a 20 46  ByCol;      /* F
19540 6f 72 20 4f 52 44 45 52 20 42 59 2c 20 63 6f 6c  or ORDER BY, col
19550 75 6d 6e 20 6e 75 6d 62 65 72 20 69 6e 20 72 65  umn number in re
19560 73 75 6c 74 20 73 65 74 20 2a 2f 0a 20 20 20 20  sult set */.    
19570 20 20 20 20 75 31 36 20 69 41 6c 69 61 73 3b 20      u16 iAlias; 
19580 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19590 65 78 20 69 6e 74 6f 20 50 61 72 73 65 2e 61 41  ex into Parse.aA
195a0 6c 69 61 73 5b 5d 20 66 6f 72 20 7a 4e 61 6d 65  lias[] for zName
195b0 20 2a 2f 0a 20 20 20 20 20 20 7d 20 78 3b 0a 20   */.      } x;. 
195c0 20 20 20 20 20 69 6e 74 20 69 43 6f 6e 73 74 45       int iConstE
195d0 78 70 72 52 65 67 3b 20 20 20 20 20 20 2f 2a 20  xprReg;      /* 
195e0 52 65 67 69 73 74 65 72 20 69 6e 20 77 68 69 63  Register in whic
195f0 68 20 45 78 70 72 20 76 61 6c 75 65 20 69 73 20  h Expr value is 
19600 63 61 63 68 65 64 20 2a 2f 0a 20 20 20 20 7d 20  cached */.    } 
19610 75 3b 0a 20 20 7d 20 61 5b 31 5d 3b 20 20 20 20  u;.  } a[1];    
19620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
19630 20 4f 6e 65 20 73 6c 6f 74 20 66 6f 72 20 65 61   One slot for ea
19640 63 68 20 65 78 70 72 65 73 73 69 6f 6e 20 69 6e  ch expression in
19650 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d 3b 0a   the list */.};.
19660 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
19670 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75 63  ce of this struc
19680 74 75 72 65 20 69 73 20 75 73 65 64 20 62 79 20  ture is used by 
19690 74 68 65 20 70 61 72 73 65 72 20 74 6f 20 72 65  the parser to re
196a0 63 6f 72 64 20 62 6f 74 68 0a 2a 2a 20 74 68 65  cord both.** the
196b0 20 70 61 72 73 65 20 74 72 65 65 20 66 6f 72 20   parse tree for 
196c0 61 6e 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e  an expression an
196d0 64 20 74 68 65 20 73 70 61 6e 20 6f 66 20 69 6e  d the span of in
196e0 70 75 74 20 74 65 78 74 20 66 6f 72 20 61 6e 0a  put text for an.
196f0 2a 2a 20 65 78 70 72 65 73 73 69 6f 6e 2e 0a 2a  ** expression..*
19700 2f 0a 73 74 72 75 63 74 20 45 78 70 72 53 70 61  /.struct ExprSpa
19710 6e 20 7b 0a 20 20 45 78 70 72 20 2a 70 45 78 70  n {.  Expr *pExp
19720 72 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  r;          /* T
19730 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20 70 61  he expression pa
19740 72 73 65 20 74 72 65 65 20 2a 2f 0a 20 20 63 6f  rse tree */.  co
19750 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 72 74  nst char *zStart
19760 3b 20 20 20 2f 2a 20 46 69 72 73 74 20 63 68 61  ;   /* First cha
19770 72 61 63 74 65 72 20 6f 66 20 69 6e 70 75 74 20  racter of input 
19780 74 65 78 74 20 2a 2f 0a 20 20 63 6f 6e 73 74 20  text */.  const 
19790 63 68 61 72 20 2a 7a 45 6e 64 3b 20 20 20 20 20  char *zEnd;     
197a0 2f 2a 20 4f 6e 65 20 63 68 61 72 61 63 74 65 72  /* One character
197b0 20 70 61 73 74 20 74 68 65 20 65 6e 64 20 6f 66   past the end of
197c0 20 69 6e 70 75 74 20 74 65 78 74 20 2a 2f 0a 7d   input text */.}
197d0 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74  ;../*.** An inst
197e0 61 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72  ance of this str
197f0 75 63 74 75 72 65 20 63 61 6e 20 68 6f 6c 64 20  ucture can hold 
19800 61 20 73 69 6d 70 6c 65 20 6c 69 73 74 20 6f 66  a simple list of
19810 20 69 64 65 6e 74 69 66 69 65 72 73 2c 0a 2a 2a   identifiers,.**
19820 20 73 75 63 68 20 61 73 20 74 68 65 20 6c 69 73   such as the lis
19830 74 20 22 61 2c 62 2c 63 22 20 69 6e 20 74 68 65  t "a,b,c" in the
19840 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 61 74 65   following state
19850 6d 65 6e 74 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20  ments:.**.**    
19860 20 20 49 4e 53 45 52 54 20 49 4e 54 4f 20 74 28    INSERT INTO t(
19870 61 2c 62 2c 63 29 20 56 41 4c 55 45 53 20 2e 2e  a,b,c) VALUES ..
19880 2e 3b 0a 2a 2a 20 20 20 20 20 20 43 52 45 41 54  .;.**      CREAT
19890 45 20 49 4e 44 45 58 20 69 64 78 20 4f 4e 20 74  E INDEX idx ON t
198a0 28 61 2c 62 2c 63 29 3b 0a 2a 2a 20 20 20 20 20  (a,b,c);.**     
198b0 20 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20   CREATE TRIGGER 
198c0 74 72 69 67 20 42 45 46 4f 52 45 20 55 50 44 41  trig BEFORE UPDA
198d0 54 45 20 4f 4e 20 74 28 61 2c 62 2c 63 29 20 2e  TE ON t(a,b,c) .
198e0 2e 2e 3b 0a 2a 2a 0a 2a 2a 20 54 68 65 20 49 64  ..;.**.** The Id
198f0 4c 69 73 74 2e 61 2e 69 64 78 20 66 69 65 6c 64  List.a.idx field
19900 20 69 73 20 75 73 65 64 20 77 68 65 6e 20 74 68   is used when th
19910 65 20 49 64 4c 69 73 74 20 72 65 70 72 65 73 65  e IdList represe
19920 6e 74 73 20 74 68 65 20 6c 69 73 74 20 6f 66 0a  nts the list of.
19930 2a 2a 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 73 20  ** column names 
19940 61 66 74 65 72 20 61 20 74 61 62 6c 65 20 6e 61  after a table na
19950 6d 65 20 69 6e 20 61 6e 20 49 4e 53 45 52 54 20  me in an INSERT 
19960 73 74 61 74 65 6d 65 6e 74 2e 20 20 49 6e 20 74  statement.  In t
19970 68 65 20 73 74 61 74 65 6d 65 6e 74 0a 2a 2a 0a  he statement.**.
19980 2a 2a 20 20 20 20 20 49 4e 53 45 52 54 20 49 4e  **     INSERT IN
19990 54 4f 20 74 28 61 2c 62 2c 63 29 20 2e 2e 2e 0a  TO t(a,b,c) ....
199a0 2a 2a 0a 2a 2a 20 49 66 20 22 61 22 20 69 73 20  **.** If "a" is 
199b0 74 68 65 20 6b 2d 74 68 20 63 6f 6c 75 6d 6e 20  the k-th column 
199c0 6f 66 20 74 61 62 6c 65 20 22 74 22 2c 20 74 68  of table "t", th
199d0 65 6e 20 49 64 4c 69 73 74 2e 61 5b 30 5d 2e 69  en IdList.a[0].i
199e0 64 78 3d 3d 6b 2e 0a 2a 2f 0a 73 74 72 75 63 74  dx==k..*/.struct
199f0 20 49 64 4c 69 73 74 20 7b 0a 20 20 73 74 72 75   IdList {.  stru
19a00 63 74 20 49 64 4c 69 73 74 5f 69 74 65 6d 20 7b  ct IdList_item {
19a10 0a 20 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65  .    char *zName
19a20 3b 20 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f  ;      /* Name o
19a30 66 20 74 68 65 20 69 64 65 6e 74 69 66 69 65 72  f the identifier
19a40 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 64 78 3b   */.    int idx;
19a50 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64            /* Ind
19a60 65 78 20 69 6e 20 73 6f 6d 65 20 54 61 62 6c 65  ex in some Table
19a70 2e 61 43 6f 6c 5b 5d 20 6f 66 20 61 20 63 6f 6c  .aCol[] of a col
19a80 75 6d 6e 20 6e 61 6d 65 64 20 7a 4e 61 6d 65 20  umn named zName 
19a90 2a 2f 0a 20 20 7d 20 2a 61 3b 0a 20 20 69 6e 74  */.  } *a;.  int
19aa0 20 6e 49 64 3b 20 20 20 20 20 20 20 20 20 2f 2a   nId;         /*
19ab0 20 4e 75 6d 62 65 72 20 6f 66 20 69 64 65 6e 74   Number of ident
19ac0 69 66 69 65 72 73 20 6f 6e 20 74 68 65 20 6c 69  ifiers on the li
19ad0 73 74 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  st */.};../*.** 
19ae0 54 68 65 20 62 69 74 6d 61 73 6b 20 64 61 74 61  The bitmask data
19af0 74 79 70 65 20 64 65 66 69 6e 65 64 20 62 65 6c  type defined bel
19b00 6f 77 20 69 73 20 75 73 65 64 20 66 6f 72 20 76  ow is used for v
19b10 61 72 69 6f 75 73 20 6f 70 74 69 6d 69 7a 61 74  arious optimizat
19b20 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 43 68 61 6e  ions..**.** Chan
19b30 67 69 6e 67 20 74 68 69 73 20 66 72 6f 6d 20 61  ging this from a
19b40 20 36 34 2d 62 69 74 20 74 6f 20 61 20 33 32 2d   64-bit to a 32-
19b50 62 69 74 20 74 79 70 65 20 6c 69 6d 69 74 73 20  bit type limits 
19b60 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 0a 2a 2a  the number of.**
19b70 20 74 61 62 6c 65 73 20 69 6e 20 61 20 6a 6f 69   tables in a joi
19b80 6e 20 74 6f 20 33 32 20 69 6e 73 74 65 61 64 20  n to 32 instead 
19b90 6f 66 20 36 34 2e 20 20 42 75 74 20 69 74 20 61  of 64.  But it a
19ba0 6c 73 6f 20 72 65 64 75 63 65 73 20 74 68 65 20  lso reduces the 
19bb0 73 69 7a 65 0a 2a 2a 20 6f 66 20 74 68 65 20 6c  size.** of the l
19bc0 69 62 72 61 72 79 20 62 79 20 37 33 38 20 62 79  ibrary by 738 by
19bd0 74 65 73 20 6f 6e 20 69 78 38 36 2e 0a 2a 2f 0a  tes on ix86..*/.
19be0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 42 49  #ifdef SQLITE_BI
19bf0 54 4d 41 53 4b 5f 54 59 50 45 0a 20 20 74 79 70  TMASK_TYPE.  typ
19c00 65 64 65 66 20 53 51 4c 49 54 45 5f 42 49 54 4d  edef SQLITE_BITM
19c10 41 53 4b 5f 54 59 50 45 20 42 69 74 6d 61 73 6b  ASK_TYPE Bitmask
19c20 3b 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65  ;.#else.  typede
19c30 66 20 75 36 34 20 42 69 74 6d 61 73 6b 3b 0a 23  f u64 Bitmask;.#
19c40 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  endif../*.** The
19c50 20 6e 75 6d 62 65 72 20 6f 66 20 62 69 74 73 20   number of bits 
19c60 69 6e 20 61 20 42 69 74 6d 61 73 6b 2e 20 20 22  in a Bitmask.  "
19c70 42 4d 53 22 20 6d 65 61 6e 73 20 22 42 69 74 4d  BMS" means "BitM
19c80 61 73 6b 20 53 69 7a 65 22 2e 0a 2a 2f 0a 23 64  ask Size"..*/.#d
19c90 65 66 69 6e 65 20 42 4d 53 20 20 28 28 69 6e 74  efine BMS  ((int
19ca0 29 28 73 69 7a 65 6f 66 28 42 69 74 6d 61 73 6b  )(sizeof(Bitmask
19cb0 29 2a 38 29 29 0a 0a 2f 2a 0a 2a 2a 20 41 20 62  )*8))../*.** A b
19cc0 69 74 20 69 6e 20 61 20 42 69 74 6d 61 73 6b 0a  it in a Bitmask.
19cd0 2a 2f 0a 23 64 65 66 69 6e 65 20 4d 41 53 4b 42  */.#define MASKB
19ce0 49 54 28 6e 29 20 20 20 28 28 28 42 69 74 6d 61  IT(n)   (((Bitma
19cf0 73 6b 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66  sk)1)<<(n)).#def
19d00 69 6e 65 20 4d 41 53 4b 42 49 54 33 32 28 6e 29  ine MASKBIT32(n)
19d10 20 28 28 28 75 6e 73 69 67 6e 65 64 20 69 6e 74   (((unsigned int
19d20 29 31 29 3c 3c 28 6e 29 29 0a 23 64 65 66 69 6e  )1)<<(n)).#defin
19d30 65 20 41 4c 4c 42 49 54 53 20 20 20 20 20 20 28  e ALLBITS      (
19d40 28 42 69 74 6d 61 73 6b 29 2d 31 29 0a 0a 2f 2a  (Bitmask)-1)../*
19d50 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  .** The followin
19d60 67 20 73 74 72 75 63 74 75 72 65 20 64 65 73 63  g structure desc
19d70 72 69 62 65 73 20 74 68 65 20 46 52 4f 4d 20 63  ribes the FROM c
19d80 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c 45 43  lause of a SELEC
19d90 54 20 73 74 61 74 65 6d 65 6e 74 2e 0a 2a 2a 20  T statement..** 
19da0 45 61 63 68 20 74 61 62 6c 65 20 6f 72 20 73 75  Each table or su
19db0 62 71 75 65 72 79 20 69 6e 20 74 68 65 20 46 52  bquery in the FR
19dc0 4f 4d 20 63 6c 61 75 73 65 20 69 73 20 61 20 73  OM clause is a s
19dd0 65 70 61 72 61 74 65 20 65 6c 65 6d 65 6e 74 20  eparate element 
19de0 6f 66 0a 2a 2a 20 74 68 65 20 53 72 63 4c 69 73  of.** the SrcLis
19df0 74 2e 61 5b 5d 20 61 72 72 61 79 2e 0a 2a 2a 0a  t.a[] array..**.
19e00 2a 2a 20 57 69 74 68 20 74 68 65 20 61 64 64 69  ** With the addi
19e10 74 69 6f 6e 20 6f 66 20 6d 75 6c 74 69 70 6c 65  tion of multiple
19e20 20 64 61 74 61 62 61 73 65 20 73 75 70 70 6f 72   database suppor
19e30 74 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  t, the following
19e40 20 73 74 72 75 63 74 75 72 65 0a 2a 2a 20 63 61   structure.** ca
19e50 6e 20 61 6c 73 6f 20 62 65 20 75 73 65 64 20 74  n also be used t
19e60 6f 20 64 65 73 63 72 69 62 65 20 61 20 70 61 72  o describe a par
19e70 74 69 63 75 6c 61 72 20 74 61 62 6c 65 20 73 75  ticular table su
19e80 63 68 20 61 73 20 74 68 65 20 74 61 62 6c 65 20  ch as the table 
19e90 74 68 61 74 0a 2a 2a 20 69 73 20 6d 6f 64 69 66  that.** is modif
19ea0 69 65 64 20 62 79 20 61 6e 20 49 4e 53 45 52 54  ied by an INSERT
19eb0 2c 20 44 45 4c 45 54 45 2c 20 6f 72 20 55 50 44  , DELETE, or UPD
19ec0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  ATE statement.  
19ed0 49 6e 20 73 74 61 6e 64 61 72 64 20 53 51 4c 2c  In standard SQL,
19ee0 0a 2a 2a 20 73 75 63 68 20 61 20 74 61 62 6c 65  .** such a table
19ef0 20 6d 75 73 74 20 62 65 20 61 20 73 69 6d 70 6c   must be a simpl
19f00 65 20 6e 61 6d 65 3a 20 49 44 2e 20 20 42 75 74  e name: ID.  But
19f10 20 69 6e 20 53 51 4c 69 74 65 2c 20 74 68 65 20   in SQLite, the 
19f20 74 61 62 6c 65 20 63 61 6e 0a 2a 2a 20 6e 6f 77  table can.** now
19f30 20 62 65 20 69 64 65 6e 74 69 66 69 65 64 20 62   be identified b
19f40 79 20 61 20 64 61 74 61 62 61 73 65 20 6e 61 6d  y a database nam
19f50 65 2c 20 61 20 64 6f 74 2c 20 74 68 65 6e 20 74  e, a dot, then t
19f60 68 65 20 74 61 62 6c 65 20 6e 61 6d 65 3a 20 49  he table name: I
19f70 44 2e 49 44 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  D.ID..**.** The 
19f80 6a 6f 69 6e 74 79 70 65 20 73 74 61 72 74 73 20  jointype starts 
19f90 6f 75 74 20 73 68 6f 77 69 6e 67 20 74 68 65 20  out showing the 
19fa0 6a 6f 69 6e 20 74 79 70 65 20 62 65 74 77 65 65  join type betwee
19fb0 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 61  n the current ta
19fc0 62 6c 65 0a 2a 2a 20 61 6e 64 20 74 68 65 20 6e  ble.** and the n
19fd0 65 78 74 20 74 61 62 6c 65 20 6f 6e 20 74 68 65  ext table on the
19fe0 20 6c 69 73 74 2e 20 20 54 68 65 20 70 61 72 73   list.  The pars
19ff0 65 72 20 62 75 69 6c 64 73 20 74 68 65 20 6c 69  er builds the li
1a000 73 74 20 74 68 69 73 20 77 61 79 2e 0a 2a 2a 20  st this way..** 
1a010 42 75 74 20 73 71 6c 69 74 65 33 53 72 63 4c 69  But sqlite3SrcLi
1a020 73 74 53 68 69 66 74 4a 6f 69 6e 54 79 70 65 28  stShiftJoinType(
1a030 29 20 6c 61 74 65 72 20 73 68 69 66 74 73 20 74  ) later shifts t
1a040 68 65 20 6a 6f 69 6e 74 79 70 65 73 20 73 6f 20  he jointypes so 
1a050 74 68 61 74 20 65 61 63 68 0a 2a 2a 20 6a 6f 69  that each.** joi
1a060 6e 74 79 70 65 20 65 78 70 72 65 73 73 65 73 20  ntype expresses 
1a070 74 68 65 20 6a 6f 69 6e 20 62 65 74 77 65 65 6e  the join between
1a080 20 74 68 65 20 74 61 62 6c 65 20 61 6e 64 20 74   the table and t
1a090 68 65 20 70 72 65 76 69 6f 75 73 20 74 61 62 6c  he previous tabl
1a0a0 65 2e 0a 2a 2a 0a 2a 2a 20 49 6e 20 74 68 65 20  e..**.** In the 
1a0b0 63 6f 6c 55 73 65 64 20 66 69 65 6c 64 2c 20 74  colUsed field, t
1a0c0 68 65 20 68 69 67 68 2d 6f 72 64 65 72 20 62 69  he high-order bi
1a0d0 74 20 28 62 69 74 20 36 33 29 20 69 73 20 73 65  t (bit 63) is se
1a0e0 74 20 69 66 20 74 68 65 20 74 61 62 6c 65 0a 2a  t if the table.*
1a0f0 2a 20 63 6f 6e 74 61 69 6e 73 20 6d 6f 72 65 20  * contains more 
1a100 74 68 61 6e 20 36 33 20 63 6f 6c 75 6d 6e 73 20  than 63 columns 
1a110 61 6e 64 20 74 68 65 20 36 34 2d 74 68 20 6f 72  and the 64-th or
1a120 20 6c 61 74 65 72 20 63 6f 6c 75 6d 6e 20 69 73   later column is
1a130 20 75 73 65 64 2e 0a 2a 2f 0a 73 74 72 75 63 74   used..*/.struct
1a140 20 53 72 63 4c 69 73 74 20 7b 0a 20 20 69 6e 74   SrcList {.  int
1a150 20 6e 53 72 63 3b 20 20 20 20 20 20 20 20 2f 2a   nSrc;        /*
1a160 20 4e 75 6d 62 65 72 20 6f 66 20 74 61 62 6c 65   Number of table
1a170 73 20 6f 72 20 73 75 62 71 75 65 72 69 65 73 20  s or subqueries 
1a180 69 6e 20 74 68 65 20 46 52 4f 4d 20 63 6c 61 75  in the FROM clau
1a190 73 65 20 2a 2f 0a 20 20 75 33 32 20 6e 41 6c 6c  se */.  u32 nAll
1a1a0 6f 63 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62  oc;      /* Numb
1a1b0 65 72 20 6f 66 20 65 6e 74 72 69 65 73 20 61 6c  er of entries al
1a1c0 6c 6f 63 61 74 65 64 20 69 6e 20 61 5b 5d 20 62  located in a[] b
1a1d0 65 6c 6f 77 20 2a 2f 0a 20 20 73 74 72 75 63 74  elow */.  struct
1a1e0 20 53 72 63 4c 69 73 74 5f 69 74 65 6d 20 7b 0a   SrcList_item {.
1a1f0 20 20 20 20 53 63 68 65 6d 61 20 2a 70 53 63 68      Schema *pSch
1a200 65 6d 61 3b 20 20 2f 2a 20 53 63 68 65 6d 61 20  ema;  /* Schema 
1a210 74 6f 20 77 68 69 63 68 20 74 68 69 73 20 69 74  to which this it
1a220 65 6d 20 69 73 20 66 69 78 65 64 20 2a 2f 0a 20  em is fixed */. 
1a230 20 20 20 63 68 61 72 20 2a 7a 44 61 74 61 62 61     char *zDataba
1a240 73 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  se;  /* Name of 
1a250 64 61 74 61 62 61 73 65 20 68 6f 6c 64 69 6e 67  database holding
1a260 20 74 68 69 73 20 74 61 62 6c 65 20 2a 2f 0a 20   this table */. 
1a270 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20     char *zName; 
1a280 20 20 20 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20       /* Name of 
1a290 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  the table */.   
1a2a0 20 63 68 61 72 20 2a 7a 41 6c 69 61 73 3b 20 20   char *zAlias;  
1a2b0 20 20 20 2f 2a 20 54 68 65 20 22 42 22 20 70 61     /* The "B" pa
1a2c0 72 74 20 6f 66 20 61 20 22 41 20 41 53 20 42 22  rt of a "A AS B"
1a2d0 20 70 68 72 61 73 65 2e 20 20 7a 4e 61 6d 65 20   phrase.  zName 
1a2e0 69 73 20 74 68 65 20 22 41 22 20 2a 2f 0a 20 20  is the "A" */.  
1a2f0 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
1a300 20 20 20 20 2f 2a 20 41 6e 20 53 51 4c 20 74 61      /* An SQL ta
1a310 62 6c 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  ble correspondin
1a320 67 20 74 6f 20 7a 4e 61 6d 65 20 2a 2f 0a 20 20  g to zName */.  
1a330 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c 65 63    Select *pSelec
1a340 74 3b 20 20 2f 2a 20 41 20 53 45 4c 45 43 54 20  t;  /* A SELECT 
1a350 73 74 61 74 65 6d 65 6e 74 20 75 73 65 64 20 69  statement used i
1a360 6e 20 70 6c 61 63 65 20 6f 66 20 61 20 74 61 62  n place of a tab
1a370 6c 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 20 20 69  le name */.    i
1a380 6e 74 20 61 64 64 72 46 69 6c 6c 53 75 62 3b 20  nt addrFillSub; 
1a390 20 2f 2a 20 41 64 64 72 65 73 73 20 6f 66 20 73   /* Address of s
1a3a0 75 62 72 6f 75 74 69 6e 65 20 74 6f 20 6d 61 6e  ubroutine to man
1a3b0 69 66 65 73 74 20 61 20 73 75 62 71 75 65 72 79  ifest a subquery
1a3c0 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
1a3d0 65 74 75 72 6e 3b 20 20 20 20 2f 2a 20 52 65 67  eturn;    /* Reg
1a3e0 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 65  ister holding re
1a3f0 74 75 72 6e 20 61 64 64 72 65 73 73 20 6f 66 20  turn address of 
1a400 61 64 64 72 46 69 6c 6c 53 75 62 20 2a 2f 0a 20  addrFillSub */. 
1a410 20 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74     int regResult
1a420 3b 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72  ;    /* Register
1a430 73 20 68 6f 6c 64 69 6e 67 20 72 65 73 75 6c 74  s holding result
1a440 73 20 6f 66 20 61 20 63 6f 2d 72 6f 75 74 69 6e  s of a co-routin
1a450 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
1a460 7b 0a 20 20 20 20 20 20 75 38 20 6a 6f 69 6e 74  {.      u8 joint
1a470 79 70 65 3b 20 20 20 20 20 20 2f 2a 20 54 79 70  ype;      /* Typ
1a480 65 20 6f 66 20 6a 6f 69 6e 20 62 65 74 77 65 65  e of join betwee
1a490 6e 20 74 68 69 73 20 74 61 62 6c 65 20 61 6e 64  n this table and
1a4a0 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 2a 2f   the previous */
1a4b0 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1a4c0 6e 6f 74 49 6e 64 65 78 65 64 20 3a 31 3b 20 20  notIndexed :1;  
1a4d0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65    /* True if the
1a4e0 72 65 20 69 73 20 61 20 4e 4f 54 20 49 4e 44 45  re is a NOT INDE
1a4f0 58 45 44 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20  XED clause */.  
1a500 20 20 20 20 75 6e 73 69 67 6e 65 64 20 69 73 49      unsigned isI
1a510 6e 64 65 78 65 64 42 79 20 3a 31 3b 20 20 20 2f  ndexedBy :1;   /
1a520 2a 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  * True if there 
1a530 69 73 20 61 6e 20 49 4e 44 45 58 45 44 20 42 59  is an INDEXED BY
1a540 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20 20   clause */.     
1a550 20 75 6e 73 69 67 6e 65 64 20 69 73 54 61 62 46   unsigned isTabF
1a560 75 6e 63 20 3a 31 3b 20 20 20 20 20 2f 2a 20 54  unc :1;     /* T
1a570 72 75 65 20 69 66 20 74 61 62 6c 65 2d 76 61 6c  rue if table-val
1a580 75 65 64 2d 66 75 6e 63 74 69 6f 6e 20 73 79 6e  ued-function syn
1a590 74 61 78 20 2a 2f 0a 20 20 20 20 20 20 75 6e 73  tax */.      uns
1a5a0 69 67 6e 65 64 20 69 73 43 6f 72 72 65 6c 61 74  igned isCorrelat
1a5b0 65 64 20 3a 31 3b 20 20 2f 2a 20 54 72 75 65 20  ed :1;  /* True 
1a5c0 69 66 20 73 75 62 2d 71 75 65 72 79 20 69 73 20  if sub-query is 
1a5d0 63 6f 72 72 65 6c 61 74 65 64 20 2a 2f 0a 20 20  correlated */.  
1a5e0 20 20 20 20 75 6e 73 69 67 6e 65 64 20 76 69 61      unsigned via
1a5f0 43 6f 72 6f 75 74 69 6e 65 20 3a 31 3b 20 20 2f  Coroutine :1;  /
1a600 2a 20 49 6d 70 6c 65 6d 65 6e 74 65 64 20 61 73  * Implemented as
1a610 20 61 20 63 6f 2d 72 6f 75 74 69 6e 65 20 2a 2f   a co-routine */
1a620 0a 20 20 20 20 20 20 75 6e 73 69 67 6e 65 64 20  .      unsigned 
1a630 69 73 52 65 63 75 72 73 69 76 65 20 3a 31 3b 20  isRecursive :1; 
1a640 20 20 2f 2a 20 54 72 75 65 20 66 6f 72 20 72 65    /* True for re
1a650 63 75 72 73 69 76 65 20 72 65 66 65 72 65 6e 63  cursive referenc
1a660 65 20 69 6e 20 57 49 54 48 20 2a 2f 0a 20 20 20  e in WITH */.   
1a670 20 7d 20 66 67 3b 0a 23 69 66 6e 64 65 66 20 53   } fg;.#ifndef S
1a680 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
1a690 49 4e 0a 20 20 20 20 75 38 20 69 53 65 6c 65 63  IN.    u8 iSelec
1a6a0 74 49 64 3b 20 20 20 20 20 2f 2a 20 49 66 20 70  tId;     /* If p
1a6b0 53 65 6c 65 63 74 21 3d 30 2c 20 74 68 65 20 69  Select!=0, the i
1a6c0 64 20 6f 66 20 74 68 65 20 73 75 62 2d 73 65 6c  d of the sub-sel
1a6d0 65 63 74 20 69 6e 20 45 51 50 20 2a 2f 0a 23 65  ect in EQP */.#e
1a6e0 6e 64 69 66 0a 20 20 20 20 69 6e 74 20 69 43 75  ndif.    int iCu
1a6f0 72 73 6f 72 3b 20 20 20 20 20 20 2f 2a 20 54 68  rsor;      /* Th
1a700 65 20 56 44 42 45 20 63 75 72 73 6f 72 20 6e 75  e VDBE cursor nu
1a710 6d 62 65 72 20 75 73 65 64 20 74 6f 20 61 63 63  mber used to acc
1a720 65 73 73 20 74 68 69 73 20 74 61 62 6c 65 20 2a  ess this table *
1a730 2f 0a 20 20 20 20 45 78 70 72 20 2a 70 4f 6e 3b  /.    Expr *pOn;
1a740 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 4f          /* The O
1a750 4e 20 63 6c 61 75 73 65 20 6f 66 20 61 20 6a 6f  N clause of a jo
1a760 69 6e 20 2a 2f 0a 20 20 20 20 49 64 4c 69 73 74  in */.    IdList
1a770 20 2a 70 55 73 69 6e 67 3b 20 20 20 2f 2a 20 54   *pUsing;   /* T
1a780 68 65 20 55 53 49 4e 47 20 63 6c 61 75 73 65 20  he USING clause 
1a790 6f 66 20 61 20 6a 6f 69 6e 20 2a 2f 0a 20 20 20  of a join */.   
1a7a0 20 42 69 74 6d 61 73 6b 20 63 6f 6c 55 73 65 64   Bitmask colUsed
1a7b0 3b 20 20 2f 2a 20 42 69 74 20 4e 20 28 31 3c 3c  ;  /* Bit N (1<<
1a7c0 4e 29 20 73 65 74 20 69 66 20 63 6f 6c 75 6d 6e  N) set if column
1a7d0 20 4e 20 6f 66 20 70 54 61 62 20 69 73 20 75 73   N of pTab is us
1a7e0 65 64 20 2a 2f 0a 20 20 20 20 75 6e 69 6f 6e 20  ed */.    union 
1a7f0 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 49  {.      char *zI
1a800 6e 64 65 78 65 64 42 79 3b 20 20 20 20 2f 2a 20  ndexedBy;    /* 
1a810 49 64 65 6e 74 69 66 69 65 72 20 66 72 6f 6d 20  Identifier from 
1a820 22 49 4e 44 45 58 45 44 20 42 59 20 3c 7a 49 6e  "INDEXED BY <zIn
1a830 64 65 78 3e 22 20 63 6c 61 75 73 65 20 2a 2f 0a  dex>" clause */.
1a840 20 20 20 20 20 20 45 78 70 72 4c 69 73 74 20 2a        ExprList *
1a850 70 46 75 6e 63 41 72 67 3b 20 20 2f 2a 20 41 72  pFuncArg;  /* Ar
1a860 67 75 6d 65 6e 74 73 20 74 6f 20 74 61 62 6c 65  guments to table
1a870 2d 76 61 6c 75 65 64 2d 66 75 6e 63 74 69 6f 6e  -valued-function
1a880 20 2a 2f 0a 20 20 20 20 7d 20 75 31 3b 0a 20 20   */.    } u1;.  
1a890 20 20 49 6e 64 65 78 20 2a 70 49 42 49 6e 64 65    Index *pIBInde
1a8a0 78 3b 20 20 2f 2a 20 49 6e 64 65 78 20 73 74 72  x;  /* Index str
1a8b0 75 63 74 75 72 65 20 63 6f 72 72 65 73 70 6f 6e  ucture correspon
1a8c0 64 69 6e 67 20 74 6f 20 75 31 2e 7a 49 6e 64 65  ding to u1.zInde
1a8d0 78 65 64 42 79 20 2a 2f 0a 20 20 7d 20 61 5b 31  xedBy */.  } a[1
1a8e0 5d 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ];             /
1a8f0 2a 20 4f 6e 65 20 65 6e 74 72 79 20 66 6f 72 20  * One entry for 
1a900 65 61 63 68 20 69 64 65 6e 74 69 66 69 65 72 20  each identifier 
1a910 6f 6e 20 74 68 65 20 6c 69 73 74 20 2a 2f 0a 7d  on the list */.}
1a920 3b 0a 0a 2f 2a 0a 2a 2a 20 50 65 72 6d 69 74 74  ;../*.** Permitt
1a930 65 64 20 76 61 6c 75 65 73 20 6f 66 20 74 68 65  ed values of the
1a940 20 53 72 63 4c 69 73 74 2e 61 2e 6a 6f 69 6e 74   SrcList.a.joint
1a950 79 70 65 20 66 69 65 6c 64 0a 2a 2f 0a 23 64 65  ype field.*/.#de
1a960 66 69 6e 65 20 4a 54 5f 49 4e 4e 45 52 20 20 20  fine JT_INNER   
1a970 20 20 30 78 30 30 30 31 20 20 20 20 2f 2a 20 41    0x0001    /* A
1a980 6e 79 20 6b 69 6e 64 20 6f 66 20 69 6e 6e 65 72  ny kind of inner
1a990 20 6f 72 20 63 72 6f 73 73 20 6a 6f 69 6e 20 2a   or cross join *
1a9a0 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 43 52 4f  /.#define JT_CRO
1a9b0 53 53 20 20 20 20 20 30 78 30 30 30 32 20 20 20  SS     0x0002   
1a9c0 20 2f 2a 20 45 78 70 6c 69 63 69 74 20 75 73 65   /* Explicit use
1a9d0 20 6f 66 20 74 68 65 20 43 52 4f 53 53 20 6b 65   of the CROSS ke
1a9e0 79 77 6f 72 64 20 2a 2f 0a 23 64 65 66 69 6e 65  yword */.#define
1a9f0 20 4a 54 5f 4e 41 54 55 52 41 4c 20 20 20 30 78   JT_NATURAL   0x
1aa00 30 30 30 34 20 20 20 20 2f 2a 20 54 72 75 65 20  0004    /* True 
1aa10 66 6f 72 20 61 20 22 6e 61 74 75 72 61 6c 22 20  for a "natural" 
1aa20 6a 6f 69 6e 20 2a 2f 0a 23 64 65 66 69 6e 65 20  join */.#define 
1aa30 4a 54 5f 4c 45 46 54 20 20 20 20 20 20 30 78 30  JT_LEFT      0x0
1aa40 30 30 38 20 20 20 20 2f 2a 20 4c 65 66 74 20 6f  008    /* Left o
1aa50 75 74 65 72 20 6a 6f 69 6e 20 2a 2f 0a 23 64 65  uter join */.#de
1aa60 66 69 6e 65 20 4a 54 5f 52 49 47 48 54 20 20 20  fine JT_RIGHT   
1aa70 20 20 30 78 30 30 31 30 20 20 20 20 2f 2a 20 52    0x0010    /* R
1aa80 69 67 68 74 20 6f 75 74 65 72 20 6a 6f 69 6e 20  ight outer join 
1aa90 2a 2f 0a 23 64 65 66 69 6e 65 20 4a 54 5f 4f 55  */.#define JT_OU
1aaa0 54 45 52 20 20 20 20 20 30 78 30 30 32 30 20 20  TER     0x0020  
1aab0 20 20 2f 2a 20 54 68 65 20 22 4f 55 54 45 52 22    /* The "OUTER"
1aac0 20 6b 65 79 77 6f 72 64 20 69 73 20 70 72 65 73   keyword is pres
1aad0 65 6e 74 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4a  ent */.#define J
1aae0 54 5f 45 52 52 4f 52 20 20 20 20 20 30 78 30 30  T_ERROR     0x00
1aaf0 34 30 20 20 20 20 2f 2a 20 75 6e 6b 6e 6f 77 6e  40    /* unknown
1ab00 20 6f 72 20 75 6e 73 75 70 70 6f 72 74 65 64 20   or unsupported 
1ab10 6a 6f 69 6e 20 74 79 70 65 20 2a 2f 0a 0a 0a 2f  join type */.../
1ab20 2a 0a 2a 2a 20 46 6c 61 67 73 20 61 70 70 72 6f  *.** Flags appro
1ab30 70 72 69 61 74 65 20 66 6f 72 20 74 68 65 20 77  priate for the w
1ab40 63 74 72 6c 46 6c 61 67 73 20 70 61 72 61 6d 65  ctrlFlags parame
1ab50 74 65 72 20 6f 66 20 73 71 6c 69 74 65 33 57 68  ter of sqlite3Wh
1ab60 65 72 65 42 65 67 69 6e 28 29 0a 2a 2a 20 61 6e  ereBegin().** an
1ab70 64 20 74 68 65 20 57 68 65 72 65 49 6e 66 6f 2e  d the WhereInfo.
1ab80 77 63 74 72 6c 46 6c 61 67 73 20 6d 65 6d 62 65  wctrlFlags membe
1ab90 72 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  r..**.** Value c
1aba0 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e 66 6f  onstraints (enfo
1abb0 72 63 65 64 20 76 69 61 20 61 73 73 65 72 74 28  rced via assert(
1abc0 29 29 3a 0a 2a 2a 20 20 20 20 20 57 48 45 52 45  )):.**     WHERE
1abd0 5f 55 53 45 5f 4c 49 4d 49 54 20 20 3d 3d 20 53  _USE_LIMIT  == S
1abe0 46 5f 46 69 78 65 64 4c 69 6d 69 74 0a 2a 2f 0a  F_FixedLimit.*/.
1abf0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 52  #define WHERE_OR
1ac00 44 45 52 42 59 5f 4e 4f 52 4d 41 4c 20 20 20 30  DERBY_NORMAL   0
1ac10 78 30 30 30 30 20 2f 2a 20 4e 6f 2d 6f 70 20 2a  x0000 /* No-op *
1ac20 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1ac30 4f 52 44 45 52 42 59 5f 4d 49 4e 20 20 20 20 20  ORDERBY_MIN     
1ac40 20 30 78 30 30 30 31 20 2f 2a 20 4f 52 44 45 52   0x0001 /* ORDER
1ac50 20 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66   BY processing f
1ac60 6f 72 20 6d 69 6e 28 29 20 66 75 6e 63 20 2a 2f  or min() func */
1ac70 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f  .#define WHERE_O
1ac80 52 44 45 52 42 59 5f 4d 41 58 20 20 20 20 20 20  RDERBY_MAX      
1ac90 30 78 30 30 30 32 20 2f 2a 20 4f 52 44 45 52 20  0x0002 /* ORDER 
1aca0 42 59 20 70 72 6f 63 65 73 73 69 6e 67 20 66 6f  BY processing fo
1acb0 72 20 6d 61 78 28 29 20 66 75 6e 63 20 2a 2f 0a  r max() func */.
1acc0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e  #define WHERE_ON
1acd0 45 50 41 53 53 5f 44 45 53 49 52 45 44 20 20 30  EPASS_DESIRED  0
1ace0 78 30 30 30 34 20 2f 2a 20 57 61 6e 74 20 74 6f  x0004 /* Want to
1acf0 20 64 6f 20 6f 6e 65 2d 70 61 73 73 20 55 50 44   do one-pass UPD
1ad00 41 54 45 2f 44 45 4c 45 54 45 20 2a 2f 0a 23 64  ATE/DELETE */.#d
1ad10 65 66 69 6e 65 20 57 48 45 52 45 5f 4f 4e 45 50  efine WHERE_ONEP
1ad20 41 53 53 5f 4d 55 4c 54 49 52 4f 57 20 30 78 30  ASS_MULTIROW 0x0
1ad30 30 30 38 20 2f 2a 20 4f 4e 45 50 41 53 53 20 69  008 /* ONEPASS i
1ad40 73 20 6f 6b 20 77 69 74 68 20 6d 75 6c 74 69 70  s ok with multip
1ad50 6c 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69  le rows */.#defi
1ad60 6e 65 20 57 48 45 52 45 5f 44 55 50 4c 49 43 41  ne WHERE_DUPLICA
1ad70 54 45 53 5f 4f 4b 20 20 20 20 30 78 30 30 31 30  TES_OK    0x0010
1ad80 20 2f 2a 20 4f 6b 20 74 6f 20 72 65 74 75 72 6e   /* Ok to return
1ad90 20 61 20 72 6f 77 20 6d 6f 72 65 20 74 68 61 6e   a row more than
1ada0 20 6f 6e 63 65 20 2a 2f 0a 23 64 65 66 69 6e 65   once */.#define
1adb0 20 57 48 45 52 45 5f 4f 52 5f 53 55 42 43 4c 41   WHERE_OR_SUBCLA
1adc0 55 53 45 20 20 20 20 20 30 78 30 30 32 30 20 2f  USE     0x0020 /
1add0 2a 20 50 72 6f 63 65 73 73 69 6e 67 20 61 20 73  * Processing a s
1ade0 75 62 2d 57 48 45 52 45 20 61 73 20 70 61 72 74  ub-WHERE as part
1adf0 20 6f 66 0a 20 20 20 20 20 20 20 20 20 20 20 20   of.            
1ae00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ae10 20 20 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65            ** the
1ae20 20 4f 52 20 6f 70 74 69 6d 69 7a 61 74 69 6f 6e   OR optimization
1ae30 20 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45    */.#define WHE
1ae40 52 45 5f 47 52 4f 55 50 42 59 20 20 20 20 20 20  RE_GROUPBY      
1ae50 20 20 20 20 30 78 30 30 34 30 20 2f 2a 20 70 4f      0x0040 /* pO
1ae60 72 64 65 72 42 79 20 69 73 20 72 65 61 6c 6c 79  rderBy is really
1ae70 20 61 20 47 52 4f 55 50 20 42 59 20 2a 2f 0a 23   a GROUP BY */.#
1ae80 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53  define WHERE_DIS
1ae90 54 49 4e 43 54 42 59 20 20 20 20 20 20 20 30 78  TINCTBY       0x
1aea0 30 30 38 30 20 2f 2a 20 70 4f 72 64 65 72 62 79  0080 /* pOrderby
1aeb0 20 69 73 20 72 65 61 6c 6c 79 20 61 20 44 49 53   is really a DIS
1aec0 54 49 4e 43 54 20 63 6c 61 75 73 65 20 2a 2f 0a  TINCT clause */.
1aed0 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 57 41  #define WHERE_WA
1aee0 4e 54 5f 44 49 53 54 49 4e 43 54 20 20 20 20 30  NT_DISTINCT    0
1aef0 78 30 31 30 30 20 2f 2a 20 41 6c 6c 20 6f 75 74  x0100 /* All out
1af00 70 75 74 20 6e 65 65 64 73 20 74 6f 20 62 65 20  put needs to be 
1af10 64 69 73 74 69 6e 63 74 20 2a 2f 0a 23 64 65 66  distinct */.#def
1af20 69 6e 65 20 57 48 45 52 45 5f 53 4f 52 54 42 59  ine WHERE_SORTBY
1af30 47 52 4f 55 50 20 20 20 20 20 20 30 78 30 32 30  GROUP      0x020
1af40 30 20 2f 2a 20 53 75 70 70 6f 72 74 20 73 71 6c  0 /* Support sql
1af50 69 74 65 33 57 68 65 72 65 49 73 53 6f 72 74 65  ite3WhereIsSorte
1af60 64 28 29 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57  d() */.#define W
1af70 48 45 52 45 5f 53 45 45 4b 5f 54 41 42 4c 45 20  HERE_SEEK_TABLE 
1af80 20 20 20 20 20 20 30 78 30 34 30 30 20 2f 2a 20        0x0400 /* 
1af90 44 6f 20 6e 6f 74 20 64 65 66 65 72 20 73 65 65  Do not defer see
1afa0 6b 73 20 6f 6e 20 6d 61 69 6e 20 74 61 62 6c 65  ks on main table
1afb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52   */.#define WHER
1afc0 45 5f 4f 52 44 45 52 42 59 5f 4c 49 4d 49 54 20  E_ORDERBY_LIMIT 
1afd0 20 20 20 30 78 30 38 30 30 20 2f 2a 20 4f 52 44     0x0800 /* ORD
1afe0 45 52 42 59 2b 4c 49 4d 49 54 20 6f 6e 20 74 68  ERBY+LIMIT on th
1aff0 65 20 69 6e 6e 65 72 20 6c 6f 6f 70 20 2a 2f 0a  e inner loop */.
1b000 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 53 45  #define WHERE_SE
1b010 45 4b 5f 55 4e 49 51 5f 54 41 42 4c 45 20 20 30  EK_UNIQ_TABLE  0
1b020 78 31 30 30 30 20 2f 2a 20 44 6f 20 6e 6f 74 20  x1000 /* Do not 
1b030 64 65 66 65 72 20 73 65 65 6b 73 20 69 66 20 75  defer seeks if u
1b040 6e 69 71 75 65 20 2a 2f 0a 20 20 20 20 20 20 20  nique */.       
1b050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b060 20 2f 2a 20 20 20 20 20 30 78 32 30 30 30 20 20   /*     0x2000  
1b070 20 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79 20    not currently 
1b080 75 73 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20  used */.#define 
1b090 57 48 45 52 45 5f 55 53 45 5f 4c 49 4d 49 54 20  WHERE_USE_LIMIT 
1b0a0 20 20 20 20 20 20 20 30 78 34 30 30 30 20 2f 2a         0x4000 /*
1b0b0 20 55 73 65 20 74 68 65 20 4c 49 4d 49 54 20 69   Use the LIMIT i
1b0c0 6e 20 63 6f 73 74 20 65 73 74 69 6d 61 74 65 73  n cost estimates
1b0d0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20   */.            
1b0e0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 20              /*  
1b0f0 20 20 20 30 78 38 30 30 30 20 20 20 20 6e 6f 74     0x8000    not
1b100 20 63 75 72 72 65 6e 74 6c 79 20 75 73 65 64 20   currently used 
1b110 2a 2f 0a 0a 2f 2a 20 41 6c 6c 6f 77 65 64 20 72  */../* Allowed r
1b120 65 74 75 72 6e 20 76 61 6c 75 65 73 20 66 72 6f  eturn values fro
1b130 6d 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73  m sqlite3WhereIs
1b140 44 69 73 74 69 6e 63 74 28 29 0a 2a 2f 0a 23 64  Distinct().*/.#d
1b150 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49 53 54  efine WHERE_DIST
1b160 49 4e 43 54 5f 4e 4f 4f 50 20 20 20 20 20 20 30  INCT_NOOP      0
1b170 20 20 2f 2a 20 44 49 53 54 49 4e 43 54 20 6b 65    /* DISTINCT ke
1b180 79 77 6f 72 64 20 6e 6f 74 20 75 73 65 64 20 2a  yword not used *
1b190 2f 0a 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f  /.#define WHERE_
1b1a0 44 49 53 54 49 4e 43 54 5f 55 4e 49 51 55 45 20  DISTINCT_UNIQUE 
1b1b0 20 20 20 31 20 20 2f 2a 20 4e 6f 20 64 75 70 6c     1  /* No dupl
1b1c0 69 63 61 74 65 73 20 2a 2f 0a 23 64 65 66 69 6e  icates */.#defin
1b1d0 65 20 57 48 45 52 45 5f 44 49 53 54 49 4e 43 54  e WHERE_DISTINCT
1b1e0 5f 4f 52 44 45 52 45 44 20 20 20 32 20 20 2f 2a  _ORDERED   2  /*
1b1f0 20 41 6c 6c 20 64 75 70 6c 69 63 61 74 65 73 20   All duplicates 
1b200 61 72 65 20 61 64 6a 61 63 65 6e 74 20 2a 2f 0a  are adjacent */.
1b210 23 64 65 66 69 6e 65 20 57 48 45 52 45 5f 44 49  #define WHERE_DI
1b220 53 54 49 4e 43 54 5f 55 4e 4f 52 44 45 52 45 44  STINCT_UNORDERED
1b230 20 33 20 20 2f 2a 20 44 75 70 6c 69 63 61 74 65   3  /* Duplicate
1b240 73 20 61 72 65 20 73 63 61 74 74 65 72 65 64 20  s are scattered 
1b250 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41 20 4e 61 6d 65  */../*.** A Name
1b260 43 6f 6e 74 65 78 74 20 64 65 66 69 6e 65 73 20  Context defines 
1b270 61 20 63 6f 6e 74 65 78 74 20 69 6e 20 77 68 69  a context in whi
1b280 63 68 20 74 6f 20 72 65 73 6f 6c 76 65 20 74 61  ch to resolve ta
1b290 62 6c 65 20 61 6e 64 20 63 6f 6c 75 6d 6e 0a 2a  ble and column.*
1b2a0 2a 20 6e 61 6d 65 73 2e 20 20 54 68 65 20 63 6f  * names.  The co
1b2b0 6e 74 65 78 74 20 63 6f 6e 73 69 73 74 73 20 6f  ntext consists o
1b2c0 66 20 61 20 6c 69 73 74 20 6f 66 20 74 61 62 6c  f a list of tabl
1b2d0 65 73 20 28 74 68 65 20 70 53 72 63 4c 69 73 74  es (the pSrcList
1b2e0 29 20 66 69 65 6c 64 20 61 6e 64 0a 2a 2a 20 61  ) field and.** a
1b2f0 20 6c 69 73 74 20 6f 66 20 6e 61 6d 65 64 20 65   list of named e
1b300 78 70 72 65 73 73 69 6f 6e 20 28 70 45 4c 69 73  xpression (pELis
1b310 74 29 2e 20 20 54 68 65 20 6e 61 6d 65 64 20 65  t).  The named e
1b320 78 70 72 65 73 73 69 6f 6e 20 6c 69 73 74 20 6d  xpression list m
1b330 61 79 0a 2a 2a 20 62 65 20 4e 55 4c 4c 2e 20 20  ay.** be NULL.  
1b340 54 68 65 20 70 53 72 63 20 63 6f 72 72 65 73 70  The pSrc corresp
1b350 6f 6e 64 73 20 74 6f 20 74 68 65 20 46 52 4f 4d  onds to the FROM
1b360 20 63 6c 61 75 73 65 20 6f 66 20 61 20 53 45 4c   clause of a SEL
1b370 45 43 54 20 6f 72 0a 2a 2a 20 74 6f 20 74 68 65  ECT or.** to the
1b380 20 74 61 62 6c 65 20 62 65 69 6e 67 20 6f 70 65   table being ope
1b390 72 61 74 65 64 20 6f 6e 20 62 79 20 49 4e 53 45  rated on by INSE
1b3a0 52 54 2c 20 55 50 44 41 54 45 2c 20 6f 72 20 44  RT, UPDATE, or D
1b3b0 45 4c 45 54 45 2e 20 20 54 68 65 0a 2a 2a 20 70  ELETE.  The.** p
1b3c0 45 4c 69 73 74 20 63 6f 72 72 65 73 70 6f 6e 64  EList correspond
1b3d0 73 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20  s to the result 
1b3e0 73 65 74 20 6f 66 20 61 20 53 45 4c 45 43 54 20  set of a SELECT 
1b3f0 61 6e 64 20 69 73 20 4e 55 4c 4c 20 66 6f 72 0a  and is NULL for.
1b400 2a 2a 20 6f 74 68 65 72 20 73 74 61 74 65 6d 65  ** other stateme
1b410 6e 74 73 2e 0a 2a 2a 0a 2a 2a 20 4e 61 6d 65 43  nts..**.** NameC
1b420 6f 6e 74 65 78 74 73 20 63 61 6e 20 62 65 20 6e  ontexts can be n
1b430 65 73 74 65 64 2e 20 20 57 68 65 6e 20 72 65 73  ested.  When res
1b440 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 2c 20 74 68  olving names, th
1b450 65 20 69 6e 6e 65 72 2d 6d 6f 73 74 0a 2a 2a 20  e inner-most.** 
1b460 63 6f 6e 74 65 78 74 20 69 73 20 73 65 61 72 63  context is searc
1b470 68 65 64 20 66 69 72 73 74 2e 20 20 49 66 20 6e  hed first.  If n
1b480 6f 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64  o match is found
1b490 2c 20 74 68 65 20 6e 65 78 74 20 6f 75 74 65 72  , the next outer
1b4a0 0a 2a 2a 20 63 6f 6e 74 65 78 74 20 69 73 20 63  .** context is c
1b4b0 68 65 63 6b 65 64 2e 20 20 49 66 20 74 68 65 72  hecked.  If ther
1b4c0 65 20 69 73 20 73 74 69 6c 6c 20 6e 6f 20 6d 61  e is still no ma
1b4d0 74 63 68 2c 20 74 68 65 20 6e 65 78 74 20 63 6f  tch, the next co
1b4e0 6e 74 65 78 74 0a 2a 2a 20 69 73 20 63 68 65 63  ntext.** is chec
1b4f0 6b 65 64 2e 20 20 54 68 69 73 20 70 72 6f 63 65  ked.  This proce
1b500 73 73 20 63 6f 6e 74 69 6e 75 65 73 20 75 6e 74  ss continues unt
1b510 69 6c 20 65 69 74 68 65 72 20 61 20 6d 61 74 63  il either a matc
1b520 68 20 69 73 20 66 6f 75 6e 64 0a 2a 2a 20 6f 72  h is found.** or
1b530 20 61 6c 6c 20 63 6f 6e 74 65 78 74 73 20 61 72   all contexts ar
1b540 65 20 63 68 65 63 6b 2e 20 20 57 68 65 6e 20 61  e check.  When a
1b550 20 6d 61 74 63 68 20 69 73 20 66 6f 75 6e 64 2c   match is found,
1b560 20 74 68 65 20 6e 52 65 66 20 6d 65 6d 62 65 72   the nRef member
1b570 20 6f 66 0a 2a 2a 20 74 68 65 20 63 6f 6e 74 65   of.** the conte
1b580 78 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  xt containing th
1b590 65 20 6d 61 74 63 68 20 69 73 20 69 6e 63 72 65  e match is incre
1b5a0 6d 65 6e 74 65 64 2e 0a 2a 2a 0a 2a 2a 20 45 61  mented..**.** Ea
1b5b0 63 68 20 73 75 62 71 75 65 72 79 20 67 65 74 73  ch subquery gets
1b5c0 20 61 20 6e 65 77 20 4e 61 6d 65 43 6f 6e 74 65   a new NameConte
1b5d0 78 74 2e 20 20 54 68 65 20 70 4e 65 78 74 20 66  xt.  The pNext f
1b5e0 69 65 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 74  ield points to t
1b5f0 68 65 0a 2a 2a 20 4e 61 6d 65 43 6f 6e 74 65 78  he.** NameContex
1b600 74 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  t in the parent 
1b610 71 75 65 72 79 2e 20 20 54 68 75 73 20 74 68 65  query.  Thus the
1b620 20 70 72 6f 63 65 73 73 20 6f 66 20 73 63 61 6e   process of scan
1b630 6e 69 6e 67 20 74 68 65 0a 2a 2a 20 4e 61 6d 65  ning the.** Name
1b640 43 6f 6e 74 65 78 74 20 6c 69 73 74 20 63 6f 72  Context list cor
1b650 72 65 73 70 6f 6e 64 73 20 74 6f 20 73 65 61 72  responds to sear
1b660 63 68 69 6e 67 20 74 68 72 6f 75 67 68 20 73 75  ching through su
1b670 63 63 65 73 73 69 76 65 6c 79 20 6f 75 74 65 72  ccessively outer
1b680 0a 2a 2a 20 73 75 62 71 75 65 72 69 65 73 20 6c  .** subqueries l
1b690 6f 6f 6b 69 6e 67 20 66 6f 72 20 61 20 6d 61 74  ooking for a mat
1b6a0 63 68 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 4e 61  ch..*/.struct Na
1b6b0 6d 65 43 6f 6e 74 65 78 74 20 7b 0a 20 20 50 61  meContext {.  Pa
1b6c0 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20 20  rse *pParse;    
1b6d0 20 20 20 2f 2a 20 54 68 65 20 70 61 72 73 65 72     /* The parser
1b6e0 20 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70   */.  SrcList *p
1b6f0 53 72 63 4c 69 73 74 3b 20 20 20 2f 2a 20 4f 6e  SrcList;   /* On
1b700 65 20 6f 72 20 6d 6f 72 65 20 74 61 62 6c 65 73  e or more tables
1b710 20 75 73 65 64 20 74 6f 20 72 65 73 6f 6c 76 65   used to resolve
1b720 20 6e 61 6d 65 73 20 2a 2f 0a 20 20 45 78 70 72   names */.  Expr
1b730 4c 69 73 74 20 2a 70 45 4c 69 73 74 3b 20 20 20  List *pEList;   
1b740 20 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 6c 69 73   /* Optional lis
1b750 74 20 6f 66 20 72 65 73 75 6c 74 2d 73 65 74 20  t of result-set 
1b760 63 6f 6c 75 6d 6e 73 20 2a 2f 0a 20 20 41 67 67  columns */.  Agg
1b770 49 6e 66 6f 20 2a 70 41 67 67 49 6e 66 6f 3b 20  Info *pAggInfo; 
1b780 20 20 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e    /* Information
1b790 20 61 62 6f 75 74 20 61 67 67 72 65 67 61 74 65   about aggregate
1b7a0 73 20 61 74 20 74 68 69 73 20 6c 65 76 65 6c 20  s at this level 
1b7b0 2a 2f 0a 20 20 4e 61 6d 65 43 6f 6e 74 65 78 74  */.  NameContext
1b7c0 20 2a 70 4e 65 78 74 3b 20 20 2f 2a 20 4e 65 78   *pNext;  /* Nex
1b7d0 74 20 6f 75 74 65 72 20 6e 61 6d 65 20 63 6f 6e  t outer name con
1b7e0 74 65 78 74 2e 20 20 4e 55 4c 4c 20 66 6f 72 20  text.  NULL for 
1b7f0 6f 75 74 65 72 6d 6f 73 74 20 2a 2f 0a 20 20 69  outermost */.  i
1b800 6e 74 20 6e 52 65 66 3b 20 20 20 20 20 20 20 20  nt nRef;        
1b810 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1b820 20 6e 61 6d 65 73 20 72 65 73 6f 6c 76 65 64 20   names resolved 
1b830 62 79 20 74 68 69 73 20 63 6f 6e 74 65 78 74 20  by this context 
1b840 2a 2f 0a 20 20 69 6e 74 20 6e 45 72 72 3b 20 20  */.  int nErr;  
1b850 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
1b860 62 65 72 20 6f 66 20 65 72 72 6f 72 73 20 65 6e  ber of errors en
1b870 63 6f 75 6e 74 65 72 65 64 20 77 68 69 6c 65 20  countered while 
1b880 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73 20  resolving names 
1b890 2a 2f 0a 20 20 75 31 36 20 6e 63 46 6c 61 67 73  */.  u16 ncFlags
1b8a0 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72  ;         /* Zer
1b8b0 6f 20 6f 72 20 6d 6f 72 65 20 4e 43 5f 2a 20 66  o or more NC_* f
1b8c0 6c 61 67 73 20 64 65 66 69 6e 65 64 20 62 65 6c  lags defined bel
1b8d0 6f 77 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  ow */.};../*.** 
1b8e0 41 6c 6c 6f 77 65 64 20 76 61 6c 75 65 73 20 66  Allowed values f
1b8f0 6f 72 20 74 68 65 20 4e 61 6d 65 43 6f 6e 74 65  or the NameConte
1b900 78 74 2c 20 6e 63 46 6c 61 67 73 20 66 69 65 6c  xt, ncFlags fiel
1b910 64 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65 20 63  d..**.** Value c
1b920 6f 6e 73 74 72 61 69 6e 74 73 20 28 61 6c 6c 20  onstraints (all 
1b930 63 68 65 63 6b 65 64 20 76 69 61 20 61 73 73 65  checked via asse
1b940 72 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4e 43 5f  rt()):.**    NC_
1b950 48 61 73 41 67 67 20 20 20 20 3d 3d 20 53 46 5f  HasAgg    == SF_
1b960 48 61 73 41 67 67 0a 2a 2a 20 20 20 20 4e 43 5f  HasAgg.**    NC_
1b970 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 46 5f  MinMaxAgg == SF_
1b980 4d 69 6e 4d 61 78 41 67 67 20 3d 3d 20 53 51 4c  MinMaxAgg == SQL
1b990 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d 41 58 0a  ITE_FUNC_MINMAX.
1b9a0 2a 2a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43  **.*/.#define NC
1b9b0 5f 41 6c 6c 6f 77 41 67 67 20 20 30 78 30 30 30  _AllowAgg  0x000
1b9c0 31 20 20 2f 2a 20 41 67 67 72 65 67 61 74 65 20  1  /* Aggregate 
1b9d0 66 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 61 6c  functions are al
1b9e0 6c 6f 77 65 64 20 68 65 72 65 20 2a 2f 0a 23 64  lowed here */.#d
1b9f0 65 66 69 6e 65 20 4e 43 5f 50 61 72 74 49 64 78  efine NC_PartIdx
1ba00 20 20 20 30 78 30 30 30 32 20 20 2f 2a 20 54 72     0x0002  /* Tr
1ba10 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e 67 20  ue if resolving 
1ba20 61 20 70 61 72 74 69 61 6c 20 69 6e 64 65 78 20  a partial index 
1ba30 57 48 45 52 45 20 2a 2f 0a 23 64 65 66 69 6e 65  WHERE */.#define
1ba40 20 4e 43 5f 49 73 43 68 65 63 6b 20 20 20 30 78   NC_IsCheck   0x
1ba50 30 30 30 34 20 20 2f 2a 20 54 72 75 65 20 69 66  0004  /* True if
1ba60 20 72 65 73 6f 6c 76 69 6e 67 20 6e 61 6d 65 73   resolving names
1ba70 20 69 6e 20 61 20 43 48 45 43 4b 20 63 6f 6e 73   in a CHECK cons
1ba80 74 72 61 69 6e 74 20 2a 2f 0a 23 64 65 66 69 6e  traint */.#defin
1ba90 65 20 4e 43 5f 49 6e 41 67 67 46 75 6e 63 20 30  e NC_InAggFunc 0
1baa0 78 30 30 30 38 20 20 2f 2a 20 54 72 75 65 20 69  x0008  /* True i
1bab0 66 20 61 6e 61 6c 79 7a 69 6e 67 20 61 72 67 75  f analyzing argu
1bac0 6d 65 6e 74 73 20 74 6f 20 61 6e 20 61 67 67 20  ments to an agg 
1bad0 66 75 6e 63 20 2a 2f 0a 23 64 65 66 69 6e 65 20  func */.#define 
1bae0 4e 43 5f 48 61 73 41 67 67 20 20 20 20 30 78 30  NC_HasAgg    0x0
1baf0 30 31 30 20 20 2f 2a 20 4f 6e 65 20 6f 72 20 6d  010  /* One or m
1bb00 6f 72 65 20 61 67 67 72 65 67 61 74 65 20 66 75  ore aggregate fu
1bb10 6e 63 74 69 6f 6e 73 20 73 65 65 6e 20 2a 2f 0a  nctions seen */.
1bb20 23 64 65 66 69 6e 65 20 4e 43 5f 49 64 78 45 78  #define NC_IdxEx
1bb30 70 72 20 20 20 30 78 30 30 32 30 20 20 2f 2a 20  pr   0x0020  /* 
1bb40 54 72 75 65 20 69 66 20 72 65 73 6f 6c 76 69 6e  True if resolvin
1bb50 67 20 63 6f 6c 75 6d 6e 73 20 6f 66 20 43 52 45  g columns of CRE
1bb60 41 54 45 20 49 4e 44 45 58 20 2a 2f 0a 23 64 65  ATE INDEX */.#de
1bb70 66 69 6e 65 20 4e 43 5f 56 61 72 53 65 6c 65 63  fine NC_VarSelec
1bb80 74 20 30 78 30 30 34 30 20 20 2f 2a 20 41 20 63  t 0x0040  /* A c
1bb90 6f 72 72 65 6c 61 74 65 64 20 73 75 62 71 75 65  orrelated subque
1bba0 72 79 20 68 61 73 20 62 65 65 6e 20 73 65 65 6e  ry has been seen
1bbb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4e 43 5f 4d   */.#define NC_M
1bbc0 69 6e 4d 61 78 41 67 67 20 30 78 31 30 30 30 20  inMaxAgg 0x1000 
1bbd0 20 2f 2a 20 6d 69 6e 2f 6d 61 78 20 61 67 67 72   /* min/max aggr
1bbe0 65 67 61 74 65 73 20 73 65 65 6e 2e 20 20 53 65  egates seen.  Se
1bbf0 65 20 6e 6f 74 65 20 61 62 6f 76 65 20 2a 2f 0a  e note above */.
1bc00 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61 6e  ./*.** An instan
1bc10 63 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77  ce of the follow
1bc20 69 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f  ing structure co
1bc30 6e 74 61 69 6e 73 20 61 6c 6c 20 69 6e 66 6f 72  ntains all infor
1bc40 6d 61 74 69 6f 6e 0a 2a 2a 20 6e 65 65 64 65 64  mation.** needed
1bc50 20 74 6f 20 67 65 6e 65 72 61 74 65 20 63 6f 64   to generate cod
1bc60 65 20 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 53  e for a single S
1bc70 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e 74 2e  ELECT statement.
1bc80 0a 2a 2a 0a 2a 2a 20 6e 4c 69 6d 69 74 20 69 73  .**.** nLimit is
1bc90 20 73 65 74 20 74 6f 20 2d 31 20 69 66 20 74 68   set to -1 if th
1bca0 65 72 65 20 69 73 20 6e 6f 20 4c 49 4d 49 54 20  ere is no LIMIT 
1bcb0 63 6c 61 75 73 65 2e 20 20 6e 4f 66 66 73 65 74  clause.  nOffset
1bcc0 20 69 73 20 73 65 74 20 74 6f 20 30 2e 0a 2a 2a   is set to 0..**
1bcd0 20 49 66 20 74 68 65 72 65 20 69 73 20 61 20 4c   If there is a L
1bce0 49 4d 49 54 20 63 6c 61 75 73 65 2c 20 74 68 65  IMIT clause, the
1bcf0 20 70 61 72 73 65 72 20 73 65 74 73 20 6e 4c 69   parser sets nLi
1bd00 6d 69 74 20 74 6f 20 74 68 65 20 76 61 6c 75 65  mit to the value
1bd10 20 6f 66 20 74 68 65 0a 2a 2a 20 6c 69 6d 69 74   of the.** limit
1bd20 20 61 6e 64 20 6e 4f 66 66 73 65 74 20 74 6f 20   and nOffset to 
1bd30 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1bd40 20 6f 66 66 73 65 74 20 28 6f 72 20 30 20 69 66   offset (or 0 if
1bd50 20 74 68 65 72 65 20 69 73 20 6e 6f 74 0a 2a 2a   there is not.**
1bd60 20 6f 66 66 73 65 74 29 2e 20 20 42 75 74 20 6c   offset).  But l
1bd70 61 74 65 72 20 6f 6e 2c 20 6e 4c 69 6d 69 74 20  ater on, nLimit 
1bd80 61 6e 64 20 6e 4f 66 66 73 65 74 20 62 65 63 6f  and nOffset beco
1bd90 6d 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 6c 6f  me the memory lo
1bda0 63 61 74 69 6f 6e 73 0a 2a 2a 20 69 6e 20 74 68  cations.** in th
1bdb0 65 20 56 44 42 45 20 74 68 61 74 20 72 65 63 6f  e VDBE that reco
1bdc0 72 64 20 74 68 65 20 6c 69 6d 69 74 20 61 6e 64  rd the limit and
1bdd0 20 6f 66 66 73 65 74 20 63 6f 75 6e 74 65 72 73   offset counters
1bde0 2e 0a 2a 2a 0a 2a 2a 20 61 64 64 72 4f 70 65 6e  ..**.** addrOpen
1bdf0 45 70 68 6d 5b 5d 20 65 6e 74 72 69 65 73 20 63  Ephm[] entries c
1be00 6f 6e 74 61 69 6e 20 74 68 65 20 61 64 64 72 65  ontain the addre
1be10 73 73 20 6f 66 20 4f 50 5f 4f 70 65 6e 45 70 68  ss of OP_OpenEph
1be20 65 6d 65 72 61 6c 20 6f 70 63 6f 64 65 73 2e 0a  emeral opcodes..
1be30 2a 2a 20 54 68 65 73 65 20 61 64 64 72 65 73 73  ** These address
1be40 65 73 20 6d 75 73 74 20 62 65 20 73 74 6f 72 65  es must be store
1be50 64 20 73 6f 20 74 68 61 74 20 77 65 20 63 61 6e  d so that we can
1be60 20 67 6f 20 62 61 63 6b 20 61 6e 64 20 66 69 6c   go back and fil
1be70 6c 20 69 6e 0a 2a 2a 20 74 68 65 20 50 34 5f 4b  l in.** the P4_K
1be80 45 59 49 4e 46 4f 20 61 6e 64 20 50 32 20 70 61  EYINFO and P2 pa
1be90 72 61 6d 65 74 65 72 73 20 6c 61 74 65 72 2e 20  rameters later. 
1bea0 20 4e 65 69 74 68 65 72 20 74 68 65 20 4b 65 79   Neither the Key
1beb0 49 6e 66 6f 20 6e 6f 72 0a 2a 2a 20 74 68 65 20  Info nor.** the 
1bec0 6e 75 6d 62 65 72 20 6f 66 20 63 6f 6c 75 6d 6e  number of column
1bed0 73 20 69 6e 20 50 32 20 63 61 6e 20 62 65 20 63  s in P2 can be c
1bee0 6f 6d 70 75 74 65 64 20 61 74 20 74 68 65 20 73  omputed at the s
1bef0 61 6d 65 20 74 69 6d 65 0a 2a 2a 20 61 73 20 74  ame time.** as t
1bf00 68 65 20 4f 50 5f 4f 70 65 6e 45 70 68 6d 20 69  he OP_OpenEphm i
1bf10 6e 73 74 72 75 63 74 69 6f 6e 20 69 73 20 63 6f  nstruction is co
1bf20 64 65 64 20 62 65 63 61 75 73 65 20 6e 6f 74 0a  ded because not.
1bf30 2a 2a 20 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d  ** enough inform
1bf40 61 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20  ation about the 
1bf50 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20 69  compound query i
1bf60 73 20 6b 6e 6f 77 6e 20 61 74 20 74 68 61 74 20  s known at that 
1bf70 70 6f 69 6e 74 2e 0a 2a 2a 20 54 68 65 20 4b 65  point..** The Ke
1bf80 79 49 6e 66 6f 20 66 6f 72 20 61 64 64 72 4f 70  yInfo for addrOp
1bf90 65 6e 54 72 61 6e 5b 30 5d 20 61 6e 64 20 5b 31  enTran[0] and [1
1bfa0 5d 20 63 6f 6e 74 61 69 6e 73 20 63 6f 6c 6c 61  ] contains colla
1bfb0 74 69 6e 67 20 73 65 71 75 65 6e 63 65 73 0a 2a  ting sequences.*
1bfc0 2a 20 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74  * for the result
1bfd0 20 73 65 74 2e 20 20 54 68 65 20 4b 65 79 49 6e   set.  The KeyIn
1bfe0 66 6f 20 66 6f 72 20 61 64 64 72 4f 70 65 6e 45  fo for addrOpenE
1bff0 70 68 6d 5b 32 5d 20 63 6f 6e 74 61 69 6e 73 20  phm[2] contains 
1c000 63 6f 6c 6c 61 74 69 6e 67 0a 2a 2a 20 73 65 71  collating.** seq
1c010 75 65 6e 63 65 73 20 66 6f 72 20 74 68 65 20 4f  uences for the O
1c020 52 44 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a  RDER BY clause..
1c030 2a 2f 0a 73 74 72 75 63 74 20 53 65 6c 65 63 74  */.struct Select
1c040 20 7b 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70   {.  ExprList *p
1c050 45 4c 69 73 74 3b 20 20 20 20 20 20 2f 2a 20 54  EList;      /* T
1c060 68 65 20 66 69 65 6c 64 73 20 6f 66 20 74 68 65  he fields of the
1c070 20 72 65 73 75 6c 74 20 2a 2f 0a 20 20 75 38 20   result */.  u8 
1c080 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  op;             
1c090 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 3a 20 54      /* One of: T
1c0a0 4b 5f 55 4e 49 4f 4e 20 54 4b 5f 41 4c 4c 20 54  K_UNION TK_ALL T
1c0b0 4b 5f 49 4e 54 45 52 53 45 43 54 20 54 4b 5f 45  K_INTERSECT TK_E
1c0c0 58 43 45 50 54 20 2a 2f 0a 20 20 4c 6f 67 45 73  XCEPT */.  LogEs
1c0d0 74 20 6e 53 65 6c 65 63 74 52 6f 77 3b 20 20 20  t nSelectRow;   
1c0e0 20 20 2f 2a 20 45 73 74 69 6d 61 74 65 64 20 6e    /* Estimated n
1c0f0 75 6d 62 65 72 20 6f 66 20 72 65 73 75 6c 74 20  umber of result 
1c100 72 6f 77 73 20 2a 2f 0a 20 20 75 33 32 20 73 65  rows */.  u32 se
1c110 6c 46 6c 61 67 73 3b 20 20 20 20 20 20 20 20 20  lFlags;         
1c120 20 2f 2a 20 56 61 72 69 6f 75 73 20 53 46 5f 2a   /* Various SF_*
1c130 20 76 61 6c 75 65 73 20 2a 2f 0a 20 20 69 6e 74   values */.  int
1c140 20 69 4c 69 6d 69 74 2c 20 69 4f 66 66 73 65 74   iLimit, iOffset
1c150 3b 20 20 20 2f 2a 20 4d 65 6d 6f 72 79 20 72 65  ;   /* Memory re
1c160 67 69 73 74 65 72 73 20 68 6f 6c 64 69 6e 67 20  gisters holding 
1c170 4c 49 4d 49 54 20 26 20 4f 46 46 53 45 54 20 63  LIMIT & OFFSET c
1c180 6f 75 6e 74 65 72 73 20 2a 2f 0a 23 69 66 20 53  ounters */.#if S
1c190 45 4c 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c  ELECTTRACE_ENABL
1c1a0 45 44 0a 20 20 63 68 61 72 20 7a 53 65 6c 4e 61  ED.  char zSelNa
1c1b0 6d 65 5b 31 32 5d 3b 20 20 20 20 20 2f 2a 20 53  me[12];     /* S
1c1c0 79 6d 62 6f 6c 69 63 20 6e 61 6d 65 20 6f 66 20  ymbolic name of 
1c1d0 74 68 69 73 20 53 45 4c 45 43 54 20 75 73 65 20  this SELECT use 
1c1e0 66 6f 72 20 64 65 62 75 67 67 69 6e 67 20 2a 2f  for debugging */
1c1f0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 61 64  .#endif.  int ad
1c200 64 72 4f 70 65 6e 45 70 68 6d 5b 32 5d 3b 20 20  drOpenEphm[2];  
1c210 20 2f 2a 20 4f 50 5f 4f 70 65 6e 45 70 68 65 6d   /* OP_OpenEphem
1c220 20 6f 70 63 6f 64 65 73 20 72 65 6c 61 74 65 64   opcodes related
1c230 20 74 6f 20 74 68 69 73 20 73 65 6c 65 63 74 20   to this select 
1c240 2a 2f 0a 20 20 53 72 63 4c 69 73 74 20 2a 70 53  */.  SrcList *pS
1c250 72 63 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 54  rc;         /* T
1c260 68 65 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a  he FROM clause *
1c270 2f 0a 20 20 45 78 70 72 20 2a 70 57 68 65 72 65  /.  Expr *pWhere
1c280 3b 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ;          /* Th
1c290 65 20 57 48 45 52 45 20 63 6c 61 75 73 65 20 2a  e WHERE clause *
1c2a0 2f 0a 20 20 45 78 70 72 4c 69 73 74 20 2a 70 47  /.  ExprList *pG
1c2b0 72 6f 75 70 42 79 3b 20 20 20 20 2f 2a 20 54 68  roupBy;    /* Th
1c2c0 65 20 47 52 4f 55 50 20 42 59 20 63 6c 61 75 73  e GROUP BY claus
1c2d0 65 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 48 61  e */.  Expr *pHa
1c2e0 76 69 6e 67 3b 20 20 20 20 20 20 20 20 20 2f 2a  ving;         /*
1c2f0 20 54 68 65 20 48 41 56 49 4e 47 20 63 6c 61 75   The HAVING clau
1c300 73 65 20 2a 2f 0a 20 20 45 78 70 72 4c 69 73 74  se */.  ExprList
1c310 20 2a 70 4f 72 64 65 72 42 79 3b 20 20 20 20 2f   *pOrderBy;    /
1c320 2a 20 54 68 65 20 4f 52 44 45 52 20 42 59 20 63  * The ORDER BY c
1c330 6c 61 75 73 65 20 2a 2f 0a 20 20 53 65 6c 65 63  lause */.  Selec
1c340 74 20 2a 70 50 72 69 6f 72 3b 20 20 20 20 20 20  t *pPrior;      
1c350 20 20 2f 2a 20 50 72 69 6f 72 20 73 65 6c 65 63    /* Prior selec
1c360 74 20 69 6e 20 61 20 63 6f 6d 70 6f 75 6e 64 20  t in a compound 
1c370 73 65 6c 65 63 74 20 73 74 61 74 65 6d 65 6e 74  select statement
1c380 20 2a 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 4e   */.  Select *pN
1c390 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
1c3a0 4e 65 78 74 20 73 65 6c 65 63 74 20 74 6f 20 74  Next select to t
1c3b0 68 65 20 6c 65 66 74 20 69 6e 20 61 20 63 6f 6d  he left in a com
1c3c0 70 6f 75 6e 64 20 2a 2f 0a 20 20 45 78 70 72 20  pound */.  Expr 
1c3d0 2a 70 4c 69 6d 69 74 3b 20 20 20 20 20 20 20 20  *pLimit;        
1c3e0 20 20 2f 2a 20 4c 49 4d 49 54 20 65 78 70 72 65    /* LIMIT expre
1c3f0 73 73 69 6f 6e 2e 20 4e 55 4c 4c 20 6d 65 61 6e  ssion. NULL mean
1c400 73 20 6e 6f 74 20 75 73 65 64 2e 20 2a 2f 0a 20  s not used. */. 
1c410 20 45 78 70 72 20 2a 70 4f 66 66 73 65 74 3b 20   Expr *pOffset; 
1c420 20 20 20 20 20 20 20 20 2f 2a 20 4f 46 46 53 45          /* OFFSE
1c430 54 20 65 78 70 72 65 73 73 69 6f 6e 2e 20 4e 55  T expression. NU
1c440 4c 4c 20 6d 65 61 6e 73 20 6e 6f 74 20 75 73 65  LL means not use
1c450 64 2e 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  d. */.  With *pW
1c460 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ith;           /
1c470 2a 20 57 49 54 48 20 63 6c 61 75 73 65 20 61 74  * WITH clause at
1c480 74 61 63 68 65 64 20 74 6f 20 74 68 69 73 20 73  tached to this s
1c490 65 6c 65 63 74 2e 20 4f 72 20 4e 55 4c 4c 2e 20  elect. Or NULL. 
1c4a0 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c  */.};../*.** All
1c4b0 6f 77 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20  owed values for 
1c4c0 53 65 6c 65 63 74 2e 73 65 6c 46 6c 61 67 73 2e  Select.selFlags.
1c4d0 20 20 54 68 65 20 22 53 46 22 20 70 72 65 66 69    The "SF" prefi
1c4e0 78 20 73 74 61 6e 64 73 20 66 6f 72 0a 2a 2a 20  x stands for.** 
1c4f0 22 53 65 6c 65 63 74 20 46 6c 61 67 22 2e 0a 2a  "Select Flag"..*
1c500 2a 0a 2a 2a 20 56 61 6c 75 65 20 63 6f 6e 73 74  *.** Value const
1c510 72 61 69 6e 74 73 20 28 61 6c 6c 20 63 68 65 63  raints (all chec
1c520 6b 65 64 20 76 69 61 20 61 73 73 65 72 74 28 29  ked via assert()
1c530 29 0a 2a 2a 20 20 20 20 20 53 46 5f 48 61 73 41  ).**     SF_HasA
1c540 67 67 20 20 20 20 20 3d 3d 20 4e 43 5f 48 61 73  gg     == NC_Has
1c550 41 67 67 0a 2a 2a 20 20 20 20 20 53 46 5f 4d 69  Agg.**     SF_Mi
1c560 6e 4d 61 78 41 67 67 20 20 3d 3d 20 4e 43 5f 4d  nMaxAgg  == NC_M
1c570 69 6e 4d 61 78 41 67 67 20 20 20 20 20 3d 3d 20  inMaxAgg     == 
1c580 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4d 49 4e 4d  SQLITE_FUNC_MINM
1c590 41 58 0a 2a 2a 20 20 20 20 20 53 46 5f 46 69 78  AX.**     SF_Fix
1c5a0 65 64 4c 69 6d 69 74 20 3d 3d 20 57 48 45 52 45  edLimit == WHERE
1c5b0 5f 55 53 45 5f 4c 49 4d 49 54 0a 2a 2f 0a 23 64  _USE_LIMIT.*/.#d
1c5c0 65 66 69 6e 65 20 53 46 5f 44 69 73 74 69 6e 63  efine SF_Distinc
1c5d0 74 20 20 20 20 20 20 20 30 78 30 30 30 30 31 20  t       0x00001 
1c5e0 20 2f 2a 20 4f 75 74 70 75 74 20 73 68 6f 75 6c   /* Output shoul
1c5f0 64 20 62 65 20 44 49 53 54 49 4e 43 54 20 2a 2f  d be DISTINCT */
1c600 0a 23 64 65 66 69 6e 65 20 53 46 5f 41 6c 6c 20  .#define SF_All 
1c610 20 20 20 20 20 20 20 20 20 20 20 30 78 30 30 30             0x000
1c620 30 32 20 20 2f 2a 20 49 6e 63 6c 75 64 65 73 20  02  /* Includes 
1c630 74 68 65 20 41 4c 4c 20 6b 65 79 77 6f 72 64 20  the ALL keyword 
1c640 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52 65  */.#define SF_Re
1c650 73 6f 6c 76 65 64 20 20 20 20 20 20 20 30 78 30  solved       0x0
1c660 30 30 30 34 20 20 2f 2a 20 49 64 65 6e 74 69 66  0004  /* Identif
1c670 69 65 72 73 20 68 61 76 65 20 62 65 65 6e 20 72  iers have been r
1c680 65 73 6f 6c 76 65 64 20 2a 2f 0a 23 64 65 66 69  esolved */.#defi
1c690 6e 65 20 53 46 5f 41 67 67 72 65 67 61 74 65 20  ne SF_Aggregate 
1c6a0 20 20 20 20 20 30 78 30 30 30 30 38 20 20 2f 2a       0x00008  /*
1c6b0 20 43 6f 6e 74 61 69 6e 73 20 61 67 67 20 66 75   Contains agg fu
1c6c0 6e 63 74 69 6f 6e 73 20 6f 72 20 61 20 47 52 4f  nctions or a GRO
1c6d0 55 50 20 42 59 20 2a 2f 0a 23 64 65 66 69 6e 65  UP BY */.#define
1c6e0 20 53 46 5f 48 61 73 41 67 67 20 20 20 20 20 20   SF_HasAgg      
1c6f0 20 20 20 30 78 30 30 30 31 30 20 20 2f 2a 20 43     0x00010  /* C
1c700 6f 6e 74 61 69 6e 73 20 61 67 67 72 65 67 61 74  ontains aggregat
1c710 65 20 66 75 6e 63 74 69 6f 6e 73 20 2a 2f 0a 23  e functions */.#
1c720 64 65 66 69 6e 65 20 53 46 5f 55 73 65 73 45 70  define SF_UsesEp
1c730 68 65 6d 65 72 61 6c 20 20 30 78 30 30 30 32 30  hemeral  0x00020
1c740 20 20 2f 2a 20 55 73 65 73 20 74 68 65 20 4f 70    /* Uses the Op
1c750 65 6e 45 70 68 65 6d 65 72 61 6c 20 6f 70 63 6f  enEphemeral opco
1c760 64 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46  de */.#define SF
1c770 5f 45 78 70 61 6e 64 65 64 20 20 20 20 20 20 20  _Expanded       
1c780 30 78 30 30 30 34 30 20 20 2f 2a 20 73 71 6c 69  0x00040  /* sqli
1c790 74 65 33 53 65 6c 65 63 74 45 78 70 61 6e 64 28  te3SelectExpand(
1c7a0 29 20 63 61 6c 6c 65 64 20 6f 6e 20 74 68 69 73  ) called on this
1c7b0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 48   */.#define SF_H
1c7c0 61 73 54 79 70 65 49 6e 66 6f 20 20 20 20 30 78  asTypeInfo    0x
1c7d0 30 30 30 38 30 20 20 2f 2a 20 46 52 4f 4d 20 73  00080  /* FROM s
1c7e0 75 62 71 75 65 72 69 65 73 20 68 61 76 65 20 54  ubqueries have T
1c7f0 61 62 6c 65 20 6d 65 74 61 64 61 74 61 20 2a 2f  able metadata */
1c800 0a 23 64 65 66 69 6e 65 20 53 46 5f 43 6f 6d 70  .#define SF_Comp
1c810 6f 75 6e 64 20 20 20 20 20 20 20 30 78 30 30 31  ound       0x001
1c820 30 30 20 20 2f 2a 20 50 61 72 74 20 6f 66 20 61  00  /* Part of a
1c830 20 63 6f 6d 70 6f 75 6e 64 20 71 75 65 72 79 20   compound query 
1c840 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 56 61  */.#define SF_Va
1c850 6c 75 65 73 20 20 20 20 20 20 20 20 20 30 78 30  lues         0x0
1c860 30 32 30 30 20 20 2f 2a 20 53 79 6e 74 68 65 73  0200  /* Synthes
1c870 69 7a 65 64 20 66 72 6f 6d 20 56 41 4c 55 45 53  ized from VALUES
1c880 20 63 6c 61 75 73 65 20 2a 2f 0a 23 64 65 66 69   clause */.#defi
1c890 6e 65 20 53 46 5f 4d 75 6c 74 69 56 61 6c 75 65  ne SF_MultiValue
1c8a0 20 20 20 20 20 30 78 30 30 34 30 30 20 20 2f 2a       0x00400  /*
1c8b0 20 53 69 6e 67 6c 65 20 56 41 4c 55 45 53 20 74   Single VALUES t
1c8c0 65 72 6d 20 77 69 74 68 20 6d 75 6c 74 69 70 6c  erm with multipl
1c8d0 65 20 72 6f 77 73 20 2a 2f 0a 23 64 65 66 69 6e  e rows */.#defin
1c8e0 65 20 53 46 5f 4e 65 73 74 65 64 46 72 6f 6d 20  e SF_NestedFrom 
1c8f0 20 20 20 20 30 78 30 30 38 30 30 20 20 2f 2a 20      0x00800  /* 
1c900 50 61 72 74 20 6f 66 20 61 20 70 61 72 65 6e 74  Part of a parent
1c910 68 65 73 69 7a 65 64 20 46 52 4f 4d 20 63 6c 61  hesized FROM cla
1c920 75 73 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  use */.#define S
1c930 46 5f 4d 69 6e 4d 61 78 41 67 67 20 20 20 20 20  F_MinMaxAgg     
1c940 20 30 78 30 31 30 30 30 20 20 2f 2a 20 41 67 67   0x01000  /* Agg
1c950 72 65 67 61 74 65 20 63 6f 6e 74 61 69 6e 69 6e  regate containin
1c960 67 20 6d 69 6e 28 29 20 6f 72 20 6d 61 78 28 29  g min() or max()
1c970 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 52   */.#define SF_R
1c980 65 63 75 72 73 69 76 65 20 20 20 20 20 20 30 78  ecursive      0x
1c990 30 32 30 30 30 20 20 2f 2a 20 54 68 65 20 72 65  02000  /* The re
1c9a0 63 75 72 73 69 76 65 20 70 61 72 74 20 6f 66 20  cursive part of 
1c9b0 61 20 72 65 63 75 72 73 69 76 65 20 43 54 45 20  a recursive CTE 
1c9c0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 46 5f 46 69  */.#define SF_Fi
1c9d0 78 65 64 4c 69 6d 69 74 20 20 20 20 20 30 78 30  xedLimit     0x0
1c9e0 34 30 30 30 20 20 2f 2a 20 6e 53 65 6c 65 63 74  4000  /* nSelect
1c9f0 52 6f 77 20 73 65 74 20 62 79 20 61 20 63 6f 6e  Row set by a con
1ca00 73 74 61 6e 74 20 4c 49 4d 49 54 20 2a 2f 0a 23  stant LIMIT */.#
1ca10 64 65 66 69 6e 65 20 53 46 5f 4d 61 79 62 65 43  define SF_MaybeC
1ca20 6f 6e 76 65 72 74 20 20 20 30 78 30 38 30 30 30  onvert   0x08000
1ca30 20 20 2f 2a 20 4e 65 65 64 20 63 6f 6e 76 65 72    /* Need conver
1ca40 74 43 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54  tCompoundSelectT
1ca50 6f 53 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23  oSubquery() */.#
1ca60 64 65 66 69 6e 65 20 53 46 5f 43 6f 6e 76 65 72  define SF_Conver
1ca70 74 65 64 20 20 20 20 20 20 30 78 31 30 30 30 30  ted      0x10000
1ca80 20 20 2f 2a 20 42 79 20 63 6f 6e 76 65 72 74 43    /* By convertC
1ca90 6f 6d 70 6f 75 6e 64 53 65 6c 65 63 74 54 6f 53  ompoundSelectToS
1caa0 75 62 71 75 65 72 79 28 29 20 2a 2f 0a 23 64 65  ubquery() */.#de
1cab0 66 69 6e 65 20 53 46 5f 49 6e 63 6c 75 64 65 48  fine SF_IncludeH
1cac0 69 64 64 65 6e 20 20 30 78 32 30 30 30 30 20 20  idden  0x20000  
1cad0 2f 2a 20 49 6e 63 6c 75 64 65 20 68 69 64 64 65  /* Include hidde
1cae0 6e 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 6f 75 74  n columns in out
1caf0 70 75 74 20 2a 2f 0a 0a 0a 2f 2a 0a 2a 2a 20 54  put */.../*.** T
1cb00 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 61 20  he results of a 
1cb10 53 45 4c 45 43 54 20 63 61 6e 20 62 65 20 64 69  SELECT can be di
1cb20 73 74 72 69 62 75 74 65 64 20 69 6e 20 73 65 76  stributed in sev
1cb30 65 72 61 6c 20 77 61 79 73 2c 20 61 73 20 64 65  eral ways, as de
1cb40 66 69 6e 65 64 0a 2a 2a 20 62 79 20 6f 6e 65 20  fined.** by one 
1cb50 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
1cb60 20 6d 61 63 72 6f 73 2e 20 20 54 68 65 20 22 53   macros.  The "S
1cb70 52 54 22 20 70 72 65 66 69 78 20 6d 65 61 6e 73  RT" prefix means
1cb80 20 22 53 45 4c 45 43 54 20 52 65 73 75 6c 74 0a   "SELECT Result.
1cb90 2a 2a 20 54 79 70 65 22 2e 0a 2a 2a 0a 2a 2a 20  ** Type"..**.** 
1cba0 20 20 20 20 53 52 54 5f 55 6e 69 6f 6e 20 20 20      SRT_Union   
1cbb0 20 20 20 20 53 74 6f 72 65 20 72 65 73 75 6c 74      Store result
1cbc0 73 20 61 73 20 61 20 6b 65 79 20 69 6e 20 61 20  s as a key in a 
1cbd0 74 65 6d 70 6f 72 61 72 79 20 69 6e 64 65 78 0a  temporary index.
1cbe0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1cbf0 20 20 20 20 20 20 20 69 64 65 6e 74 69 66 69 65         identifie
1cc00 64 20 62 79 20 70 44 65 73 74 2d 3e 69 53 44 50  d by pDest->iSDP
1cc10 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53  arm..**.**     S
1cc20 52 54 5f 45 78 63 65 70 74 20 20 20 20 20 20 52  RT_Except      R
1cc30 65 6d 6f 76 65 20 72 65 73 75 6c 74 73 20 66 72  emove results fr
1cc40 6f 6d 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  om the temporary
1cc50 20 69 6e 64 65 78 20 70 44 65 73 74 2d 3e 69 53   index pDest->iS
1cc60 44 50 61 72 6d 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  DParm..**.**    
1cc70 20 53 52 54 5f 45 78 69 73 74 73 20 20 20 20 20   SRT_Exists     
1cc80 20 53 74 6f 72 65 20 61 20 31 20 69 6e 20 6d 65   Store a 1 in me
1cc90 6d 6f 72 79 20 63 65 6c 6c 20 70 44 65 73 74 2d  mory cell pDest-
1cca0 3e 69 53 44 50 61 72 6d 20 69 66 20 74 68 65 20  >iSDParm if the 
1ccb0 72 65 73 75 6c 74 0a 2a 2a 20 20 20 20 20 20 20  result.**       
1ccc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
1ccd0 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 2e 0a  t is not empty..
1cce0 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f 44 69  **.**     SRT_Di
1ccf0 73 63 61 72 64 20 20 20 20 20 54 68 72 6f 77 20  scard     Throw 
1cd00 74 68 65 20 72 65 73 75 6c 74 73 20 61 77 61 79  the results away
1cd10 2e 20 20 54 68 69 73 20 69 73 20 75 73 65 64 20  .  This is used 
1cd20 62 79 20 53 45 4c 45 43 54 0a 2a 2a 20 20 20 20  by SELECT.**    
1cd30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cd40 20 73 74 61 74 65 6d 65 6e 74 73 20 77 69 74 68   statements with
1cd50 69 6e 20 74 72 69 67 67 65 72 73 20 77 68 6f 73  in triggers whos
1cd60 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69  e only purpose i
1cd70 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1cd80 20 20 20 20 20 20 20 20 20 74 68 65 20 73 69 64           the sid
1cd90 65 2d 65 66 66 65 63 74 73 20 6f 66 20 66 75 6e  e-effects of fun
1cda0 63 74 69 6f 6e 73 2e 0a 2a 2a 0a 2a 2a 20 41 6c  ctions..**.** Al
1cdb0 6c 20 6f 66 20 74 68 65 20 61 62 6f 76 65 20 61  l of the above a
1cdc0 72 65 20 66 72 65 65 20 74 6f 20 69 67 6e 6f 72  re free to ignor
1cdd0 65 20 74 68 65 69 72 20 4f 52 44 45 52 20 42 59  e their ORDER BY
1cde0 20 63 6c 61 75 73 65 2e 20 54 68 6f 73 65 20 74   clause. Those t
1cdf0 68 61 74 0a 2a 2a 20 66 6f 6c 6c 6f 77 20 6d 75  hat.** follow mu
1ce00 73 74 20 68 6f 6e 6f 72 20 74 68 65 20 4f 52 44  st honor the ORD
1ce10 45 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a  ER BY clause..**
1ce20 0a 2a 2a 20 20 20 20 20 53 52 54 5f 4f 75 74 70  .**     SRT_Outp
1ce30 75 74 20 20 20 20 20 20 47 65 6e 65 72 61 74 65  ut      Generate
1ce40 20 61 20 72 6f 77 20 6f 66 20 6f 75 74 70 75 74   a row of output
1ce50 20 28 75 73 69 6e 67 20 74 68 65 20 4f 50 5f 52   (using the OP_R
1ce60 65 73 75 6c 74 52 6f 77 0a 2a 2a 20 20 20 20 20  esultRow.**     
1ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1ce80 6f 70 63 6f 64 65 29 20 66 6f 72 20 65 61 63 68  opcode) for each
1ce90 20 72 6f 77 20 69 6e 20 74 68 65 20 72 65 73 75   row in the resu
1cea0 6c 74 20 73 65 74 2e 0a 2a 2a 0a 2a 2a 20 20 20  lt set..**.**   
1ceb0 20 20 53 52 54 5f 4d 65 6d 20 20 20 20 20 20 20    SRT_Mem       
1cec0 20 20 4f 6e 6c 79 20 76 61 6c 69 64 20 69 66 20    Only valid if 
1ced0 74 68 65 20 72 65 73 75 6c 74 20 69 73 20 61 20  the result is a 
1cee0 73 69 6e 67 6c 65 20 63 6f 6c 75 6d 6e 2e 0a 2a  single column..*
1cef0 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  *               
1cf00 20 20 20 20 20 20 53 74 6f 72 65 20 74 68 65 20        Store the 
1cf10 66 69 72 73 74 20 63 6f 6c 75 6d 6e 20 6f 66 20  first column of 
1cf20 74 68 65 20 66 69 72 73 74 20 72 65 73 75 6c 74  the first result
1cf30 20 72 6f 77 0a 2a 2a 20 20 20 20 20 20 20 20 20   row.**         
1cf40 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 20 72              in r
1cf50 65 67 69 73 74 65 72 20 70 44 65 73 74 2d 3e 69  egister pDest->i
1cf60 53 44 50 61 72 6d 20 74 68 65 6e 20 61 62 61 6e  SDParm then aban
1cf70 64 6f 6e 20 74 68 65 20 72 65 73 74 0a 2a 2a 20  don the rest.** 
1cf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1cf90 20 20 20 20 6f 66 20 74 68 65 20 71 75 65 72 79      of the query
1cfa0 2e 20 20 54 68 69 73 20 64 65 73 74 69 6e 61 74  .  This destinat
1cfb0 69 6f 6e 20 69 6d 70 6c 69 65 73 20 22 4c 49 4d  ion implies "LIM
1cfc0 49 54 20 31 22 2e 0a 2a 2a 0a 2a 2a 20 20 20 20  IT 1"..**.**    
1cfd0 20 53 52 54 5f 53 65 74 20 20 20 20 20 20 20 20   SRT_Set        
1cfe0 20 54 68 65 20 72 65 73 75 6c 74 20 6d 75 73 74   The result must
1cff0 20 62 65 20 61 20 73 69 6e 67 6c 65 20 63 6f 6c   be a single col
1d000 75 6d 6e 2e 20 20 53 74 6f 72 65 20 65 61 63 68  umn.  Store each
1d010 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d020 20 20 20 20 20 20 20 20 72 6f 77 20 6f 66 20 72          row of r
1d030 65 73 75 6c 74 20 61 73 20 74 68 65 20 6b 65 79  esult as the key
1d040 20 69 6e 20 74 61 62 6c 65 20 70 44 65 73 74 2d   in table pDest-
1d050 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1d060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d070 20 41 70 70 6c 79 20 74 68 65 20 61 66 66 69 6e   Apply the affin
1d080 69 74 79 20 70 44 65 73 74 2d 3e 61 66 66 53 64  ity pDest->affSd
1d090 73 74 20 62 65 66 6f 72 65 20 73 74 6f 72 69 6e  st before storin
1d0a0 67 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  g.**            
1d0b0 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 73           results
1d0c0 2e 20 20 55 73 65 64 20 74 6f 20 69 6d 70 6c 65  .  Used to imple
1d0d0 6d 65 6e 74 20 22 49 4e 20 28 53 45 4c 45 43 54  ment "IN (SELECT
1d0e0 20 2e 2e 2e 29 22 2e 0a 2a 2a 0a 2a 2a 20 20 20   ...)"..**.**   
1d0f0 20 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20 20    SRT_EphemTab  
1d100 20 20 43 72 65 61 74 65 20 61 6e 20 74 65 6d 70    Create an temp
1d110 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44 65 73  orary table pDes
1d120 74 2d 3e 69 53 44 50 61 72 6d 20 61 6e 64 20 73  t->iSDParm and s
1d130 74 6f 72 65 0a 2a 2a 20 20 20 20 20 20 20 20 20  tore.**         
1d140 20 20 20 20 20 20 20 20 20 20 20 20 74 68 65 20              the 
1d150 72 65 73 75 6c 74 20 74 68 65 72 65 2e 20 54 68  result there. Th
1d160 65 20 63 75 72 73 6f 72 20 69 73 20 6c 65 66 74  e cursor is left
1d170 20 6f 70 65 6e 20 61 66 74 65 72 0a 2a 2a 20 20   open after.**  
1d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d190 20 20 20 72 65 74 75 72 6e 69 6e 67 2e 20 20 54     returning.  T
1d1a0 68 69 73 20 69 73 20 6c 69 6b 65 20 53 52 54 5f  his is like SRT_
1d1b0 54 61 62 6c 65 20 65 78 63 65 70 74 20 74 68 61  Table except tha
1d1c0 74 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  t.**            
1d1d0 20 20 20 20 20 20 20 20 20 74 68 69 73 20 64 65           this de
1d1e0 73 74 69 6e 61 74 69 6f 6e 20 75 73 65 73 20 4f  stination uses O
1d1f0 50 5f 4f 70 65 6e 45 70 68 65 6d 65 72 61 6c 20  P_OpenEphemeral 
1d200 74 6f 20 63 72 65 61 74 65 0a 2a 2a 20 20 20 20  to create.**    
1d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d220 20 74 68 65 20 74 61 62 6c 65 20 66 69 72 73 74   the table first
1d230 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d240 43 6f 72 6f 75 74 69 6e 65 20 20 20 47 65 6e 65  Coroutine   Gene
1d250 72 61 74 65 20 61 20 63 6f 2d 72 6f 75 74 69 6e  rate a co-routin
1d260 65 20 74 68 61 74 20 72 65 74 75 72 6e 73 20 61  e that returns a
1d270 20 6e 65 77 20 72 6f 77 20 6f 66 0a 2a 2a 20 20   new row of.**  
1d280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d290 20 20 20 72 65 73 75 6c 74 73 20 65 61 63 68 20     results each 
1d2a0 74 69 6d 65 20 69 74 20 69 73 20 69 6e 76 6f 6b  time it is invok
1d2b0 65 64 2e 20 20 54 68 65 20 65 6e 74 72 79 20 70  ed.  The entry p
1d2c0 6f 69 6e 74 0a 2a 2a 20 20 20 20 20 20 20 20 20  oint.**         
1d2d0 20 20 20 20 20 20 20 20 20 20 20 20 6f 66 20 74              of t
1d2e0 68 65 20 63 6f 2d 72 6f 75 74 69 6e 65 20 69 73  he co-routine is
1d2f0 20 73 74 6f 72 65 64 20 69 6e 20 72 65 67 69 73   stored in regis
1d300 74 65 72 20 70 44 65 73 74 2d 3e 69 53 44 50 61  ter pDest->iSDPa
1d310 72 6d 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  rm.**           
1d320 20 20 20 20 20 20 20 20 20 20 61 6e 64 20 74 68            and th
1d330 65 20 72 65 73 75 6c 74 20 72 6f 77 20 69 73 20  e result row is 
1d340 73 74 6f 72 65 64 20 69 6e 20 70 44 65 73 74 2d  stored in pDest-
1d350 3e 6e 44 65 73 74 20 72 65 67 69 73 74 65 72 73  >nDest registers
1d360 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d370 20 20 20 20 20 20 20 20 73 74 61 72 74 69 6e 67          starting
1d380 20 77 69 74 68 20 70 44 65 73 74 2d 3e 69 53 64   with pDest->iSd
1d390 73 74 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52  st..**.**     SR
1d3a0 54 5f 54 61 62 6c 65 20 20 20 20 20 20 20 53 74  T_Table       St
1d3b0 6f 72 65 20 72 65 73 75 6c 74 73 20 69 6e 20 74  ore results in t
1d3c0 65 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70  emporary table p
1d3d0 44 65 73 74 2d 3e 69 53 44 50 61 72 6d 2e 0a 2a  Dest->iSDParm..*
1d3e0 2a 20 20 20 20 20 53 52 54 5f 46 69 66 6f 20 20  *     SRT_Fifo  
1d3f0 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6c 69        This is li
1d400 6b 65 20 53 52 54 5f 45 70 68 65 6d 54 61 62 20  ke SRT_EphemTab 
1d410 65 78 63 65 70 74 20 74 68 61 74 20 74 68 65 20  except that the 
1d420 74 61 62 6c 65 0a 2a 2a 20 20 20 20 20 20 20 20  table.**        
1d430 20 20 20 20 20 20 20 20 20 20 20 20 20 69 73 20               is 
1d440 61 73 73 75 6d 65 64 20 74 6f 20 61 6c 72 65 61  assumed to alrea
1d450 64 79 20 62 65 20 6f 70 65 6e 2e 20 20 53 52 54  dy be open.  SRT
1d460 5f 46 69 66 6f 20 68 61 73 0a 2a 2a 20 20 20 20  _Fifo has.**    
1d470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d480 20 74 68 65 20 61 64 64 69 74 69 6f 6e 61 6c 20   the additional 
1d490 70 72 6f 70 65 72 74 79 20 6f 66 20 62 65 69 6e  property of bein
1d4a0 67 20 61 62 6c 65 20 74 6f 20 69 67 6e 6f 72 65  g able to ignore
1d4b0 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  .**             
1d4c0 20 20 20 20 20 20 20 20 74 68 65 20 4f 52 44 45          the ORDE
1d4d0 52 20 42 59 20 63 6c 61 75 73 65 2e 0a 2a 2a 0a  R BY clause..**.
1d4e0 2a 2a 20 20 20 20 20 53 52 54 5f 44 69 73 74 46  **     SRT_DistF
1d4f0 69 66 6f 20 20 20 20 53 74 6f 72 65 20 72 65 73  ifo    Store res
1d500 75 6c 74 73 20 69 6e 20 61 20 74 65 6d 70 6f 72  ults in a tempor
1d510 61 72 79 20 74 61 62 6c 65 20 70 44 65 73 74 2d  ary table pDest-
1d520 3e 69 53 44 50 61 72 6d 2e 0a 2a 2a 20 20 20 20  >iSDParm..**    
1d530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d540 20 42 75 74 20 61 6c 73 6f 20 75 73 65 20 74 65   But also use te
1d550 6d 70 6f 72 61 72 79 20 74 61 62 6c 65 20 70 44  mporary table pD
1d560 65 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 61  est->iSDParm+1 a
1d570 73 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20  s.**            
1d580 20 20 20 20 20 20 20 20 20 61 20 72 65 63 6f 72           a recor
1d590 64 20 6f 66 20 61 6c 6c 20 70 72 69 6f 72 20 72  d of all prior r
1d5a0 65 73 75 6c 74 73 20 61 6e 64 20 69 67 6e 6f 72  esults and ignor
1d5b0 65 20 61 6e 79 20 64 75 70 6c 69 63 61 74 65 0a  e any duplicate.
1d5c0 2a 2a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  **              
1d5d0 20 20 20 20 20 20 20 72 6f 77 73 2e 20 20 4e 61         rows.  Na
1d5e0 6d 65 20 6d 65 61 6e 73 3a 20 20 22 44 69 73 74  me means:  "Dist
1d5f0 69 6e 63 74 20 46 69 66 6f 22 2e 0a 2a 2a 0a 2a  inct Fifo"..**.*
1d600 2a 20 20 20 20 20 53 52 54 5f 51 75 65 75 65 20  *     SRT_Queue 
1d610 20 20 20 20 20 20 53 74 6f 72 65 20 72 65 73 75        Store resu
1d620 6c 74 73 20 69 6e 20 70 72 69 6f 72 69 74 79 20  lts in priority 
1d630 71 75 65 75 65 20 70 44 65 73 74 2d 3e 69 53 44  queue pDest->iSD
1d640 50 61 72 6d 20 28 72 65 61 6c 6c 79 0a 2a 2a 20  Parm (really.** 
1d650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d660 20 20 20 20 61 6e 20 69 6e 64 65 78 29 2e 20 20      an index).  
1d670 41 70 70 65 6e 64 20 61 20 73 65 71 75 65 6e 63  Append a sequenc
1d680 65 20 6e 75 6d 62 65 72 20 73 6f 20 74 68 61 74  e number so that
1d690 20 61 6c 6c 20 65 6e 74 72 69 65 73 0a 2a 2a 20   all entries.** 
1d6a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d6b0 20 20 20 20 61 72 65 20 64 69 73 74 69 6e 63 74      are distinct
1d6c0 2e 0a 2a 2a 0a 2a 2a 20 20 20 20 20 53 52 54 5f  ..**.**     SRT_
1d6d0 44 69 73 74 51 75 65 75 65 20 20 20 53 74 6f 72  DistQueue   Stor
1d6e0 65 20 72 65 73 75 6c 74 73 20 69 6e 20 70 72 69  e results in pri
1d6f0 6f 72 69 74 79 20 71 75 65 75 65 20 70 44 65 73  ority queue pDes
1d700 74 2d 3e 69 53 44 50 61 72 6d 20 6f 6e 6c 79 20  t->iSDParm only 
1d710 69 66 0a 2a 2a 20 20 20 20 20 20 20 20 20 20 20  if.**           
1d720 20 20 20 20 20 20 20 20 20 20 74 68 65 20 73 61            the sa
1d730 6d 65 20 72 65 63 6f 72 64 20 68 61 73 20 6e 65  me record has ne
1d740 76 65 72 20 62 65 65 6e 20 73 74 6f 72 65 64 20  ver been stored 
1d750 62 65 66 6f 72 65 2e 20 20 54 68 65 0a 2a 2a 20  before.  The.** 
1d760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1d770 20 20 20 20 69 6e 64 65 78 20 61 74 20 70 44 65      index at pDe
1d780 73 74 2d 3e 69 53 44 50 61 72 6d 2b 31 20 68 6f  st->iSDParm+1 ho
1d790 6c 64 20 61 6c 6c 20 70 72 69 6f 72 20 73 74 6f  ld all prior sto
1d7a0 72 65 73 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20  res..*/.#define 
1d7b0 53 52 54 5f 55 6e 69 6f 6e 20 20 20 20 20 20 20  SRT_Union       
1d7c0 20 31 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73   1  /* Store res
1d7d0 75 6c 74 20 61 73 20 6b 65 79 73 20 69 6e 20 61  ult as keys in a
1d7e0 6e 20 69 6e 64 65 78 20 2a 2f 0a 23 64 65 66 69  n index */.#defi
1d7f0 6e 65 20 53 52 54 5f 45 78 63 65 70 74 20 20 20  ne SRT_Except   
1d800 20 20 20 20 32 20 20 2f 2a 20 52 65 6d 6f 76 65      2  /* Remove
1d810 20 72 65 73 75 6c 74 20 66 72 6f 6d 20 61 20 55   result from a U
1d820 4e 49 4f 4e 20 69 6e 64 65 78 20 2a 2f 0a 23 64  NION index */.#d
1d830 65 66 69 6e 65 20 53 52 54 5f 45 78 69 73 74 73  efine SRT_Exists
1d840 20 20 20 20 20 20 20 33 20 20 2f 2a 20 53 74 6f         3  /* Sto
1d850 72 65 20 31 20 69 66 20 74 68 65 20 72 65 73 75  re 1 if the resu
1d860 6c 74 20 69 73 20 6e 6f 74 20 65 6d 70 74 79 20  lt is not empty 
1d870 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 44  */.#define SRT_D
1d880 69 73 63 61 72 64 20 20 20 20 20 20 34 20 20 2f  iscard      4  /
1d890 2a 20 44 6f 20 6e 6f 74 20 73 61 76 65 20 74 68  * Do not save th
1d8a0 65 20 72 65 73 75 6c 74 73 20 61 6e 79 77 68 65  e results anywhe
1d8b0 72 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52  re */.#define SR
1d8c0 54 5f 46 69 66 6f 20 20 20 20 20 20 20 20 20 35  T_Fifo         5
1d8d0 20 20 2f 2a 20 53 74 6f 72 65 20 72 65 73 75 6c    /* Store resul
1d8e0 74 20 61 73 20 64 61 74 61 20 77 69 74 68 20 61  t as data with a
1d8f0 6e 20 61 75 74 6f 6d 61 74 69 63 20 72 6f 77 69  n automatic rowi
1d900 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54  d */.#define SRT
1d910 5f 44 69 73 74 46 69 66 6f 20 20 20 20 20 36 20  _DistFifo     6 
1d920 20 2f 2a 20 4c 69 6b 65 20 53 52 54 5f 46 69 66   /* Like SRT_Fif
1d930 6f 2c 20 62 75 74 20 75 6e 69 71 75 65 20 72 65  o, but unique re
1d940 73 75 6c 74 73 20 6f 6e 6c 79 20 2a 2f 0a 23 64  sults only */.#d
1d950 65 66 69 6e 65 20 53 52 54 5f 51 75 65 75 65 20  efine SRT_Queue 
1d960 20 20 20 20 20 20 20 37 20 20 2f 2a 20 53 74 6f         7  /* Sto
1d970 72 65 20 72 65 73 75 6c 74 20 69 6e 20 61 6e 20  re result in an 
1d980 71 75 65 75 65 20 2a 2f 0a 23 64 65 66 69 6e 65  queue */.#define
1d990 20 53 52 54 5f 44 69 73 74 51 75 65 75 65 20 20   SRT_DistQueue  
1d9a0 20 20 38 20 20 2f 2a 20 4c 69 6b 65 20 53 52 54    8  /* Like SRT
1d9b0 5f 51 75 65 75 65 2c 20 62 75 74 20 75 6e 69 71  _Queue, but uniq
1d9c0 75 65 20 72 65 73 75 6c 74 73 20 6f 6e 6c 79 20  ue results only 
1d9d0 2a 2f 0a 0a 2f 2a 20 54 68 65 20 4f 52 44 45 52  */../* The ORDER
1d9e0 20 42 59 20 63 6c 61 75 73 65 20 69 73 20 69 67   BY clause is ig
1d9f0 6e 6f 72 65 64 20 66 6f 72 20 61 6c 6c 20 6f 66  nored for all of
1da00 20 74 68 65 20 61 62 6f 76 65 20 2a 2f 0a 23 64   the above */.#d
1da10 65 66 69 6e 65 20 49 67 6e 6f 72 61 62 6c 65 4f  efine IgnorableO
1da20 72 64 65 72 62 79 28 58 29 20 28 28 58 2d 3e 65  rderby(X) ((X->e
1da30 44 65 73 74 29 3c 3d 53 52 54 5f 44 69 73 74 51  Dest)<=SRT_DistQ
1da40 75 65 75 65 29 0a 0a 23 64 65 66 69 6e 65 20 53  ueue)..#define S
1da50 52 54 5f 4f 75 74 70 75 74 20 20 20 20 20 20 20  RT_Output       
1da60 39 20 20 2f 2a 20 4f 75 74 70 75 74 20 65 61 63  9  /* Output eac
1da70 68 20 72 6f 77 20 6f 66 20 72 65 73 75 6c 74 20  h row of result 
1da80 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 4d  */.#define SRT_M
1da90 65 6d 20 20 20 20 20 20 20 20 20 31 30 20 20 2f  em         10  /
1daa0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 20 69  * Store result i
1dab0 6e 20 61 20 6d 65 6d 6f 72 79 20 63 65 6c 6c 20  n a memory cell 
1dac0 2a 2f 0a 23 64 65 66 69 6e 65 20 53 52 54 5f 53  */.#define SRT_S
1dad0 65 74 20 20 20 20 20 20 20 20 20 31 31 20 20 2f  et         11  /
1dae0 2a 20 53 74 6f 72 65 20 72 65 73 75 6c 74 73 20  * Store results 
1daf0 61 73 20 6b 65 79 73 20 69 6e 20 61 6e 20 69 6e  as keys in an in
1db00 64 65 78 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  dex */.#define S
1db10 52 54 5f 45 70 68 65 6d 54 61 62 20 20 20 20 31  RT_EphemTab    1
1db20 32 20 20 2f 2a 20 43 72 65 61 74 65 20 74 72 61  2  /* Create tra
1db30 6e 73 69 65 6e 74 20 74 61 62 20 61 6e 64 20 73  nsient tab and s
1db40 74 6f 72 65 20 6c 69 6b 65 20 53 52 54 5f 54 61  tore like SRT_Ta
1db50 62 6c 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  ble */.#define S
1db60 52 54 5f 43 6f 72 6f 75 74 69 6e 65 20 20 20 31  RT_Coroutine   1
1db70 33 20 20 2f 2a 20 47 65 6e 65 72 61 74 65 20 61  3  /* Generate a
1db80 20 73 69 6e 67 6c 65 20 72 6f 77 20 6f 66 20 72   single row of r
1db90 65 73 75 6c 74 20 2a 2f 0a 23 64 65 66 69 6e 65  esult */.#define
1dba0 20 53 52 54 5f 54 61 62 6c 65 20 20 20 20 20 20   SRT_Table      
1dbb0 20 31 34 20 20 2f 2a 20 53 74 6f 72 65 20 72 65   14  /* Store re
1dbc0 73 75 6c 74 20 61 73 20 64 61 74 61 20 77 69 74  sult as data wit
1dbd0 68 20 61 6e 20 61 75 74 6f 6d 61 74 69 63 20 72  h an automatic r
1dbe0 6f 77 69 64 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 41  owid */../*.** A
1dbf0 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68  n instance of th
1dc00 69 73 20 6f 62 6a 65 63 74 20 64 65 73 63 72 69  is object descri
1dc10 62 65 73 20 77 68 65 72 65 20 74 6f 20 70 75 74  bes where to put
1dc20 20 6f 66 20 74 68 65 20 72 65 73 75 6c 74 73 20   of the results 
1dc30 6f 66 0a 2a 2a 20 61 20 53 45 4c 45 43 54 20 73  of.** a SELECT s
1dc40 74 61 74 65 6d 65 6e 74 2e 0a 2a 2f 0a 73 74 72  tatement..*/.str
1dc50 75 63 74 20 53 65 6c 65 63 74 44 65 73 74 20 7b  uct SelectDest {
1dc60 0a 20 20 75 38 20 65 44 65 73 74 3b 20 20 20 20  .  u8 eDest;    
1dc70 20 20 20 20 20 20 20 20 2f 2a 20 48 6f 77 20 74          /* How t
1dc80 6f 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65  o dispose of the
1dc90 20 72 65 73 75 6c 74 73 2e 20 20 4f 6e 20 6f 66   results.  On of
1dca0 20 53 52 54 5f 2a 20 61 62 6f 76 65 2e 20 2a 2f   SRT_* above. */
1dcb0 0a 20 20 69 6e 74 20 69 53 44 50 61 72 6d 3b 20  .  int iSDParm; 
1dcc0 20 20 20 20 20 20 20 20 2f 2a 20 41 20 70 61 72          /* A par
1dcd0 61 6d 65 74 65 72 20 75 73 65 64 20 62 79 20 74  ameter used by t
1dce0 68 65 20 65 44 65 73 74 20 64 69 73 70 6f 73 61  he eDest disposa
1dcf0 6c 20 6d 65 74 68 6f 64 20 2a 2f 0a 20 20 69 6e  l method */.  in
1dd00 74 20 69 53 64 73 74 3b 20 20 20 20 20 20 20 20  t iSdst;        
1dd10 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1dd20 74 65 72 20 77 68 65 72 65 20 72 65 73 75 6c 74  ter where result
1dd30 73 20 61 72 65 20 77 72 69 74 74 65 6e 20 2a 2f  s are written */
1dd40 0a 20 20 69 6e 74 20 6e 53 64 73 74 3b 20 20 20  .  int nSdst;   
1dd50 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1dd60 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20 61  r of registers a
1dd70 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20 20 63 68  llocated */.  ch
1dd80 61 72 20 2a 7a 41 66 66 53 64 73 74 3b 20 20 20  ar *zAffSdst;   
1dd90 20 20 20 2f 2a 20 41 66 66 69 6e 69 74 79 20 75     /* Affinity u
1dda0 73 65 64 20 77 68 65 6e 20 65 44 65 73 74 3d 3d  sed when eDest==
1ddb0 53 52 54 5f 53 65 74 20 2a 2f 0a 20 20 45 78 70  SRT_Set */.  Exp
1ddc0 72 4c 69 73 74 20 2a 70 4f 72 64 65 72 42 79 3b  rList *pOrderBy;
1ddd0 20 20 2f 2a 20 4b 65 79 20 63 6f 6c 75 6d 6e 73    /* Key columns
1dde0 20 66 6f 72 20 53 52 54 5f 51 75 65 75 65 20 61   for SRT_Queue a
1ddf0 6e 64 20 53 52 54 5f 44 69 73 74 51 75 65 75 65  nd SRT_DistQueue
1de00 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20 44 75   */.};../*.** Du
1de10 72 69 6e 67 20 63 6f 64 65 20 67 65 6e 65 72 61  ring code genera
1de20 74 69 6f 6e 20 6f 66 20 73 74 61 74 65 6d 65 6e  tion of statemen
1de30 74 73 20 74 68 61 74 20 64 6f 20 69 6e 73 65 72  ts that do inser
1de40 74 73 20 69 6e 74 6f 20 41 55 54 4f 49 4e 43 52  ts into AUTOINCR
1de50 45 4d 45 4e 54 0a 2a 2a 20 74 61 62 6c 65 73 2c  EMENT.** tables,
1de60 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 69   the following i
1de70 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 61 74  nformation is at
1de80 74 61 63 68 65 64 20 74 6f 20 74 68 65 20 54 61  tached to the Ta
1de90 62 6c 65 2e 75 2e 61 75 74 6f 49 6e 63 2e 70 0a  ble.u.autoInc.p.
1dea0 2a 2a 20 70 6f 69 6e 74 65 72 20 6f 66 20 65 61  ** pointer of ea
1deb0 63 68 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e 74  ch autoincrement
1dec0 20 74 61 62 6c 65 20 74 6f 20 72 65 63 6f 72 64   table to record
1ded0 20 73 6f 6d 65 20 73 69 64 65 20 69 6e 66 6f 72   some side infor
1dee0 6d 61 74 69 6f 6e 20 74 68 61 74 0a 2a 2a 20 74  mation that.** t
1def0 68 65 20 63 6f 64 65 20 67 65 6e 65 72 61 74 6f  he code generato
1df00 72 20 6e 65 65 64 73 2e 20 20 57 65 20 68 61 76  r needs.  We hav
1df10 65 20 74 6f 20 6b 65 65 70 20 70 65 72 2d 74 61  e to keep per-ta
1df20 62 6c 65 20 61 75 74 6f 69 6e 63 72 65 6d 65 6e  ble autoincremen
1df30 74 0a 2a 2a 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  t.** information
1df40 20 69 6e 20 63 61 73 65 20 69 6e 73 65 72 74 73   in case inserts
1df50 20 61 72 65 20 64 6f 6e 65 20 77 69 74 68 69 6e   are done within
1df60 20 74 72 69 67 67 65 72 73 2e 20 20 54 72 69 67   triggers.  Trig
1df70 67 65 72 73 20 64 6f 20 6e 6f 74 0a 2a 2a 20 6e  gers do not.** n
1df80 6f 72 6d 61 6c 6c 79 20 63 6f 6f 72 64 69 6e 61  ormally coordina
1df90 74 65 20 74 68 65 69 72 20 61 63 74 69 76 69 74  te their activit
1dfa0 69 65 73 2c 20 62 75 74 20 77 65 20 64 6f 20 6e  ies, but we do n
1dfb0 65 65 64 20 74 6f 20 63 6f 6f 72 64 69 6e 61 74  eed to coordinat
1dfc0 65 20 74 68 65 0a 2a 2a 20 6c 6f 61 64 69 6e 67  e the.** loading
1dfd0 20 61 6e 64 20 73 61 76 69 6e 67 20 6f 66 20 61   and saving of a
1dfe0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 20 69 6e 66  utoincrement inf
1dff0 6f 72 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72  ormation..*/.str
1e000 75 63 74 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  uct AutoincInfo 
1e010 7b 0a 20 20 41 75 74 6f 69 6e 63 49 6e 66 6f 20  {.  AutoincInfo 
1e020 2a 70 4e 65 78 74 3b 20 20 20 2f 2a 20 4e 65 78  *pNext;   /* Nex
1e030 74 20 69 6e 66 6f 20 62 6c 6f 63 6b 20 69 6e 20  t info block in 
1e040 61 20 6c 69 73 74 20 6f 66 20 74 68 65 6d 20 61  a list of them a
1e050 6c 6c 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 70  ll */.  Table *p
1e060 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 2f 2a  Tab;          /*
1e070 20 54 61 62 6c 65 20 74 68 69 73 20 69 6e 66 6f   Table this info
1e080 20 62 6c 6f 63 6b 20 72 65 66 65 72 73 20 74 6f   block refers to
1e090 20 2a 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20   */.  int iDb;  
1e0a0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49              /* I
1e0b0 6e 64 65 78 20 69 6e 20 73 71 6c 69 74 65 33 2e  ndex in sqlite3.
1e0c0 61 44 62 5b 5d 20 6f 66 20 64 61 74 61 62 61 73  aDb[] of databas
1e0d0 65 20 68 6f 6c 64 69 6e 67 20 70 54 61 62 20 2a  e holding pTab *
1e0e0 2f 0a 20 20 69 6e 74 20 72 65 67 43 74 72 3b 20  /.  int regCtr; 
1e0f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 65 6d            /* Mem
1e100 6f 72 79 20 72 65 67 69 73 74 65 72 20 68 6f 6c  ory register hol
1e110 64 69 6e 67 20 74 68 65 20 72 6f 77 69 64 20 63  ding the rowid c
1e120 6f 75 6e 74 65 72 20 2a 2f 0a 7d 3b 0a 0a 2f 2a  ounter */.};../*
1e130 0a 2a 2a 20 53 69 7a 65 20 6f 66 20 74 68 65 20  .** Size of the 
1e140 63 6f 6c 75 6d 6e 20 63 61 63 68 65 0a 2a 2f 0a  column cache.*/.
1e150 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4e  #ifndef SQLITE_N
1e160 5f 43 4f 4c 43 41 43 48 45 0a 23 20 64 65 66 69  _COLCACHE.# defi
1e170 6e 65 20 53 51 4c 49 54 45 5f 4e 5f 43 4f 4c 43  ne SQLITE_N_COLC
1e180 41 43 48 45 20 31 30 0a 23 65 6e 64 69 66 0a 0a  ACHE 10.#endif..
1e190 2f 2a 0a 2a 2a 20 41 74 20 6c 65 61 73 74 20 6f  /*.** At least o
1e1a0 6e 65 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  ne instance of t
1e1b0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
1e1c0 75 63 74 75 72 65 20 69 73 20 63 72 65 61 74 65  ucture is create
1e1d0 64 20 66 6f 72 20 65 61 63 68 0a 2a 2a 20 74 72  d for each.** tr
1e1e0 69 67 67 65 72 20 74 68 61 74 20 6d 61 79 20 62  igger that may b
1e1f0 65 20 66 69 72 65 64 20 77 68 69 6c 65 20 70 61  e fired while pa
1e200 72 73 69 6e 67 20 61 6e 20 49 4e 53 45 52 54 2c  rsing an INSERT,
1e210 20 55 50 44 41 54 45 20 6f 72 20 44 45 4c 45 54   UPDATE or DELET
1e220 45 0a 2a 2a 20 73 74 61 74 65 6d 65 6e 74 2e 20  E.** statement. 
1e230 41 6c 6c 20 73 75 63 68 20 6f 62 6a 65 63 74 73  All such objects
1e240 20 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 74   are stored in t
1e250 68 65 20 6c 69 6e 6b 65 64 20 6c 69 73 74 20 68  he linked list h
1e260 65 61 64 65 64 20 61 74 0a 2a 2a 20 50 61 72 73  eaded at.** Pars
1e270 65 2e 70 54 72 69 67 67 65 72 50 72 67 20 61 6e  e.pTriggerPrg an
1e280 64 20 64 65 6c 65 74 65 64 20 6f 6e 63 65 20 73  d deleted once s
1e290 74 61 74 65 6d 65 6e 74 20 63 6f 6d 70 69 6c 61  tatement compila
1e2a0 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 0a 2a 2a  tion has been.**
1e2b0 20 63 6f 6d 70 6c 65 74 65 64 2e 0a 2a 2a 0a 2a   completed..**.*
1e2c0 2a 20 41 20 56 64 62 65 20 73 75 62 2d 70 72 6f  * A Vdbe sub-pro
1e2d0 67 72 61 6d 20 74 68 61 74 20 69 6d 70 6c 65 6d  gram that implem
1e2e0 65 6e 74 73 20 74 68 65 20 62 6f 64 79 20 61 6e  ents the body an
1e2f0 64 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  d WHEN clause of
1e300 20 74 72 69 67 67 65 72 0a 2a 2a 20 54 72 69 67   trigger.** Trig
1e310 67 65 72 50 72 67 2e 70 54 72 69 67 67 65 72 2c  gerPrg.pTrigger,
1e320 20 61 73 73 75 6d 69 6e 67 20 61 20 64 65 66 61   assuming a defa
1e330 75 6c 74 20 4f 4e 20 43 4f 4e 46 4c 49 43 54 20  ult ON CONFLICT 
1e340 63 6c 61 75 73 65 20 6f 66 0a 2a 2a 20 54 72 69  clause of.** Tri
1e350 67 67 65 72 50 72 67 2e 6f 72 63 6f 6e 66 2c 20  ggerPrg.orconf, 
1e360 69 73 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65  is stored in the
1e370 20 54 72 69 67 67 65 72 50 72 67 2e 70 50 72 6f   TriggerPrg.pPro
1e380 67 72 61 6d 20 76 61 72 69 61 62 6c 65 2e 0a 2a  gram variable..*
1e390 2a 20 54 68 65 20 50 61 72 73 65 2e 70 54 72 69  * The Parse.pTri
1e3a0 67 67 65 72 50 72 67 20 6c 69 73 74 20 6e 65 76  ggerPrg list nev
1e3b0 65 72 20 63 6f 6e 74 61 69 6e 73 20 74 77 6f 20  er contains two 
1e3c0 65 6e 74 72 69 65 73 20 77 69 74 68 20 74 68 65  entries with the
1e3d0 20 73 61 6d 65 0a 2a 2a 20 76 61 6c 75 65 73 20   same.** values 
1e3e0 66 6f 72 20 62 6f 74 68 20 70 54 72 69 67 67 65  for both pTrigge
1e3f0 72 20 61 6e 64 20 6f 72 63 6f 6e 66 2e 0a 2a 2a  r and orconf..**
1e400 0a 2a 2a 20 54 68 65 20 54 72 69 67 67 65 72 50  .** The TriggerP
1e410 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 30 5d 20 76  rg.aColmask[0] v
1e420 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 74  ariable is set t
1e430 6f 20 61 20 6d 61 73 6b 20 6f 66 20 6f 6c 64 2e  o a mask of old.
1e440 2a 20 63 6f 6c 75 6d 6e 73 0a 2a 2a 20 61 63 63  * columns.** acc
1e450 65 73 73 65 64 20 28 6f 72 20 73 65 74 20 74 6f  essed (or set to
1e460 20 30 20 66 6f 72 20 74 72 69 67 67 65 72 73 20   0 for triggers 
1e470 66 69 72 65 64 20 61 73 20 61 20 72 65 73 75 6c  fired as a resul
1e480 74 20 6f 66 20 49 4e 53 45 52 54 0a 2a 2a 20 73  t of INSERT.** s
1e490 74 61 74 65 6d 65 6e 74 73 29 2e 20 53 69 6d 69  tatements). Simi
1e4a0 6c 61 72 6c 79 2c 20 74 68 65 20 54 72 69 67 67  larly, the Trigg
1e4b0 65 72 50 72 67 2e 61 43 6f 6c 6d 61 73 6b 5b 31  erPrg.aColmask[1
1e4c0 5d 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  ] variable is se
1e4d0 74 20 74 6f 0a 2a 2a 20 61 20 6d 61 73 6b 20 6f  t to.** a mask o
1e4e0 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  f new.* columns 
1e4f0 75 73 65 64 20 62 79 20 74 68 65 20 70 72 6f 67  used by the prog
1e500 72 61 6d 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 54  ram..*/.struct T
1e510 72 69 67 67 65 72 50 72 67 20 7b 0a 20 20 54 72  riggerPrg {.  Tr
1e520 69 67 67 65 72 20 2a 70 54 72 69 67 67 65 72 3b  igger *pTrigger;
1e530 20 20 20 20 20 20 2f 2a 20 54 72 69 67 67 65 72        /* Trigger
1e540 20 74 68 69 73 20 70 72 6f 67 72 61 6d 20 77 61   this program wa
1e550 73 20 63 6f 64 65 64 20 66 72 6f 6d 20 2a 2f 0a  s coded from */.
1e560 20 20 54 72 69 67 67 65 72 50 72 67 20 2a 70 4e    TriggerPrg *pN
1e570 65 78 74 3b 20 20 20 20 20 20 2f 2a 20 4e 65 78  ext;      /* Nex
1e580 74 20 65 6e 74 72 79 20 69 6e 20 50 61 72 73 65  t entry in Parse
1e590 2e 70 54 72 69 67 67 65 72 50 72 67 20 6c 69 73  .pTriggerPrg lis
1e5a0 74 20 2a 2f 0a 20 20 53 75 62 50 72 6f 67 72 61  t */.  SubProgra
1e5b0 6d 20 2a 70 50 72 6f 67 72 61 6d 3b 20 20 20 2f  m *pProgram;   /
1e5c0 2a 20 50 72 6f 67 72 61 6d 20 69 6d 70 6c 65 6d  * Program implem
1e5d0 65 6e 74 69 6e 67 20 70 54 72 69 67 67 65 72 2f  enting pTrigger/
1e5e0 6f 72 63 6f 6e 66 20 2a 2f 0a 20 20 69 6e 74 20  orconf */.  int 
1e5f0 6f 72 63 6f 6e 66 3b 20 20 20 20 20 20 20 20 20  orconf;         
1e600 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 4f      /* Default O
1e610 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69 63  N CONFLICT polic
1e620 79 20 2a 2f 0a 20 20 75 33 32 20 61 43 6f 6c 6d  y */.  u32 aColm
1e630 61 73 6b 5b 32 5d 3b 20 20 20 20 20 20 20 20 2f  ask[2];        /
1e640 2a 20 4d 61 73 6b 73 20 6f 66 20 6f 6c 64 2e 2a  * Masks of old.*
1e650 2c 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73 20  , new.* columns 
1e660 61 63 63 65 73 73 65 64 20 2a 2f 0a 7d 3b 0a 0a  accessed */.};..
1e670 2f 2a 0a 2a 2a 20 54 68 65 20 79 44 62 4d 61 73  /*.** The yDbMas
1e680 6b 20 64 61 74 61 74 79 70 65 20 66 6f 72 20 74  k datatype for t
1e690 68 65 20 62 69 74 6d 61 73 6b 20 6f 66 20 61 6c  he bitmask of al
1e6a0 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
1e6b0 61 73 65 73 2e 0a 2a 2f 0a 23 69 66 20 53 51 4c  ases..*/.#if SQL
1e6c0 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44  ITE_MAX_ATTACHED
1e6d0 3e 33 30 0a 20 20 74 79 70 65 64 65 66 20 75 6e  >30.  typedef un
1e6e0 73 69 67 6e 65 64 20 63 68 61 72 20 79 44 62 4d  signed char yDbM
1e6f0 61 73 6b 5b 28 53 51 4c 49 54 45 5f 4d 41 58 5f  ask[(SQLITE_MAX_
1e700 41 54 54 41 43 48 45 44 2b 39 29 2f 38 5d 3b 0a  ATTACHED+9)/8];.
1e710 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 54  # define DbMaskT
1e720 65 73 74 28 4d 2c 49 29 20 20 20 20 28 28 28 4d  est(M,I)    (((M
1e730 29 5b 28 49 29 2f 38 5d 26 28 31 3c 3c 28 28 49  )[(I)/8]&(1<<((I
1e740 29 26 37 29 29 29 21 3d 30 29 0a 23 20 64 65 66  )&7)))!=0).# def
1e750 69 6e 65 20 44 62 4d 61 73 6b 5a 65 72 6f 28 4d  ine DbMaskZero(M
1e760 29 20 20 20 20 20 20 6d 65 6d 73 65 74 28 28 4d  )      memset((M
1e770 29 2c 30 2c 73 69 7a 65 6f 66 28 4d 29 29 0a 23  ),0,sizeof(M)).#
1e780 20 64 65 66 69 6e 65 20 44 62 4d 61 73 6b 53 65   define DbMaskSe
1e790 74 28 4d 2c 49 29 20 20 20 20 20 28 4d 29 5b 28  t(M,I)     (M)[(
1e7a0 49 29 2f 38 5d 7c 3d 28 31 3c 3c 28 28 49 29 26  I)/8]|=(1<<((I)&
1e7b0 37 29 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  7)).# define DbM
1e7c0 61 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 20 20 20  askAllZero(M)   
1e7d0 73 71 6c 69 74 65 33 44 62 4d 61 73 6b 41 6c 6c  sqlite3DbMaskAll
1e7e0 5a 65 72 6f 28 4d 29 0a 23 20 64 65 66 69 6e 65  Zero(M).# define
1e7f0 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65 72 6f 28 4d   DbMaskNonZero(M
1e800 29 20 20 20 28 73 71 6c 69 74 65 33 44 62 4d 61  )   (sqlite3DbMa
1e810 73 6b 41 6c 6c 5a 65 72 6f 28 4d 29 3d 3d 30 29  skAllZero(M)==0)
1e820 0a 23 65 6c 73 65 0a 20 20 74 79 70 65 64 65 66  .#else.  typedef
1e830 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 79 44   unsigned int yD
1e840 62 4d 61 73 6b 3b 0a 23 20 64 65 66 69 6e 65 20  bMask;.# define 
1e850 44 62 4d 61 73 6b 54 65 73 74 28 4d 2c 49 29 20  DbMaskTest(M,I) 
1e860 20 20 20 28 28 28 4d 29 26 28 28 28 79 44 62 4d     (((M)&(((yDbM
1e870 61 73 6b 29 31 29 3c 3c 28 49 29 29 29 21 3d 30  ask)1)<<(I)))!=0
1e880 29 0a 23 20 64 65 66 69 6e 65 20 44 62 4d 61 73  ).# define DbMas
1e890 6b 5a 65 72 6f 28 4d 29 20 20 20 20 20 20 28 4d  kZero(M)      (M
1e8a0 29 3d 30 0a 23 20 64 65 66 69 6e 65 20 44 62 4d  )=0.# define DbM
1e8b0 61 73 6b 53 65 74 28 4d 2c 49 29 20 20 20 20 20  askSet(M,I)     
1e8c0 28 4d 29 7c 3d 28 28 28 79 44 62 4d 61 73 6b 29  (M)|=(((yDbMask)
1e8d0 31 29 3c 3c 28 49 29 29 0a 23 20 64 65 66 69 6e  1)<<(I)).# defin
1e8e0 65 20 44 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28  e DbMaskAllZero(
1e8f0 4d 29 20 20 20 28 4d 29 3d 3d 30 0a 23 20 64 65  M)   (M)==0.# de
1e900 66 69 6e 65 20 44 62 4d 61 73 6b 4e 6f 6e 5a 65  fine DbMaskNonZe
1e910 72 6f 28 4d 29 20 20 20 28 4d 29 21 3d 30 0a 23  ro(M)   (M)!=0.#
1e920 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20  endif../*.** An 
1e930 53 51 4c 20 70 61 72 73 65 72 20 63 6f 6e 74 65  SQL parser conte
1e940 78 74 2e 20 20 41 20 63 6f 70 79 20 6f 66 20 74  xt.  A copy of t
1e950 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
1e960 20 70 61 73 73 65 64 20 74 68 72 6f 75 67 68 0a   passed through.
1e970 2a 2a 20 74 68 65 20 70 61 72 73 65 72 20 61 6e  ** the parser an
1e980 64 20 64 6f 77 6e 20 69 6e 74 6f 20 61 6c 6c 20  d down into all 
1e990 74 68 65 20 70 61 72 73 65 72 20 61 63 74 69 6f  the parser actio
1e9a0 6e 20 72 6f 75 74 69 6e 65 20 69 6e 20 6f 72 64  n routine in ord
1e9b0 65 72 20 74 6f 0a 2a 2a 20 63 61 72 72 79 20 61  er to.** carry a
1e9c0 72 6f 75 6e 64 20 69 6e 66 6f 72 6d 61 74 69 6f  round informatio
1e9d0 6e 20 74 68 61 74 20 69 73 20 67 6c 6f 62 61 6c  n that is global
1e9e0 20 74 6f 20 74 68 65 20 65 6e 74 69 72 65 20 70   to the entire p
1e9f0 61 72 73 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  arse..**.** The 
1ea00 73 74 72 75 63 74 75 72 65 20 69 73 20 64 69 76  structure is div
1ea10 69 64 65 64 20 69 6e 74 6f 20 74 77 6f 20 70 61  ided into two pa
1ea20 72 74 73 2e 20 20 57 68 65 6e 20 74 68 65 20 70  rts.  When the p
1ea30 61 72 73 65 72 20 61 6e 64 20 63 6f 64 65 0a 2a  arser and code.*
1ea40 2a 20 67 65 6e 65 72 61 74 65 20 63 61 6c 6c 20  * generate call 
1ea50 74 68 65 6d 73 65 6c 76 65 73 20 72 65 63 75 72  themselves recur
1ea60 73 69 76 65 6c 79 2c 20 74 68 65 20 66 69 72 73  sively, the firs
1ea70 74 20 70 61 72 74 20 6f 66 20 74 68 65 20 73 74  t part of the st
1ea80 72 75 63 74 75 72 65 0a 2a 2a 20 69 73 20 63 6f  ructure.** is co
1ea90 6e 73 74 61 6e 74 20 62 75 74 20 74 68 65 20 73  nstant but the s
1eaa0 65 63 6f 6e 64 20 70 61 72 74 20 69 73 20 72 65  econd part is re
1eab0 73 65 74 20 61 74 20 74 68 65 20 62 65 67 69 6e  set at the begin
1eac0 6e 69 6e 67 20 61 6e 64 20 65 6e 64 20 6f 66 0a  ning and end of.
1ead0 2a 2a 20 65 61 63 68 20 72 65 63 75 72 73 69 6f  ** each recursio
1eae0 6e 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 6e 54 61  n..**.** The nTa
1eaf0 62 6c 65 4c 6f 63 6b 20 61 6e 64 20 61 54 61 62  bleLock and aTab
1eb00 6c 65 4c 6f 63 6b 20 76 61 72 69 61 62 6c 65 73  leLock variables
1eb10 20 61 72 65 20 6f 6e 6c 79 20 75 73 65 64 20 69   are only used i
1eb20 66 20 74 68 65 20 73 68 61 72 65 64 2d 63 61 63  f the shared-cac
1eb30 68 65 0a 2a 2a 20 66 65 61 74 75 72 65 20 69 73  he.** feature is
1eb40 20 65 6e 61 62 6c 65 64 20 28 69 66 20 73 71 6c   enabled (if sql
1eb50 69 74 65 33 54 73 64 28 29 2d 3e 75 73 65 53 68  ite3Tsd()->useSh
1eb60 61 72 65 64 44 61 74 61 20 69 73 20 74 72 75 65  aredData is true
1eb70 29 2e 20 54 68 65 79 20 61 72 65 0a 2a 2a 20 75  ). They are.** u
1eb80 73 65 64 20 74 6f 20 73 74 6f 72 65 20 74 68 65  sed to store the
1eb90 20 73 65 74 20 6f 66 20 74 61 62 6c 65 2d 6c 6f   set of table-lo
1eba0 63 6b 73 20 72 65 71 75 69 72 65 64 20 62 79 20  cks required by 
1ebb0 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65  the statement be
1ebc0 69 6e 67 0a 2a 2a 20 63 6f 6d 70 69 6c 65 64 2e  ing.** compiled.
1ebd0 20 46 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65   Function sqlite
1ebe0 33 54 61 62 6c 65 4c 6f 63 6b 28 29 20 69 73 20  3TableLock() is 
1ebf0 75 73 65 64 20 74 6f 20 61 64 64 20 65 6e 74 72  used to add entr
1ec00 69 65 73 20 74 6f 20 74 68 65 0a 2a 2a 20 6c 69  ies to the.** li
1ec10 73 74 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 50 61  st..*/.struct Pa
1ec20 72 73 65 20 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse {.  sqlite3 
1ec30 2a 64 62 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  *db;         /* 
1ec40 54 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  The main databas
1ec50 65 20 73 74 72 75 63 74 75 72 65 20 2a 2f 0a 20  e structure */. 
1ec60 20 63 68 61 72 20 2a 7a 45 72 72 4d 73 67 3b 20   char *zErrMsg; 
1ec70 20 20 20 20 20 20 2f 2a 20 41 6e 20 65 72 72 6f        /* An erro
1ec80 72 20 6d 65 73 73 61 67 65 20 2a 2f 0a 20 20 56  r message */.  V
1ec90 64 62 65 20 2a 70 56 64 62 65 3b 20 20 20 20 20  dbe *pVdbe;     
1eca0 20 20 20 20 2f 2a 20 41 6e 20 65 6e 67 69 6e 65      /* An engine
1ecb0 20 66 6f 72 20 65 78 65 63 75 74 69 6e 67 20 64   for executing d
1ecc0 61 74 61 62 61 73 65 20 62 79 74 65 63 6f 64 65  atabase bytecode
1ecd0 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20 20   */.  int rc;   
1ece0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
1ecf0 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20 65  turn code from e
1ed00 78 65 63 75 74 69 6f 6e 20 2a 2f 0a 20 20 75 38  xecution */.  u8
1ed10 20 63 6f 6c 4e 61 6d 65 73 53 65 74 3b 20 20 20   colNamesSet;   
1ed20 20 20 20 2f 2a 20 54 52 55 45 20 61 66 74 65 72     /* TRUE after
1ed30 20 4f 50 5f 43 6f 6c 75 6d 6e 4e 61 6d 65 20 68   OP_ColumnName h
1ed40 61 73 20 62 65 65 6e 20 69 73 73 75 65 64 20 74  as been issued t
1ed50 6f 20 70 56 64 62 65 20 2a 2f 0a 20 20 75 38 20  o pVdbe */.  u8 
1ed60 63 68 65 63 6b 53 63 68 65 6d 61 3b 20 20 20 20  checkSchema;    
1ed70 20 20 2f 2a 20 43 61 75 73 65 73 20 73 63 68 65    /* Causes sche
1ed80 6d 61 20 63 6f 6f 6b 69 65 20 63 68 65 63 6b 20  ma cookie check 
1ed90 61 66 74 65 72 20 61 6e 20 65 72 72 6f 72 20 2a  after an error *
1eda0 2f 0a 20 20 75 38 20 6e 65 73 74 65 64 3b 20 20  /.  u8 nested;  
1edb0 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1edc0 65 72 20 6f 66 20 6e 65 73 74 65 64 20 63 61 6c  er of nested cal
1edd0 6c 73 20 74 6f 20 74 68 65 20 70 61 72 73 65 72  ls to the parser
1ede0 2f 63 6f 64 65 20 67 65 6e 65 72 61 74 6f 72 20  /code generator 
1edf0 2a 2f 0a 20 20 75 38 20 6e 54 65 6d 70 52 65 67  */.  u8 nTempReg
1ee00 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d  ;         /* Num
1ee10 62 65 72 20 6f 66 20 74 65 6d 70 6f 72 61 72 79  ber of temporary
1ee20 20 72 65 67 69 73 74 65 72 73 20 69 6e 20 61 54   registers in aT
1ee30 65 6d 70 52 65 67 5b 5d 20 2a 2f 0a 20 20 75 38  empReg[] */.  u8
1ee40 20 69 73 4d 75 6c 74 69 57 72 69 74 65 3b 20 20   isMultiWrite;  
1ee50 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74     /* True if st
1ee60 61 74 65 6d 65 6e 74 20 6d 61 79 20 6d 6f 64 69  atement may modi
1ee70 66 79 2f 69 6e 73 65 72 74 20 6d 75 6c 74 69 70  fy/insert multip
1ee80 6c 65 20 72 6f 77 73 20 2a 2f 0a 20 20 75 38 20  le rows */.  u8 
1ee90 6d 61 79 41 62 6f 72 74 3b 20 20 20 20 20 20 20  mayAbort;       
1eea0 20 20 2f 2a 20 54 72 75 65 20 69 66 20 73 74 61    /* True if sta
1eeb0 74 65 6d 65 6e 74 20 6d 61 79 20 74 68 72 6f 77  tement may throw
1eec0 20 61 6e 20 41 42 4f 52 54 20 65 78 63 65 70 74   an ABORT except
1eed0 69 6f 6e 20 2a 2f 0a 20 20 75 38 20 68 61 73 43  ion */.  u8 hasC
1eee0 6f 6d 70 6f 75 6e 64 3b 20 20 20 20 20 20 2f 2a  ompound;      /*
1eef0 20 4e 65 65 64 20 74 6f 20 69 6e 76 6f 6b 65 20   Need to invoke 
1ef00 63 6f 6e 76 65 72 74 43 6f 6d 70 6f 75 6e 64 53  convertCompoundS
1ef10 65 6c 65 63 74 54 6f 53 75 62 71 75 65 72 79 28  electToSubquery(
1ef20 29 20 2a 2f 0a 20 20 75 38 20 6f 6b 43 6f 6e 73  ) */.  u8 okCons
1ef30 74 46 61 63 74 6f 72 3b 20 20 20 20 2f 2a 20 4f  tFactor;    /* O
1ef40 4b 20 74 6f 20 66 61 63 74 6f 72 20 6f 75 74 20  K to factor out 
1ef50 63 6f 6e 73 74 61 6e 74 73 20 2a 2f 0a 20 20 75  constants */.  u
1ef60 38 20 64 69 73 61 62 6c 65 4c 6f 6f 6b 61 73 69  8 disableLookasi
1ef70 64 65 3b 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  de; /* Number of
1ef80 20 74 69 6d 65 73 20 6c 6f 6f 6b 61 73 69 64 65   times lookaside
1ef90 20 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c   has been disabl
1efa0 65 64 20 2a 2f 0a 20 20 75 38 20 6e 43 6f 6c 43  ed */.  u8 nColC
1efb0 61 63 68 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  ache;        /* 
1efc0 4e 75 6d 62 65 72 20 6f 66 20 65 6e 74 72 69 65  Number of entrie
1efd0 73 20 69 6e 20 61 43 6f 6c 43 61 63 68 65 5b 5d  s in aColCache[]
1efe0 20 2a 2f 0a 20 20 69 6e 74 20 6e 52 61 6e 67 65   */.  int nRange
1eff0 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20 53 69  Reg;       /* Si
1f000 7a 65 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72  ze of the tempor
1f010 61 72 79 20 72 65 67 69 73 74 65 72 20 62 6c 6f  ary register blo
1f020 63 6b 20 2a 2f 0a 20 20 69 6e 74 20 69 52 61 6e  ck */.  int iRan
1f030 67 65 52 65 67 3b 20 20 20 20 20 20 20 2f 2a 20  geReg;       /* 
1f040 46 69 72 73 74 20 72 65 67 69 73 74 65 72 20 69  First register i
1f050 6e 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69  n temporary regi
1f060 73 74 65 72 20 62 6c 6f 63 6b 20 2a 2f 0a 20 20  ster block */.  
1f070 69 6e 74 20 6e 45 72 72 3b 20 20 20 20 20 20 20  int nErr;       
1f080 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f       /* Number o
1f090 66 20 65 72 72 6f 72 73 20 73 65 65 6e 20 2a 2f  f errors seen */
1f0a0 0a 20 20 69 6e 74 20 6e 54 61 62 3b 20 20 20 20  .  int nTab;    
1f0b0 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f0c0 72 20 6f 66 20 70 72 65 76 69 6f 75 73 6c 79 20  r of previously 
1f0d0 61 6c 6c 6f 63 61 74 65 64 20 56 44 42 45 20 63  allocated VDBE c
1f0e0 75 72 73 6f 72 73 20 2a 2f 0a 20 20 69 6e 74 20  ursors */.  int 
1f0f0 6e 4d 65 6d 3b 20 20 20 20 20 20 20 20 20 20 20  nMem;           
1f100 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 6d 65   /* Number of me
1f110 6d 6f 72 79 20 63 65 6c 6c 73 20 75 73 65 64 20  mory cells used 
1f120 73 6f 20 66 61 72 20 2a 2f 0a 20 20 69 6e 74 20  so far */.  int 
1f130 6e 4f 70 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20  nOpAlloc;       
1f140 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 6c   /* Number of sl
1f150 6f 74 73 20 61 6c 6c 6f 63 61 74 65 64 20 66 6f  ots allocated fo
1f160 72 20 56 64 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a  r Vdbe.aOp[] */.
1f170 20 20 69 6e 74 20 73 7a 4f 70 41 6c 6c 6f 63 3b    int szOpAlloc;
1f180 20 20 20 20 20 20 20 2f 2a 20 42 79 74 65 73 20         /* Bytes 
1f190 6f 66 20 6d 65 6d 6f 72 79 20 73 70 61 63 65 20  of memory space 
1f1a0 61 6c 6c 6f 63 61 74 65 64 20 66 6f 72 20 56 64  allocated for Vd
1f1b0 62 65 2e 61 4f 70 5b 5d 20 2a 2f 0a 20 20 69 6e  be.aOp[] */.  in
1f1c0 74 20 63 6b 42 61 73 65 3b 20 20 20 20 20 20 20  t ckBase;       
1f1d0 20 20 20 2f 2a 20 42 61 73 65 20 72 65 67 69 73     /* Base regis
1f1e0 74 65 72 20 6f 66 20 64 61 74 61 20 64 75 72 69  ter of data duri
1f1f0 6e 67 20 63 68 65 63 6b 20 63 6f 6e 73 74 72 61  ng check constra
1f200 69 6e 74 73 20 2a 2f 0a 20 20 69 6e 74 20 69 53  ints */.  int iS
1f210 65 6c 66 54 61 62 3b 20 20 20 20 20 20 20 20 2f  elfTab;        /
1f220 2a 20 54 61 62 6c 65 20 6f 66 20 61 6e 20 69 6e  * Table of an in
1f230 64 65 78 20 77 68 6f 73 65 20 65 78 70 72 73 20  dex whose exprs 
1f240 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
1f250 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65 4c  */.  int iCacheL
1f260 65 76 65 6c 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  evel;     /* Col
1f270 43 61 63 68 65 20 76 61 6c 69 64 20 77 68 65 6e  Cache valid when
1f280 20 61 43 6f 6c 43 61 63 68 65 5b 5d 2e 69 4c 65   aColCache[].iLe
1f290 76 65 6c 3c 3d 69 43 61 63 68 65 4c 65 76 65 6c  vel<=iCacheLevel
1f2a0 20 2a 2f 0a 20 20 69 6e 74 20 69 43 61 63 68 65   */.  int iCache
1f2b0 43 6e 74 3b 20 20 20 20 20 20 20 2f 2a 20 43 6f  Cnt;       /* Co
1f2c0 75 6e 74 65 72 20 75 73 65 64 20 74 6f 20 67 65  unter used to ge
1f2d0 6e 65 72 61 74 65 20 61 43 6f 6c 43 61 63 68 65  nerate aColCache
1f2e0 5b 5d 2e 6c 72 75 20 76 61 6c 75 65 73 20 2a 2f  [].lru values */
1f2f0 0a 20 20 69 6e 74 20 6e 4c 61 62 65 6c 3b 20 20  .  int nLabel;  
1f300 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f310 72 20 6f 66 20 6c 61 62 65 6c 73 20 75 73 65 64  r of labels used
1f320 20 2a 2f 0a 20 20 69 6e 74 20 2a 61 4c 61 62 65   */.  int *aLabe
1f330 6c 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 53 70  l;         /* Sp
1f340 61 63 65 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  ace to hold the 
1f350 6c 61 62 65 6c 73 20 2a 2f 0a 20 20 45 78 70 72  labels */.  Expr
1f360 4c 69 73 74 20 2a 70 43 6f 6e 73 74 45 78 70 72  List *pConstExpr
1f370 3b 2f 2a 20 43 6f 6e 73 74 61 6e 74 20 65 78 70  ;/* Constant exp
1f380 72 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 54 6f  ressions */.  To
1f390 6b 65 6e 20 63 6f 6e 73 74 72 61 69 6e 74 4e 61  ken constraintNa
1f3a0 6d 65 3b 2f 2a 20 4e 61 6d 65 20 6f 66 20 74 68  me;/* Name of th
1f3b0 65 20 63 6f 6e 73 74 72 61 69 6e 74 20 63 75 72  e constraint cur
1f3c0 72 65 6e 74 6c 79 20 62 65 69 6e 67 20 70 61 72  rently being par
1f3d0 73 65 64 20 2a 2f 0a 20 20 79 44 62 4d 61 73 6b  sed */.  yDbMask
1f3e0 20 77 72 69 74 65 4d 61 73 6b 3b 20 20 20 2f 2a   writeMask;   /*
1f3f0 20 53 74 61 72 74 20 61 20 77 72 69 74 65 20 74   Start a write t
1f400 72 61 6e 73 61 63 74 69 6f 6e 20 6f 6e 20 74 68  ransaction on th
1f410 65 73 65 20 64 61 74 61 62 61 73 65 73 20 2a 2f  ese databases */
1f420 0a 20 20 79 44 62 4d 61 73 6b 20 63 6f 6f 6b 69  .  yDbMask cooki
1f430 65 4d 61 73 6b 3b 20 20 2f 2a 20 42 69 74 6d 61  eMask;  /* Bitma
1f440 73 6b 20 6f 66 20 73 63 68 65 6d 61 20 76 65 72  sk of schema ver
1f450 69 66 69 65 64 20 64 61 74 61 62 61 73 65 73 20  ified databases 
1f460 2a 2f 0a 20 20 69 6e 74 20 72 65 67 52 6f 77 69  */.  int regRowi
1f470 64 3b 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67  d;        /* Reg
1f480 69 73 74 65 72 20 68 6f 6c 64 69 6e 67 20 72 6f  ister holding ro
1f490 77 69 64 20 6f 66 20 43 52 45 41 54 45 20 54 41  wid of CREATE TA
1f4a0 42 4c 45 20 65 6e 74 72 79 20 2a 2f 0a 20 20 69  BLE entry */.  i
1f4b0 6e 74 20 72 65 67 52 6f 6f 74 3b 20 20 20 20 20  nt regRoot;     
1f4c0 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
1f4d0 68 6f 6c 64 69 6e 67 20 72 6f 6f 74 20 70 61 67  holding root pag
1f4e0 65 20 6e 75 6d 62 65 72 20 66 6f 72 20 6e 65 77  e number for new
1f4f0 20 6f 62 6a 65 63 74 73 20 2a 2f 0a 20 20 69 6e   objects */.  in
1f500 74 20 6e 4d 61 78 41 72 67 3b 20 20 20 20 20 20  t nMaxArg;      
1f510 20 20 20 2f 2a 20 4d 61 78 20 61 72 67 73 20 70     /* Max args p
1f520 61 73 73 65 64 20 74 6f 20 75 73 65 72 20 66 75  assed to user fu
1f530 6e 63 74 69 6f 6e 20 62 79 20 73 75 62 2d 70 72  nction by sub-pr
1f540 6f 67 72 61 6d 20 2a 2f 0a 23 69 66 20 53 45 4c  ogram */.#if SEL
1f550 45 43 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44  ECTTRACE_ENABLED
1f560 0a 20 20 69 6e 74 20 6e 53 65 6c 65 63 74 3b 20  .  int nSelect; 
1f570 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65          /* Numbe
1f580 72 20 6f 66 20 53 45 4c 45 43 54 20 73 74 61 74  r of SELECT stat
1f590 65 6d 65 6e 74 73 20 73 65 65 6e 20 2a 2f 0a 20  ements seen */. 
1f5a0 20 69 6e 74 20 6e 53 65 6c 65 63 74 49 6e 64 65   int nSelectInde
1f5b0 6e 74 3b 20 20 20 2f 2a 20 48 6f 77 20 66 61 72  nt;   /* How far
1f5c0 20 74 6f 20 69 6e 64 65 6e 74 20 53 45 4c 45 43   to indent SELEC
1f5d0 54 54 52 41 43 45 28 29 20 6f 75 74 70 75 74 20  TTRACE() output 
1f5e0 2a 2f 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  */.#endif.#ifnde
1f5f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48  f SQLITE_OMIT_SH
1f600 41 52 45 44 5f 43 41 43 48 45 0a 20 20 69 6e 74  ARED_CACHE.  int
1f610 20 6e 54 61 62 6c 65 4c 6f 63 6b 3b 20 20 20 20   nTableLock;    
1f620 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72 20 6f 66      /* Number of
1f630 20 6c 6f 63 6b 73 20 69 6e 20 61 54 61 62 6c 65   locks in aTable
1f640 4c 6f 63 6b 20 2a 2f 0a 20 20 54 61 62 6c 65 4c  Lock */.  TableL
1f650 6f 63 6b 20 2a 61 54 61 62 6c 65 4c 6f 63 6b 3b  ock *aTableLock;
1f660 20 2f 2a 20 52 65 71 75 69 72 65 64 20 74 61 62   /* Required tab
1f670 6c 65 20 6c 6f 63 6b 73 20 66 6f 72 20 73 68 61  le locks for sha
1f680 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 2a  red-cache mode *
1f690 2f 0a 23 65 6e 64 69 66 0a 20 20 41 75 74 6f 69  /.#endif.  Autoi
1f6a0 6e 63 49 6e 66 6f 20 2a 70 41 69 6e 63 3b 20 20  ncInfo *pAinc;  
1f6b0 2f 2a 20 49 6e 66 6f 72 6d 61 74 69 6f 6e 20 61  /* Information a
1f6c0 62 6f 75 74 20 41 55 54 4f 49 4e 43 52 45 4d 45  bout AUTOINCREME
1f6d0 4e 54 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 20  NT counters */. 
1f6e0 20 50 61 72 73 65 20 2a 70 54 6f 70 6c 65 76 65   Parse *pTopleve
1f6f0 6c 3b 20 20 20 20 2f 2a 20 50 61 72 73 65 20 73  l;    /* Parse s
1f700 74 72 75 63 74 75 72 65 20 66 6f 72 20 6d 61 69  tructure for mai
1f710 6e 20 70 72 6f 67 72 61 6d 20 28 6f 72 20 4e 55  n program (or NU
1f720 4c 4c 29 20 2a 2f 0a 20 20 54 61 62 6c 65 20 2a  LL) */.  Table *
1f730 70 54 72 69 67 67 65 72 54 61 62 3b 20 20 2f 2a  pTriggerTab;  /*
1f740 20 54 61 62 6c 65 20 74 72 69 67 67 65 72 73 20   Table triggers 
1f750 61 72 65 20 62 65 69 6e 67 20 63 6f 64 65 64 20  are being coded 
1f760 66 6f 72 20 2a 2f 0a 20 20 69 6e 74 20 61 64 64  for */.  int add
1f770 72 43 72 54 61 62 3b 20 20 20 20 20 20 20 2f 2a  rCrTab;       /*
1f780 20 41 64 64 72 65 73 73 20 6f 66 20 4f 50 5f 43   Address of OP_C
1f790 72 65 61 74 65 54 61 62 6c 65 20 6f 70 63 6f 64  reateTable opcod
1f7a0 65 20 6f 6e 20 43 52 45 41 54 45 20 54 41 42 4c  e on CREATE TABL
1f7b0 45 20 2a 2f 0a 20 20 75 33 32 20 6e 51 75 65 72  E */.  u32 nQuer
1f7c0 79 4c 6f 6f 70 3b 20 20 20 20 20 20 2f 2a 20 45  yLoop;      /* E
1f7d0 73 74 20 6e 75 6d 62 65 72 20 6f 66 20 69 74 65  st number of ite
1f7e0 72 61 74 69 6f 6e 73 20 6f 66 20 61 20 71 75 65  rations of a que
1f7f0 72 79 20 28 31 30 2a 6c 6f 67 32 28 4e 29 29 20  ry (10*log2(N)) 
1f800 2a 2f 0a 20 20 75 33 32 20 6f 6c 64 6d 61 73 6b  */.  u32 oldmask
1f810 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73  ;         /* Mas
1f820 6b 20 6f 66 20 6f 6c 64 2e 2a 20 63 6f 6c 75 6d  k of old.* colum
1f830 6e 73 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f  ns referenced */
1f840 0a 20 20 75 33 32 20 6e 65 77 6d 61 73 6b 3b 20  .  u32 newmask; 
1f850 20 20 20 20 20 20 20 20 2f 2a 20 4d 61 73 6b 20          /* Mask 
1f860 6f 66 20 6e 65 77 2e 2a 20 63 6f 6c 75 6d 6e 73  of new.* columns
1f870 20 72 65 66 65 72 65 6e 63 65 64 20 2a 2f 0a 20   referenced */. 
1f880 20 75 38 20 65 54 72 69 67 67 65 72 4f 70 3b 20   u8 eTriggerOp; 
1f890 20 20 20 20 20 20 2f 2a 20 54 4b 5f 55 50 44 41        /* TK_UPDA
1f8a0 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54 20 6f 72  TE, TK_INSERT or
1f8b0 20 54 4b 5f 44 45 4c 45 54 45 20 2a 2f 0a 20 20   TK_DELETE */.  
1f8c0 75 38 20 65 4f 72 63 6f 6e 66 3b 20 20 20 20 20  u8 eOrconf;     
1f8d0 20 20 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20       /* Default 
1f8e0 4f 4e 20 43 4f 4e 46 4c 49 43 54 20 70 6f 6c 69  ON CONFLICT poli
1f8f0 63 79 20 66 6f 72 20 74 72 69 67 67 65 72 20 73  cy for trigger s
1f900 74 65 70 73 20 2a 2f 0a 20 20 75 38 20 64 69 73  teps */.  u8 dis
1f910 61 62 6c 65 54 72 69 67 67 65 72 73 3b 20 20 2f  ableTriggers;  /
1f920 2a 20 54 72 75 65 20 74 6f 20 64 69 73 61 62 6c  * True to disabl
1f930 65 20 74 72 69 67 67 65 72 73 20 2a 2f 0a 0a 20  e triggers */.. 
1f940 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a   /**************
1f950 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f960 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f970 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1f980 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 20 2a  ************.  *
1f990 2a 20 46 69 65 6c 64 73 20 61 62 6f 76 65 20 6d  * Fields above m
1f9a0 75 73 74 20 62 65 20 69 6e 69 74 69 61 6c 69 7a  ust be initializ
1f9b0 65 64 20 74 6f 20 7a 65 72 6f 2e 20 20 54 68 65  ed to zero.  The
1f9c0 20 66 69 65 6c 64 73 20 74 68 61 74 20 66 6f 6c   fields that fol
1f9d0 6c 6f 77 2c 0a 20 20 2a 2a 20 64 6f 77 6e 20 74  low,.  ** down t
1f9e0 6f 20 74 68 65 20 62 65 67 69 6e 6e 69 6e 67 20  o the beginning 
1f9f0 6f 66 20 74 68 65 20 72 65 63 75 72 73 69 76 65  of the recursive
1fa00 20 73 65 63 74 69 6f 6e 2c 20 64 6f 20 6e 6f 74   section, do not
1fa10 20 6e 65 65 64 20 74 6f 20 62 65 0a 20 20 2a 2a   need to be.  **
1fa20 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61 73 20   initialized as 
1fa30 74 68 65 79 20 77 69 6c 6c 20 62 65 20 73 65 74  they will be set
1fa40 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 75 73   before being us
1fa50 65 64 2e 20 20 54 68 65 20 62 6f 75 6e 64 61 72  ed.  The boundar
1fa60 79 20 69 73 0a 20 20 2a 2a 20 64 65 74 65 72 6d  y is.  ** determ
1fa70 69 6e 65 64 20 62 79 20 6f 66 66 73 65 74 6f 66  ined by offsetof
1fa80 28 50 61 72 73 65 2c 61 43 6f 6c 43 61 63 68 65  (Parse,aColCache
1fa90 29 2e 0a 20 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  )..  ***********
1faa0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fab0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fac0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fad0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f  ***************/
1fae0 0a 0a 20 20 73 74 72 75 63 74 20 79 43 6f 6c 43  ..  struct yColC
1faf0 61 63 68 65 20 7b 0a 20 20 20 20 69 6e 74 20 69  ache {.    int i
1fb00 54 61 62 6c 65 3b 20 20 20 20 20 20 20 20 20 20  Table;          
1fb10 20 2f 2a 20 54 61 62 6c 65 20 63 75 72 73 6f 72   /* Table cursor
1fb20 20 6e 75 6d 62 65 72 20 2a 2f 0a 20 20 20 20 69   number */.    i
1fb30 31 36 20 69 43 6f 6c 75 6d 6e 3b 20 20 20 20 20  16 iColumn;     
1fb40 20 20 20 20 20 2f 2a 20 54 61 62 6c 65 20 63 6f       /* Table co
1fb50 6c 75 6d 6e 20 6e 75 6d 62 65 72 20 2a 2f 0a 20  lumn number */. 
1fb60 20 20 20 75 38 20 74 65 6d 70 52 65 67 3b 20 20     u8 tempReg;  
1fb70 20 20 20 20 20 20 20 20 20 2f 2a 20 69 52 65 67           /* iReg
1fb80 20 69 73 20 61 20 74 65 6d 70 20 72 65 67 69 73   is a temp regis
1fb90 74 65 72 20 74 68 61 74 20 6e 65 65 64 73 20 74  ter that needs t
1fba0 6f 20 62 65 20 66 72 65 65 64 20 2a 2f 0a 20 20  o be freed */.  
1fbb0 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20 20    int iLevel;   
1fbc0 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 73 74 69          /* Nesti
1fbd0 6e 67 20 6c 65 76 65 6c 20 2a 2f 0a 20 20 20 20  ng level */.    
1fbe0 69 6e 74 20 69 52 65 67 3b 20 20 20 20 20 20 20  int iReg;       
1fbf0 20 20 20 20 20 20 2f 2a 20 52 65 67 20 77 69 74        /* Reg wit
1fc00 68 20 76 61 6c 75 65 20 6f 66 20 74 68 69 73 20  h value of this 
1fc10 63 6f 6c 75 6d 6e 2e 20 30 20 6d 65 61 6e 73 20  column. 0 means 
1fc20 6e 6f 6e 65 2e 20 2a 2f 0a 20 20 20 20 69 6e 74  none. */.    int
1fc30 20 6c 72 75 3b 20 20 20 20 20 20 20 20 20 20 20   lru;           
1fc40 20 20 20 2f 2a 20 4c 65 61 73 74 20 72 65 63 65     /* Least rece
1fc50 6e 74 6c 79 20 75 73 65 64 20 65 6e 74 72 79 20  ntly used entry 
1fc60 68 61 73 20 74 68 65 20 73 6d 61 6c 6c 65 73 74  has the smallest
1fc70 20 76 61 6c 75 65 20 2a 2f 0a 20 20 7d 20 61 43   value */.  } aC
1fc80 6f 6c 43 61 63 68 65 5b 53 51 4c 49 54 45 5f 4e  olCache[SQLITE_N
1fc90 5f 43 4f 4c 43 41 43 48 45 5d 3b 20 20 2f 2a 20  _COLCACHE];  /* 
1fca0 4f 6e 65 20 66 6f 72 20 65 61 63 68 20 63 6f 6c  One for each col
1fcb0 75 6d 6e 20 63 61 63 68 65 20 65 6e 74 72 79 20  umn cache entry 
1fcc0 2a 2f 0a 20 20 69 6e 74 20 61 54 65 6d 70 52 65  */.  int aTempRe
1fcd0 67 5b 38 5d 3b 20 20 20 20 20 20 20 20 2f 2a 20  g[8];        /* 
1fce0 48 6f 6c 64 69 6e 67 20 61 72 65 61 20 66 6f 72  Holding area for
1fcf0 20 74 65 6d 70 6f 72 61 72 79 20 72 65 67 69 73   temporary regis
1fd00 74 65 72 73 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20  ters */.  Token 
1fd10 73 4e 61 6d 65 54 6f 6b 65 6e 3b 20 20 20 20 20  sNameToken;     
1fd20 20 20 2f 2a 20 54 6f 6b 65 6e 20 77 69 74 68 20    /* Token with 
1fd30 75 6e 71 75 61 6c 69 66 69 65 64 20 73 63 68 65  unqualified sche
1fd40 6d 61 20 6f 62 6a 65 63 74 20 6e 61 6d 65 20 2a  ma object name *
1fd50 2f 0a 0a 20 20 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /..  /**********
1fd60 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd70 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd80 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fd90 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20  **************. 
1fda0 20 2a 2a 20 41 62 6f 76 65 20 69 73 20 63 6f 6e   ** Above is con
1fdb0 73 74 61 6e 74 20 62 65 74 77 65 65 6e 20 72 65  stant between re
1fdc0 63 75 72 73 69 6f 6e 73 2e 20 20 42 65 6c 6f 77  cursions.  Below
1fdd0 20 69 73 20 72 65 73 65 74 20 62 65 66 6f 72 65   is reset before
1fde0 20 61 6e 64 20 61 66 74 65 72 0a 20 20 2a 2a 20   and after.  ** 
1fdf0 65 61 63 68 20 72 65 63 75 72 73 69 6f 6e 2e 20  each recursion. 
1fe00 20 54 68 65 20 62 6f 75 6e 64 61 72 79 20 62 65   The boundary be
1fe10 74 77 65 65 6e 20 74 68 65 73 65 20 74 77 6f 20  tween these two 
1fe20 72 65 67 69 6f 6e 73 20 69 73 20 64 65 74 65 72  regions is deter
1fe30 6d 69 6e 65 64 0a 20 20 2a 2a 20 75 73 69 6e 67  mined.  ** using
1fe40 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
1fe50 73 4c 61 73 74 54 6f 6b 65 6e 29 20 73 6f 20 74  sLastToken) so t
1fe60 68 65 20 73 4c 61 73 74 54 6f 6b 65 6e 20 66 69  he sLastToken fi
1fe70 65 6c 64 20 6d 75 73 74 20 62 65 20 74 68 65 0a  eld must be the.
1fe80 20 20 2a 2a 20 66 69 72 73 74 20 66 69 65 6c 64    ** first field
1fe90 20 69 6e 20 74 68 65 20 72 65 63 75 72 73 69 76   in the recursiv
1fea0 65 20 72 65 67 69 6f 6e 2e 0a 20 20 2a 2a 2a 2a  e region..  ****
1feb0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fec0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fed0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fee0 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
1fef0 2a 2a 2a 2a 2f 0a 0a 20 20 54 6f 6b 65 6e 20 73  ****/..  Token s
1ff00 4c 61 73 74 54 6f 6b 65 6e 3b 20 20 20 20 20 20  LastToken;      
1ff10 20 2f 2a 20 54 68 65 20 6c 61 73 74 20 74 6f 6b   /* The last tok
1ff20 65 6e 20 70 61 72 73 65 64 20 2a 2f 0a 20 20 79  en parsed */.  y
1ff30 6e 56 61 72 20 6e 56 61 72 3b 20 20 20 20 20 20  nVar nVar;      
1ff40 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62           /* Numb
1ff50 65 72 20 6f 66 20 27 3f 27 20 76 61 72 69 61 62  er of '?' variab
1ff60 6c 65 73 20 73 65 65 6e 20 69 6e 20 74 68 65 20  les seen in the 
1ff70 53 51 4c 20 73 6f 20 66 61 72 20 2a 2f 0a 20 20  SQL so far */.  
1ff80 75 38 20 69 50 6b 53 6f 72 74 4f 72 64 65 72 3b  u8 iPkSortOrder;
1ff90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 53 43            /* ASC
1ffa0 20 6f 72 20 44 45 53 43 20 66 6f 72 20 49 4e 54   or DESC for INT
1ffb0 45 47 45 52 20 50 52 49 4d 41 52 59 20 4b 45 59  EGER PRIMARY KEY
1ffc0 20 2a 2f 0a 20 20 75 38 20 65 78 70 6c 61 69 6e   */.  u8 explain
1ffd0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
1ffe0 2f 2a 20 54 72 75 65 20 69 66 20 74 68 65 20 45  /* True if the E
1fff0 58 50 4c 41 49 4e 20 66 6c 61 67 20 69 73 20 66  XPLAIN flag is f
20000 6f 75 6e 64 20 6f 6e 20 74 68 65 20 71 75 65 72  ound on the quer
20010 79 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  y */.#ifndef SQL
20020 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
20030 54 41 42 4c 45 0a 20 20 75 38 20 64 65 63 6c 61  TABLE.  u8 decla
20040 72 65 56 74 61 62 3b 20 20 20 20 20 20 20 20 20  reVtab;         
20050 20 20 2f 2a 20 54 72 75 65 20 69 66 20 69 6e 73    /* True if ins
20060 69 64 65 20 73 71 6c 69 74 65 33 5f 64 65 63 6c  ide sqlite3_decl
20070 61 72 65 5f 76 74 61 62 28 29 20 2a 2f 0a 20 20  are_vtab() */.  
20080 69 6e 74 20 6e 56 74 61 62 4c 6f 63 6b 3b 20 20  int nVtabLock;  
20090 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
200a0 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20 74  ber of virtual t
200b0 61 62 6c 65 73 20 74 6f 20 6c 6f 63 6b 20 2a 2f  ables to lock */
200c0 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74 20 6e 48  .#endif.  int nH
200d0 65 69 67 68 74 3b 20 20 20 20 20 20 20 20 20 20  eight;          
200e0 20 20 20 20 2f 2a 20 45 78 70 72 65 73 73 69 6f      /* Expressio
200f0 6e 20 74 72 65 65 20 68 65 69 67 68 74 20 6f 66  n tree height of
20100 20 63 75 72 72 65 6e 74 20 73 75 62 2d 73 65 6c   current sub-sel
20110 65 63 74 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  ect */.#ifndef S
20120 51 4c 49 54 45 5f 4f 4d 49 54 5f 45 58 50 4c 41  QLITE_OMIT_EXPLA
20130 49 4e 0a 20 20 69 6e 74 20 69 53 65 6c 65 63 74  IN.  int iSelect
20140 49 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  Id;            /
20150 2a 20 49 44 20 6f 66 20 63 75 72 72 65 6e 74 20  * ID of current 
20160 73 65 6c 65 63 74 20 66 6f 72 20 45 58 50 4c 41  select for EXPLA
20170 49 4e 20 6f 75 74 70 75 74 20 2a 2f 0a 20 20 69  IN output */.  i
20180 6e 74 20 69 4e 65 78 74 53 65 6c 65 63 74 49 64  nt iNextSelectId
20190 3b 20 20 20 20 20 20 20 20 2f 2a 20 4e 65 78 74  ;        /* Next
201a0 20 61 76 61 69 6c 61 62 6c 65 20 73 65 6c 65 63   available selec
201b0 74 20 49 44 20 66 6f 72 20 45 58 50 4c 41 49 4e  t ID for EXPLAIN
201c0 20 6f 75 74 70 75 74 20 2a 2f 0a 23 65 6e 64 69   output */.#endi
201d0 66 0a 20 20 56 4c 69 73 74 20 2a 70 56 4c 69 73  f.  VList *pVLis
201e0 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  t;            /*
201f0 20 4d 61 70 70 69 6e 67 20 62 65 74 77 65 65 6e   Mapping between
20200 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 73 20   variable names 
20210 61 6e 64 20 6e 75 6d 62 65 72 73 20 2a 2f 0a 20  and numbers */. 
20220 20 56 64 62 65 20 2a 70 52 65 70 72 65 70 61 72   Vdbe *pReprepar
20230 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 56 4d  e;         /* VM
20240 20 62 65 69 6e 67 20 72 65 70 72 65 70 61 72 65   being reprepare
20250 64 20 28 73 71 6c 69 74 65 33 52 65 70 72 65 70  d (sqlite3Reprep
20260 61 72 65 28 29 29 20 2a 2f 0a 20 20 63 6f 6e 73  are()) */.  cons
20270 74 20 63 68 61 72 20 2a 7a 54 61 69 6c 3b 20 20  t char *zTail;  
20280 20 20 20 20 20 20 2f 2a 20 41 6c 6c 20 53 51 4c        /* All SQL
20290 20 74 65 78 74 20 70 61 73 74 20 74 68 65 20 6c   text past the l
202a0 61 73 74 20 73 65 6d 69 63 6f 6c 6f 6e 20 70 61  ast semicolon pa
202b0 72 73 65 64 20 2a 2f 0a 20 20 54 61 62 6c 65 20  rsed */.  Table 
202c0 2a 70 4e 65 77 54 61 62 6c 65 3b 20 20 20 20 20  *pNewTable;     
202d0 20 20 20 20 2f 2a 20 41 20 74 61 62 6c 65 20 62      /* A table b
202e0 65 69 6e 67 20 63 6f 6e 73 74 72 75 63 74 65 64  eing constructed
202f0 20 62 79 20 43 52 45 41 54 45 20 54 41 42 4c 45   by CREATE TABLE
20300 20 2a 2f 0a 20 20 54 72 69 67 67 65 72 20 2a 70   */.  Trigger *p
20310 4e 65 77 54 72 69 67 67 65 72 3b 20 20 20 20 20  NewTrigger;     
20320 2f 2a 20 54 72 69 67 67 65 72 20 75 6e 64 65 72  /* Trigger under
20330 20 63 6f 6e 73 74 72 75 63 74 20 62 79 20 61 20   construct by a 
20340 43 52 45 41 54 45 20 54 52 49 47 47 45 52 20 2a  CREATE TRIGGER *
20350 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
20360 7a 41 75 74 68 43 6f 6e 74 65 78 74 3b 20 2f 2a  zAuthContext; /*
20370 20 54 68 65 20 36 74 68 20 70 61 72 61 6d 65 74   The 6th paramet
20380 65 72 20 74 6f 20 64 62 2d 3e 78 41 75 74 68 20  er to db->xAuth 
20390 63 61 6c 6c 62 61 63 6b 73 20 2a 2f 0a 23 69 66  callbacks */.#if
203a0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
203b0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a 20 20  _VIRTUALTABLE.  
203c0 54 6f 6b 65 6e 20 73 41 72 67 3b 20 20 20 20 20  Token sArg;     
203d0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 6f 6d            /* Com
203e0 70 6c 65 74 65 20 74 65 78 74 20 6f 66 20 61 20  plete text of a 
203f0 6d 6f 64 75 6c 65 20 61 72 67 75 6d 65 6e 74 20  module argument 
20400 2a 2f 0a 20 20 54 61 62 6c 65 20 2a 2a 61 70 56  */.  Table **apV
20410 74 61 62 4c 6f 63 6b 3b 20 20 20 20 20 20 20 2f  tabLock;       /
20420 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 76 69 72  * Pointer to vir
20430 74 75 61 6c 20 74 61 62 6c 65 73 20 6e 65 65 64  tual tables need
20440 69 6e 67 20 6c 6f 63 6b 69 6e 67 20 2a 2f 0a 23  ing locking */.#
20450 65 6e 64 69 66 0a 20 20 54 61 62 6c 65 20 2a 70  endif.  Table *p
20460 5a 6f 6d 62 69 65 54 61 62 3b 20 20 20 20 20 20  ZombieTab;      
20470 20 20 2f 2a 20 4c 69 73 74 20 6f 66 20 54 61 62    /* List of Tab
20480 6c 65 20 6f 62 6a 65 63 74 73 20 74 6f 20 64 65  le objects to de
20490 6c 65 74 65 20 61 66 74 65 72 20 63 6f 64 65 20  lete after code 
204a0 67 65 6e 20 2a 2f 0a 20 20 54 72 69 67 67 65 72  gen */.  Trigger
204b0 50 72 67 20 2a 70 54 72 69 67 67 65 72 50 72 67  Prg *pTriggerPrg
204c0 3b 20 20 2f 2a 20 4c 69 6e 6b 65 64 20 6c 69 73  ;  /* Linked lis
204d0 74 20 6f 66 20 63 6f 64 65 64 20 74 72 69 67 67  t of coded trigg
204e0 65 72 73 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70  ers */.  With *p
204f0 57 69 74 68 3b 20 20 20 20 20 20 20 20 20 20 20  With;           
20500 20 20 20 2f 2a 20 43 75 72 72 65 6e 74 20 57 49     /* Current WI
20510 54 48 20 63 6c 61 75 73 65 2c 20 6f 72 20 4e 55  TH clause, or NU
20520 4c 4c 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 57  LL */.  With *pW
20530 69 74 68 54 6f 46 72 65 65 3b 20 20 20 20 20 20  ithToFree;      
20540 20 20 2f 2a 20 46 72 65 65 20 74 68 69 73 20 57    /* Free this W
20550 49 54 48 20 6f 62 6a 65 63 74 20 61 74 20 74 68  ITH object at th
20560 65 20 65 6e 64 20 6f 66 20 74 68 65 20 70 61 72  e end of the par
20570 73 65 20 2a 2f 0a 7d 3b 0a 0a 2f 2a 0a 2a 2a 20  se */.};../*.** 
20580 53 69 7a 65 73 20 61 6e 64 20 70 6f 69 6e 74 65  Sizes and pointe
20590 72 73 20 6f 66 20 76 61 72 69 6f 75 73 20 70 61  rs of various pa
205a0 72 74 73 20 6f 66 20 74 68 65 20 50 61 72 73 65  rts of the Parse
205b0 20 6f 62 6a 65 63 74 2e 0a 2a 2f 0a 23 64 65 66   object..*/.#def
205c0 69 6e 65 20 50 41 52 53 45 5f 48 44 52 5f 53 5a  ine PARSE_HDR_SZ
205d0 20 6f 66 66 73 65 74 6f 66 28 50 61 72 73 65 2c   offsetof(Parse,
205e0 61 43 6f 6c 43 61 63 68 65 29 20 2f 2a 20 52 65  aColCache) /* Re
205f0 63 75 72 73 69 76 65 20 70 61 72 74 20 77 2f 6f  cursive part w/o
20600 20 61 43 6f 6c 43 61 63 68 65 2a 2f 0a 23 64 65   aColCache*/.#de
20610 66 69 6e 65 20 50 41 52 53 45 5f 52 45 43 55 52  fine PARSE_RECUR
20620 53 45 5f 53 5a 20 6f 66 66 73 65 74 6f 66 28 50  SE_SZ offsetof(P
20630 61 72 73 65 2c 73 4c 61 73 74 54 6f 6b 65 6e 29  arse,sLastToken)
20640 20 20 20 20 2f 2a 20 52 65 63 75 72 73 69 76 65      /* Recursive
20650 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
20660 20 50 41 52 53 45 5f 54 41 49 4c 5f 53 5a 20 28   PARSE_TAIL_SZ (
20670 73 69 7a 65 6f 66 28 50 61 72 73 65 29 2d 50 41  sizeof(Parse)-PA
20680 52 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20  RSE_RECURSE_SZ) 
20690 2f 2a 20 4e 6f 6e 2d 72 65 63 75 72 73 69 76 65  /* Non-recursive
206a0 20 70 61 72 74 20 2a 2f 0a 23 64 65 66 69 6e 65   part */.#define
206b0 20 50 41 52 53 45 5f 54 41 49 4c 28 58 29 20 28   PARSE_TAIL(X) (
206c0 28 28 63 68 61 72 2a 29 28 58 29 29 2b 50 41 52  ((char*)(X))+PAR
206d0 53 45 5f 52 45 43 55 52 53 45 5f 53 5a 29 20 20  SE_RECURSE_SZ)  
206e0 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f 20 74 61  /* Pointer to ta
206f0 69 6c 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 52 65 74  il */../*.** Ret
20700 75 72 6e 20 74 72 75 65 20 69 66 20 63 75 72 72  urn true if curr
20710 65 6e 74 6c 79 20 69 6e 73 69 64 65 20 61 6e 20  ently inside an 
20720 73 71 6c 69 74 65 33 5f 64 65 63 6c 61 72 65 5f  sqlite3_declare_
20730 76 74 61 62 28 29 20 63 61 6c 6c 2e 0a 2a 2f 0a  vtab() call..*/.
20740 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  #ifdef SQLITE_OM
20750 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 0a  IT_VIRTUALTABLE.
20760 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44 45 43    #define IN_DEC
20770 4c 41 52 45 5f 56 54 41 42 20 30 0a 23 65 6c 73  LARE_VTAB 0.#els
20780 65 0a 20 20 23 64 65 66 69 6e 65 20 49 4e 5f 44  e.  #define IN_D
20790 45 43 4c 41 52 45 5f 56 54 41 42 20 28 70 50 61  ECLARE_VTAB (pPa
207a0 72 73 65 2d 3e 64 65 63 6c 61 72 65 56 74 61 62  rse->declareVtab
207b0 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  ).#endif../*.** 
207c0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74  An instance of t
207d0 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72  he following str
207e0 75 63 74 75 72 65 20 63 61 6e 20 62 65 20 64 65  ucture can be de
207f0 63 6c 61 72 65 64 20 6f 6e 20 61 20 73 74 61 63  clared on a stac
20800 6b 20 61 6e 64 20 75 73 65 64 0a 2a 2a 20 74 6f  k and used.** to
20810 20 73 61 76 65 20 74 68 65 20 50 61 72 73 65 2e   save the Parse.
20820 7a 41 75 74 68 43 6f 6e 74 65 78 74 20 76 61 6c  zAuthContext val
20830 75 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ue so that it ca
20840 6e 20 62 65 20 72 65 73 74 6f 72 65 64 20 6c 61  n be restored la
20850 74 65 72 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 41  ter..*/.struct A
20860 75 74 68 43 6f 6e 74 65 78 74 20 7b 0a 20 20 63  uthContext {.  c
20870 6f 6e 73 74 20 63 68 61 72 20 2a 7a 41 75 74 68  onst char *zAuth
20880 43 6f 6e 74 65 78 74 3b 20 20 20 2f 2a 20 50 75  Context;   /* Pu
20890 74 20 73 61 76 65 64 20 50 61 72 73 65 2e 7a 41  t saved Parse.zA
208a0 75 74 68 43 6f 6e 74 65 78 74 20 68 65 72 65 20  uthContext here 
208b0 2a 2f 0a 20 20 50 61 72 73 65 20 2a 70 50 61 72  */.  Parse *pPar
208c0 73 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  se;             
208d0 20 2f 2a 20 54 68 65 20 50 61 72 73 65 20 73 74   /* The Parse st
208e0 72 75 63 74 75 72 65 20 2a 2f 0a 7d 3b 0a 0a 2f  ructure */.};../
208f0 2a 0a 2a 2a 20 42 69 74 66 69 65 6c 64 20 66 6c  *.** Bitfield fl
20900 61 67 73 20 66 6f 72 20 50 35 20 76 61 6c 75 65  ags for P5 value
20910 20 69 6e 20 76 61 72 69 6f 75 73 20 6f 70 63 6f   in various opco
20920 64 65 73 2e 0a 2a 2a 0a 2a 2a 20 56 61 6c 75 65  des..**.** Value
20930 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28 65 6e   constraints (en
20940 66 6f 72 63 65 64 20 76 69 61 20 61 73 73 65 72  forced via asser
20950 74 28 29 29 3a 0a 2a 2a 20 20 20 20 4f 50 46 4c  t()):.**    OPFL
20960 41 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20  AG_LENGTHARG    
20970 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 4c  == SQLITE_FUNC_L
20980 45 4e 47 54 48 0a 2a 2a 20 20 20 20 4f 50 46 4c  ENGTH.**    OPFL
20990 41 47 5f 54 59 50 45 4f 46 41 52 47 20 20 20 20  AG_TYPEOFARG    
209a0 3d 3d 20 53 51 4c 49 54 45 5f 46 55 4e 43 5f 54  == SQLITE_FUNC_T
209b0 59 50 45 4f 46 0a 2a 2a 20 20 20 20 4f 50 46 4c  YPEOF.**    OPFL
209c0 41 47 5f 42 55 4c 4b 43 53 52 20 20 20 20 20 20  AG_BULKCSR      
209d0 3d 3d 20 42 54 52 45 45 5f 42 55 4c 4b 4c 4f 41  == BTREE_BULKLOA
209e0 44 0a 2a 2a 20 20 20 20 4f 50 46 4c 41 47 5f 53  D.**    OPFLAG_S
209f0 45 45 4b 45 51 20 20 20 20 20 20 20 3d 3d 20 42  EEKEQ       == B
20a00 54 52 45 45 5f 53 45 45 4b 5f 45 51 0a 2a 2a 20  TREE_SEEK_EQ.** 
20a10 20 20 20 4f 50 46 4c 41 47 5f 46 4f 52 44 45 4c     OPFLAG_FORDEL
20a20 45 54 45 20 20 20 20 3d 3d 20 42 54 52 45 45 5f  ETE    == BTREE_
20a30 46 4f 52 44 45 4c 45 54 45 0a 2a 2a 20 20 20 20  FORDELETE.**    
20a40 4f 50 46 4c 41 47 5f 53 41 56 45 50 4f 53 49 54  OPFLAG_SAVEPOSIT
20a50 49 4f 4e 20 3d 3d 20 42 54 52 45 45 5f 53 41 56  ION == BTREE_SAV
20a60 45 50 4f 53 49 54 49 4f 4e 0a 2a 2a 20 20 20 20  EPOSITION.**    
20a70 4f 50 46 4c 41 47 5f 41 55 58 44 45 4c 45 54 45  OPFLAG_AUXDELETE
20a80 20 20 20 20 3d 3d 20 42 54 52 45 45 5f 41 55 58      == BTREE_AUX
20a90 44 45 4c 45 54 45 0a 2a 2f 0a 23 64 65 66 69 6e  DELETE.*/.#defin
20aa0 65 20 4f 50 46 4c 41 47 5f 4e 43 48 41 4e 47 45  e OPFLAG_NCHANGE
20ab0 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20 2f         0x01    /
20ac0 2a 20 4f 50 5f 49 6e 73 65 72 74 3a 20 53 65 74  * OP_Insert: Set
20ad0 20 74 6f 20 75 70 64 61 74 65 20 64 62 2d 3e 6e   to update db->n
20ae0 43 68 61 6e 67 65 20 2a 2f 0a 20 20 20 20 20 20  Change */.      
20af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
20b10 2a 20 41 6c 73 6f 20 75 73 65 64 20 69 6e 20 50  * Also used in P
20b20 32 20 28 6e 6f 74 20 50 35 29 20 6f 66 20 4f 50  2 (not P5) of OP
20b30 5f 44 65 6c 65 74 65 20 2a 2f 0a 23 64 65 66 69  _Delete */.#defi
20b40 6e 65 20 4f 50 46 4c 41 47 5f 45 50 48 45 4d 20  ne OPFLAG_EPHEM 
20b50 20 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20          0x01    
20b60 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e 3a 20 45 70  /* OP_Column: Ep
20b70 68 65 6d 65 72 61 6c 20 6f 75 74 70 75 74 20 69  hemeral output i
20b80 73 20 6f 6b 20 2a 2f 0a 23 64 65 66 69 6e 65 20  s ok */.#define 
20b90 4f 50 46 4c 41 47 5f 4c 41 53 54 52 4f 57 49 44  OPFLAG_LASTROWID
20ba0 20 20 20 20 20 30 78 32 30 20 20 20 20 2f 2a 20       0x20    /* 
20bb0 53 65 74 20 74 6f 20 75 70 64 61 74 65 20 64 62  Set to update db
20bc0 2d 3e 6c 61 73 74 52 6f 77 69 64 20 2a 2f 0a 23  ->lastRowid */.#
20bd0 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 49 53  define OPFLAG_IS
20be0 55 50 44 41 54 45 20 20 20 20 20 20 30 78 30 34  UPDATE      0x04
20bf0 20 20 20 20 2f 2a 20 54 68 69 73 20 4f 50 5f 49      /* This OP_I
20c00 6e 73 65 72 74 20 69 73 20 61 6e 20 73 71 6c 20  nsert is an sql 
20c10 55 50 44 41 54 45 20 2a 2f 0a 23 64 65 66 69 6e  UPDATE */.#defin
20c20 65 20 4f 50 46 4c 41 47 5f 41 50 50 45 4e 44 20  e OPFLAG_APPEND 
20c30 20 20 20 20 20 20 20 30 78 30 38 20 20 20 20 2f         0x08    /
20c40 2a 20 54 68 69 73 20 69 73 20 6c 69 6b 65 6c 79  * This is likely
20c50 20 74 6f 20 62 65 20 61 6e 20 61 70 70 65 6e 64   to be an append
20c60 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20c70 41 47 5f 55 53 45 53 45 45 4b 52 45 53 55 4c 54  AG_USESEEKRESULT
20c80 20 30 78 31 30 20 20 20 20 2f 2a 20 54 72 79 20   0x10    /* Try 
20c90 74 6f 20 61 76 6f 69 64 20 61 20 73 65 65 6b 20  to avoid a seek 
20ca0 69 6e 20 42 74 72 65 65 49 6e 73 65 72 74 28 29  in BtreeInsert()
20cb0 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c   */.#define OPFL
20cc0 41 47 5f 49 53 4e 4f 4f 50 20 20 20 20 20 20 20  AG_ISNOOP       
20cd0 20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 44   0x40    /* OP_D
20ce0 65 6c 65 74 65 20 64 6f 65 73 20 70 72 65 2d 75  elete does pre-u
20cf0 70 64 61 74 65 2d 68 6f 6f 6b 20 6f 6e 6c 79 20  pdate-hook only 
20d00 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46 4c 41  */.#define OPFLA
20d10 47 5f 4c 45 4e 47 54 48 41 52 47 20 20 20 20 20  G_LENGTHARG     
20d20 30 78 34 30 20 20 20 20 2f 2a 20 4f 50 5f 43 6f  0x40    /* OP_Co
20d30 6c 75 6d 6e 20 6f 6e 6c 79 20 75 73 65 64 20 66  lumn only used f
20d40 6f 72 20 6c 65 6e 67 74 68 28 29 20 2a 2f 0a 23  or length() */.#
20d50 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 54 59  define OPFLAG_TY
20d60 50 45 4f 46 41 52 47 20 20 20 20 20 30 78 38 30  PEOFARG     0x80
20d70 20 20 20 20 2f 2a 20 4f 50 5f 43 6f 6c 75 6d 6e      /* OP_Column
20d80 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 74   only used for t
20d90 79 70 65 6f 66 28 29 20 2a 2f 0a 23 64 65 66 69  ypeof() */.#defi
20da0 6e 65 20 4f 50 46 4c 41 47 5f 42 55 4c 4b 43 53  ne OPFLAG_BULKCS
20db0 52 20 20 20 20 20 20 20 30 78 30 31 20 20 20 20  R       0x01    
20dc0 2f 2a 20 4f 50 5f 4f 70 65 6e 2a 2a 20 75 73 65  /* OP_Open** use
20dd0 64 20 74 6f 20 6f 70 65 6e 20 62 75 6c 6b 20 63  d to open bulk c
20de0 75 72 73 6f 72 20 2a 2f 0a 23 64 65 66 69 6e 65  ursor */.#define
20df0 20 4f 50 46 4c 41 47 5f 53 45 45 4b 45 51 20 20   OPFLAG_SEEKEQ  
20e00 20 20 20 20 20 20 30 78 30 32 20 20 20 20 2f 2a        0x02    /*
20e10 20 4f 50 5f 4f 70 65 6e 2a 2a 20 63 75 72 73 6f   OP_Open** curso
20e20 72 20 75 73 65 73 20 45 51 20 73 65 65 6b 20 6f  r uses EQ seek o
20e30 6e 6c 79 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f  nly */.#define O
20e40 50 46 4c 41 47 5f 46 4f 52 44 45 4c 45 54 45 20  PFLAG_FORDELETE 
20e50 20 20 20 20 30 78 30 38 20 20 20 20 2f 2a 20 4f      0x08    /* O
20e60 50 5f 4f 70 65 6e 20 73 68 6f 75 6c 64 20 75 73  P_Open should us
20e70 65 20 42 54 52 45 45 5f 46 4f 52 44 45 4c 45 54  e BTREE_FORDELET
20e80 45 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  E */.#define OPF
20e90 4c 41 47 5f 50 32 49 53 52 45 47 20 20 20 20 20  LAG_P2ISREG     
20ea0 20 20 30 78 31 30 20 20 20 20 2f 2a 20 50 32 20    0x10    /* P2 
20eb0 74 6f 20 4f 50 5f 4f 70 65 6e 2a 2a 20 69 73 20  to OP_Open** is 
20ec0 61 20 72 65 67 69 73 74 65 72 20 6e 75 6d 62 65  a register numbe
20ed0 72 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4f 50 46  r */.#define OPF
20ee0 4c 41 47 5f 50 45 52 4d 55 54 45 20 20 20 20 20  LAG_PERMUTE     
20ef0 20 20 30 78 30 31 20 20 20 20 2f 2a 20 4f 50 5f    0x01    /* OP_
20f00 43 6f 6d 70 61 72 65 3a 20 75 73 65 20 74 68 65  Compare: use the
20f10 20 70 65 72 6d 75 74 61 74 69 6f 6e 20 2a 2f 0a   permutation */.
20f20 23 64 65 66 69 6e 65 20 4f 50 46 4c 41 47 5f 53  #define OPFLAG_S
20f30 41 56 45 50 4f 53 49 54 49 4f 4e 20 20 30 78 30  AVEPOSITION  0x0
20f40 32 20 20 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74  2    /* OP_Delet
20f50 65 2f 49 6e 73 65 72 74 3a 20 73 61 76 65 20 63  e/Insert: save c
20f60 75 72 73 6f 72 20 70 6f 73 20 2a 2f 0a 23 64 65  ursor pos */.#de
20f70 66 69 6e 65 20 4f 50 46 4c 41 47 5f 41 55 58 44  fine OPFLAG_AUXD
20f80 45 4c 45 54 45 20 20 20 20 20 30 78 30 34 20 20  ELETE     0x04  
20f90 20 20 2f 2a 20 4f 50 5f 44 65 6c 65 74 65 3a 20    /* OP_Delete: 
20fa0 69 6e 64 65 78 20 69 6e 20 61 20 44 45 4c 45 54  index in a DELET
20fb0 45 20 6f 70 20 2a 2f 0a 0a 2f 2a 0a 20 2a 20 45  E op */../*. * E
20fc0 61 63 68 20 74 72 69 67 67 65 72 20 70 72 65 73  ach trigger pres
20fd0 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 61 62  ent in the datab
20fe0 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 73 74  ase schema is st
20ff0 6f 72 65 64 20 61 73 20 61 6e 20 69 6e 73 74 61  ored as an insta
21000 6e 63 65 20 6f 66 0a 20 2a 20 73 74 72 75 63 74  nce of. * struct
21010 20 54 72 69 67 67 65 72 2e 0a 20 2a 0a 20 2a 20   Trigger.. *. * 
21020 50 6f 69 6e 74 65 72 73 20 74 6f 20 69 6e 73 74  Pointers to inst
21030 61 6e 63 65 73 20 6f 66 20 73 74 72 75 63 74 20  ances of struct 
21040 54 72 69 67 67 65 72 20 61 72 65 20 73 74 6f 72  Trigger are stor
21050 65 64 20 69 6e 20 74 77 6f 20 77 61 79 73 2e 0a  ed in two ways..
21060 20 2a 20 31 2e 20 49 6e 20 74 68 65 20 22 74 72   * 1. In the "tr
21070 69 67 48 61 73 68 22 20 68 61 73 68 20 74 61 62  igHash" hash tab
21080 6c 65 20 28 70 61 72 74 20 6f 66 20 74 68 65 20  le (part of the 
21090 73 71 6c 69 74 65 33 2a 20 74 68 61 74 20 72 65  sqlite3* that re
210a0 70 72 65 73 65 6e 74 73 20 74 68 65 0a 20 2a 20  presents the. * 
210b0 20 20 20 64 61 74 61 62 61 73 65 29 2e 20 54 68     database). Th
210c0 69 73 20 61 6c 6c 6f 77 73 20 54 72 69 67 67 65  is allows Trigge
210d0 72 20 73 74 72 75 63 74 75 72 65 73 20 74 6f 20  r structures to 
210e0 62 65 20 72 65 74 72 69 65 76 65 64 20 62 79 20  be retrieved by 
210f0 6e 61 6d 65 2e 0a 20 2a 20 32 2e 20 41 6c 6c 20  name.. * 2. All 
21100 74 72 69 67 67 65 72 73 20 61 73 73 6f 63 69 61  triggers associa
21110 74 65 64 20 77 69 74 68 20 61 20 73 69 6e 67 6c  ted with a singl
21120 65 20 74 61 62 6c 65 20 66 6f 72 6d 20 61 20 6c  e table form a l
21130 69 6e 6b 65 64 20 6c 69 73 74 2c 20 75 73 69 6e  inked list, usin
21140 67 20 74 68 65 0a 20 2a 20 20 20 20 70 4e 65 78  g the. *    pNex
21150 74 20 6d 65 6d 62 65 72 20 6f 66 20 73 74 72 75  t member of stru
21160 63 74 20 54 72 69 67 67 65 72 2e 20 41 20 70 6f  ct Trigger. A po
21170 69 6e 74 65 72 20 74 6f 20 74 68 65 20 66 69 72  inter to the fir
21180 73 74 20 65 6c 65 6d 65 6e 74 20 6f 66 20 74 68  st element of th
21190 65 0a 20 2a 20 20 20 20 6c 69 6e 6b 65 64 20 6c  e. *    linked l
211a0 69 73 74 20 69 73 20 73 74 6f 72 65 64 20 61 73  ist is stored as
211b0 20 74 68 65 20 22 70 54 72 69 67 67 65 72 22 20   the "pTrigger" 
211c0 6d 65 6d 62 65 72 20 6f 66 20 74 68 65 20 61 73  member of the as
211d0 73 6f 63 69 61 74 65 64 0a 20 2a 20 20 20 20 73  sociated. *    s
211e0 74 72 75 63 74 20 54 61 62 6c 65 2e 0a 20 2a 0a  truct Table.. *.
211f0 20 2a 20 54 68 65 20 22 73 74 65 70 5f 6c 69 73   * The "step_lis
21200 74 22 20 6d 65 6d 62 65 72 20 70 6f 69 6e 74 73  t" member points
21210 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 65 6c   to the first el
21220 65 6d 65 6e 74 20 6f 66 20 61 20 6c 69 6e 6b 65  ement of a linke
21230 64 20 6c 69 73 74 0a 20 2a 20 63 6f 6e 74 61 69  d list. * contai
21240 6e 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61  ning the SQL sta
21250 74 65 6d 65 6e 74 73 20 73 70 65 63 69 66 69 65  tements specifie
21260 64 20 61 73 20 74 68 65 20 74 72 69 67 67 65 72  d as the trigger
21270 20 70 72 6f 67 72 61 6d 2e 0a 20 2a 2f 0a 73 74   program.. */.st
21280 72 75 63 74 20 54 72 69 67 67 65 72 20 7b 0a 20  ruct Trigger {. 
21290 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 20 20 20   char *zName;   
212a0 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
212b0 6e 61 6d 65 20 6f 66 20 74 68 65 20 74 72 69 67  name of the trig
212c0 67 65 72 20 20 20 20 20 20 20 20 20 20 20 20 20  ger             
212d0 20 20 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20             */.  
212e0 63 68 61 72 20 2a 74 61 62 6c 65 3b 20 20 20 20  char *table;    
212f0 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 74          /* The t
21300 61 62 6c 65 20 6f 72 20 76 69 65 77 20 74 6f 20  able or view to 
21310 77 68 69 63 68 20 74 68 65 20 74 72 69 67 67 65  which the trigge
21320 72 20 61 70 70 6c 69 65 73 20 2a 2f 0a 20 20 75  r applies */.  u
21330 38 20 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  8 op;           
21340 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
21350 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
21360 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
21370 20 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 75 38           */.  u8
21380 20 74 72 5f 74 6d 3b 20 20 20 20 20 20 20 20 20   tr_tm;         
21390 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
213a0 54 52 49 47 47 45 52 5f 42 45 46 4f 52 45 2c 20  TRIGGER_BEFORE, 
213b0 54 52 49 47 47 45 52 5f 41 46 54 45 52 20 2a 2f  TRIGGER_AFTER */
213c0 0a 20 20 45 78 70 72 20 2a 70 57 68 65 6e 3b 20  .  Expr *pWhen; 
213d0 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68             /* Th
213e0 65 20 57 48 45 4e 20 63 6c 61 75 73 65 20 6f 66  e WHEN clause of
213f0 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e 20   the expression 
21400 28 6d 61 79 20 62 65 20 4e 55 4c 4c 29 20 2a 2f  (may be NULL) */
21410 0a 20 20 49 64 4c 69 73 74 20 2a 70 43 6f 6c 75  .  IdList *pColu
21420 6d 6e 73 3b 20 20 20 20 20 20 20 2f 2a 20 49 66  mns;       /* If
21430 20 74 68 69 73 20 69 73 20 61 6e 20 55 50 44 41   this is an UPDA
21440 54 45 20 4f 46 20 3c 63 6f 6c 75 6d 6e 2d 6c 69  TE OF <column-li
21450 73 74 3e 20 74 72 69 67 67 65 72 2c 0a 20 20 20  st> trigger,.   
21460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21470 20 20 20 20 20 20 20 20 20 20 74 68 65 20 3c 63            the <c
21480 6f 6c 75 6d 6e 2d 6c 69 73 74 3e 20 69 73 20 73  olumn-list> is s
21490 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 20 20  tored here */.  
214a0 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
214b0 20 20 20 20 20 20 20 20 2f 2a 20 53 63 68 65 6d          /* Schem
214c0 61 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  a containing the
214d0 20 74 72 69 67 67 65 72 20 2a 2f 0a 20 20 53 63   trigger */.  Sc
214e0 68 65 6d 61 20 2a 70 54 61 62 53 63 68 65 6d 61  hema *pTabSchema
214f0 3b 20 20 20 20 20 2f 2a 20 53 63 68 65 6d 61 20  ;     /* Schema 
21500 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 74  containing the t
21510 61 62 6c 65 20 2a 2f 0a 20 20 54 72 69 67 67 65  able */.  Trigge
21520 72 53 74 65 70 20 2a 73 74 65 70 5f 6c 69 73 74  rStep *step_list
21530 3b 20 2f 2a 20 4c 69 6e 6b 20 6c 69 73 74 20 6f  ; /* Link list o
21540 66 20 74 72 69 67 67 65 72 20 70 72 6f 67 72 61  f trigger progra
21550 6d 20 73 74 65 70 73 20 20 20 20 20 20 20 20 20  m steps         
21560 20 20 20 20 2a 2f 0a 20 20 54 72 69 67 67 65 72      */.  Trigger
21570 20 2a 70 4e 65 78 74 3b 20 20 20 20 20 20 20 20   *pNext;        
21580 20 2f 2a 20 4e 65 78 74 20 74 72 69 67 67 65 72   /* Next trigger
21590 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
215a0 20 74 68 65 20 74 61 62 6c 65 20 2a 2f 0a 7d 3b   the table */.};
215b0 0a 0a 2f 2a 0a 2a 2a 20 41 20 74 72 69 67 67 65  ../*.** A trigge
215c0 72 20 69 73 20 65 69 74 68 65 72 20 61 20 42 45  r is either a BE
215d0 46 4f 52 45 20 6f 72 20 61 6e 20 41 46 54 45 52  FORE or an AFTER
215e0 20 74 72 69 67 67 65 72 2e 20 20 54 68 65 20 66   trigger.  The f
215f0 6f 6c 6c 6f 77 69 6e 67 20 63 6f 6e 73 74 61 6e  ollowing constan
21600 74 73 0a 2a 2a 20 64 65 74 65 72 6d 69 6e 65 20  ts.** determine 
21610 77 68 69 63 68 2e 0a 2a 2a 0a 2a 2a 20 49 66 20  which..**.** If 
21620 74 68 65 72 65 20 61 72 65 20 6d 75 6c 74 69 70  there are multip
21630 6c 65 20 74 72 69 67 67 65 72 73 2c 20 79 6f 75  le triggers, you
21640 20 6d 69 67 68 74 20 6f 66 20 73 6f 6d 65 20 42   might of some B
21650 45 46 4f 52 45 20 61 6e 64 20 73 6f 6d 65 20 41  EFORE and some A
21660 46 54 45 52 2e 0a 2a 2a 20 49 6e 20 74 68 61 74  FTER..** In that
21670 20 63 61 73 65 73 2c 20 74 68 65 20 63 6f 6e 73   cases, the cons
21680 74 61 6e 74 73 20 62 65 6c 6f 77 20 63 61 6e 20  tants below can 
21690 62 65 20 4f 52 65 64 20 74 6f 67 65 74 68 65 72  be ORed together
216a0 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 54 52 49  ..*/.#define TRI
216b0 47 47 45 52 5f 42 45 46 4f 52 45 20 20 31 0a 23  GGER_BEFORE  1.#
216c0 64 65 66 69 6e 65 20 54 52 49 47 47 45 52 5f 41  define TRIGGER_A
216d0 46 54 45 52 20 20 20 32 0a 0a 2f 2a 0a 20 2a 20  FTER   2../*. * 
216e0 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 73  An instance of s
216f0 74 72 75 63 74 20 54 72 69 67 67 65 72 53 74 65  truct TriggerSte
21700 70 20 69 73 20 75 73 65 64 20 74 6f 20 73 74 6f  p is used to sto
21710 72 65 20 61 20 73 69 6e 67 6c 65 20 53 51 4c 20  re a single SQL 
21720 73 74 61 74 65 6d 65 6e 74 0a 20 2a 20 74 68 61  statement. * tha
21730 74 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 61  t is a part of a
21740 20 74 72 69 67 67 65 72 2d 70 72 6f 67 72 61 6d   trigger-program
21750 2e 0a 20 2a 0a 20 2a 20 49 6e 73 74 61 6e 63 65  .. *. * Instance
21760 73 20 6f 66 20 73 74 72 75 63 74 20 54 72 69 67  s of struct Trig
21770 67 65 72 53 74 65 70 20 61 72 65 20 73 74 6f 72  gerStep are stor
21780 65 64 20 69 6e 20 61 20 73 69 6e 67 6c 79 20 6c  ed in a singly l
21790 69 6e 6b 65 64 20 6c 69 73 74 20 28 6c 69 6e 6b  inked list (link
217a0 65 64 0a 20 2a 20 75 73 69 6e 67 20 74 68 65 20  ed. * using the 
217b0 22 70 4e 65 78 74 22 20 6d 65 6d 62 65 72 29 20  "pNext" member) 
217c0 72 65 66 65 72 65 6e 63 65 64 20 62 79 20 74 68  referenced by th
217d0 65 20 22 73 74 65 70 5f 6c 69 73 74 22 20 6d 65  e "step_list" me
217e0 6d 62 65 72 20 6f 66 20 74 68 65 0a 20 2a 20 61  mber of the. * a
217f0 73 73 6f 63 69 61 74 65 64 20 73 74 72 75 63 74  ssociated struct
21800 20 54 72 69 67 67 65 72 20 69 6e 73 74 61 6e 63   Trigger instanc
21810 65 2e 20 54 68 65 20 66 69 72 73 74 20 65 6c 65  e. The first ele
21820 6d 65 6e 74 20 6f 66 20 74 68 65 20 6c 69 6e 6b  ment of the link
21830 65 64 20 6c 69 73 74 20 69 73 0a 20 2a 20 74 68  ed list is. * th
21840 65 20 66 69 72 73 74 20 73 74 65 70 20 6f 66 20  e first step of 
21850 74 68 65 20 74 72 69 67 67 65 72 2d 70 72 6f 67  the trigger-prog
21860 72 61 6d 2e 0a 20 2a 0a 20 2a 20 54 68 65 20 22  ram.. *. * The "
21870 6f 70 22 20 6d 65 6d 62 65 72 20 69 6e 64 69 63  op" member indic
21880 61 74 65 73 20 77 68 65 74 68 65 72 20 74 68 69  ates whether thi
21890 73 20 69 73 20 61 20 22 44 45 4c 45 54 45 22 2c  s is a "DELETE",
218a0 20 22 49 4e 53 45 52 54 22 2c 20 22 55 50 44 41   "INSERT", "UPDA
218b0 54 45 22 20 6f 72 0a 20 2a 20 22 53 45 4c 45 43  TE" or. * "SELEC
218c0 54 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68  T" statement. Th
218d0 65 20 6d 65 61 6e 69 6e 67 73 20 6f 66 20 74 68  e meanings of th
218e0 65 20 6f 74 68 65 72 20 6d 65 6d 62 65 72 73 20  e other members 
218f0 69 73 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  is determined by
21900 20 74 68 65 0a 20 2a 20 76 61 6c 75 65 20 6f 66   the. * value of
21910 20 22 6f 70 22 20 61 73 20 66 6f 6c 6c 6f 77 73   "op" as follows
21920 3a 0a 20 2a 0a 20 2a 20 28 6f 70 20 3d 3d 20 54  :. *. * (op == T
21930 4b 5f 49 4e 53 45 52 54 29 0a 20 2a 20 6f 72 63  K_INSERT). * orc
21940 6f 6e 66 20 20 20 20 2d 3e 20 73 74 6f 72 65 73  onf    -> stores
21950 20 74 68 65 20 4f 4e 20 43 4f 4e 46 4c 49 43 54   the ON CONFLICT
21960 20 61 6c 67 6f 72 69 74 68 6d 0a 20 2a 20 70 53   algorithm. * pS
21970 65 6c 65 63 74 20 20 20 2d 3e 20 49 66 20 74 68  elect   -> If th
21980 69 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20  is is an INSERT 
21990 49 4e 54 4f 20 2e 2e 2e 20 53 45 4c 45 43 54 20  INTO ... SELECT 
219a0 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74 2c 20 74  ... statement, t
219b0 68 65 6e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  hen. *          
219c0 20 20 20 20 74 68 69 73 20 73 74 6f 72 65 73 20      this stores 
219d0 61 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65  a pointer to the
219e0 20 53 45 4c 45 43 54 20 73 74 61 74 65 6d 65 6e   SELECT statemen
219f0 74 2e 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c  t. Otherwise NUL
21a00 4c 2e 0a 20 2a 20 7a 54 61 72 67 65 74 20 20 20  L.. * zTarget   
21a10 2d 3e 20 44 65 71 75 6f 74 65 64 20 6e 61 6d 65  -> Dequoted name
21a20 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20 74 6f   of the table to
21a30 20 69 6e 73 65 72 74 20 69 6e 74 6f 2e 0a 20 2a   insert into.. *
21a40 20 70 45 78 70 72 4c 69 73 74 20 2d 3e 20 49 66   pExprList -> If
21a50 20 74 68 69 73 20 69 73 20 61 6e 20 49 4e 53 45   this is an INSE
21a60 52 54 20 49 4e 54 4f 20 2e 2e 2e 20 56 41 4c 55  RT INTO ... VALU
21a70 45 53 20 2e 2e 2e 20 73 74 61 74 65 6d 65 6e 74  ES ... statement
21a80 2c 20 74 68 65 6e 0a 20 2a 20 20 20 20 20 20 20  , then. *       
21a90 20 20 20 20 20 20 20 74 68 69 73 20 73 74 6f 72         this stor
21aa0 65 73 20 76 61 6c 75 65 73 20 74 6f 20 62 65 20  es values to be 
21ab0 69 6e 73 65 72 74 65 64 2e 20 4f 74 68 65 72 77  inserted. Otherw
21ac0 69 73 65 20 4e 55 4c 4c 2e 0a 20 2a 20 70 49 64  ise NULL.. * pId
21ad0 4c 69 73 74 20 20 20 2d 3e 20 49 66 20 74 68 69  List   -> If thi
21ae0 73 20 69 73 20 61 6e 20 49 4e 53 45 52 54 20 49  s is an INSERT I
21af0 4e 54 4f 20 2e 2e 2e 20 28 3c 63 6f 6c 75 6d 6e  NTO ... (<column
21b00 2d 6e 61 6d 65 73 3e 29 20 56 41 4c 55 45 53 20  -names>) VALUES 
21b10 2e 2e 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20  .... *          
21b20 20 20 20 20 73 74 61 74 65 6d 65 6e 74 2c 20 74      statement, t
21b30 68 65 6e 20 74 68 69 73 20 73 74 6f 72 65 73 20  hen this stores 
21b40 74 68 65 20 63 6f 6c 75 6d 6e 2d 6e 61 6d 65 73  the column-names
21b50 20 74 6f 20 62 65 0a 20 2a 20 20 20 20 20 20 20   to be. *       
21b60 20 20 20 20 20 20 20 69 6e 73 65 72 74 65 64 20         inserted 
21b70 69 6e 74 6f 2e 0a 20 2a 0a 20 2a 20 28 6f 70 20  into.. *. * (op 
21b80 3d 3d 20 54 4b 5f 44 45 4c 45 54 45 29 0a 20 2a  == TK_DELETE). *
21b90 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44 65   zTarget   -> De
21ba0 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20 74  quoted name of t
21bb0 68 65 20 74 61 62 6c 65 20 74 6f 20 64 65 6c 65  he table to dele
21bc0 74 65 20 66 72 6f 6d 2e 0a 20 2a 20 70 57 68 65  te from.. * pWhe
21bd0 72 65 20 20 20 20 2d 3e 20 54 68 65 20 57 48 45  re    -> The WHE
21be0 52 45 20 63 6c 61 75 73 65 20 6f 66 20 74 68 65  RE clause of the
21bf0 20 44 45 4c 45 54 45 20 73 74 61 74 65 6d 65 6e   DELETE statemen
21c00 74 20 69 66 20 6f 6e 65 20 69 73 20 73 70 65 63  t if one is spec
21c10 69 66 69 65 64 2e 0a 20 2a 20 20 20 20 20 20 20  ified.. *       
21c20 20 20 20 20 20 20 20 4f 74 68 65 72 77 69 73 65         Otherwise
21c30 20 4e 55 4c 4c 2e 0a 20 2a 0a 20 2a 20 28 6f 70   NULL.. *. * (op
21c40 20 3d 3d 20 54 4b 5f 55 50 44 41 54 45 29 0a 20   == TK_UPDATE). 
21c50 2a 20 7a 54 61 72 67 65 74 20 20 20 2d 3e 20 44  * zTarget   -> D
21c60 65 71 75 6f 74 65 64 20 6e 61 6d 65 20 6f 66 20  equoted name of 
21c70 74 68 65 20 74 61 62 6c 65 20 74 6f 20 75 70 64  the table to upd
21c80 61 74 65 2e 0a 20 2a 20 70 57 68 65 72 65 20 20  ate.. * pWhere  
21c90 20 20 2d 3e 20 54 68 65 20 57 48 45 52 45 20 63    -> The WHERE c
21ca0 6c 61 75 73 65 20 6f 66 20 74 68 65 20 55 50 44  lause of the UPD
21cb0 41 54 45 20 73 74 61 74 65 6d 65 6e 74 20 69 66  ATE statement if
21cc0 20 6f 6e 65 20 69 73 20 73 70 65 63 69 66 69 65   one is specifie
21cd0 64 2e 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20  d.. *           
21ce0 20 20 20 4f 74 68 65 72 77 69 73 65 20 4e 55 4c     Otherwise NUL
21cf0 4c 2e 0a 20 2a 20 70 45 78 70 72 4c 69 73 74 20  L.. * pExprList 
21d00 2d 3e 20 41 20 6c 69 73 74 20 6f 66 20 74 68 65  -> A list of the
21d10 20 63 6f 6c 75 6d 6e 73 20 74 6f 20 75 70 64 61   columns to upda
21d20 74 65 20 61 6e 64 20 74 68 65 20 65 78 70 72 65  te and the expre
21d30 73 73 69 6f 6e 73 20 74 6f 20 75 70 64 61 74 65  ssions to update
21d40 0a 20 2a 20 20 20 20 20 20 20 20 20 20 20 20 20  . *             
21d50 20 74 68 65 6d 20 74 6f 2e 20 53 65 65 20 73 71   them to. See sq
21d60 6c 69 74 65 33 55 70 64 61 74 65 28 29 20 64 6f  lite3Update() do
21d70 63 75 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 22  cumentation of "
21d80 70 43 68 61 6e 67 65 73 22 0a 20 2a 20 20 20 20  pChanges". *    
21d90 20 20 20 20 20 20 20 20 20 20 61 72 67 75 6d 65            argume
21da0 6e 74 2e 0a 20 2a 0a 20 2a 2f 0a 73 74 72 75 63  nt.. *. */.struc
21db0 74 20 54 72 69 67 67 65 72 53 74 65 70 20 7b 0a  t TriggerStep {.
21dc0 20 20 75 38 20 6f 70 3b 20 20 20 20 20 20 20 20    u8 op;        
21dd0 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66         /* One of
21de0 20 54 4b 5f 44 45 4c 45 54 45 2c 20 54 4b 5f 55   TK_DELETE, TK_U
21df0 50 44 41 54 45 2c 20 54 4b 5f 49 4e 53 45 52 54  PDATE, TK_INSERT
21e00 2c 20 54 4b 5f 53 45 4c 45 43 54 20 2a 2f 0a 20  , TK_SELECT */. 
21e10 20 75 38 20 6f 72 63 6f 6e 66 3b 20 20 20 20 20   u8 orconf;     
21e20 20 20 20 20 20 20 2f 2a 20 4f 45 5f 52 6f 6c 6c        /* OE_Roll
21e30 62 61 63 6b 20 65 74 63 2e 20 2a 2f 0a 20 20 54  back etc. */.  T
21e40 72 69 67 67 65 72 20 2a 70 54 72 69 67 3b 20 20  rigger *pTrig;  
21e50 20 20 20 20 2f 2a 20 54 68 65 20 74 72 69 67 67      /* The trigg
21e60 65 72 20 74 68 61 74 20 74 68 69 73 20 73 74 65  er that this ste
21e70 70 20 69 73 20 61 20 70 61 72 74 20 6f 66 20 2a  p is a part of *
21e80 2f 0a 20 20 53 65 6c 65 63 74 20 2a 70 53 65 6c  /.  Select *pSel
21e90 65 63 74 3b 20 20 20 20 20 2f 2a 20 53 45 4c 45  ect;     /* SELE
21ea0 43 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20  CT statement or 
21eb0 52 48 53 20 6f 66 20 49 4e 53 45 52 54 20 49 4e  RHS of INSERT IN
21ec0 54 4f 20 53 45 4c 45 43 54 20 2e 2e 2e 20 2a 2f  TO SELECT ... */
21ed0 0a 20 20 63 68 61 72 20 2a 7a 54 61 72 67 65 74  .  char *zTarget
21ee0 3b 20 20 20 20 20 20 20 2f 2a 20 54 61 72 67 65  ;       /* Targe
21ef0 74 20 74 61 62 6c 65 20 66 6f 72 20 44 45 4c 45  t table for DELE
21f00 54 45 2c 20 55 50 44 41 54 45 2c 20 49 4e 53 45  TE, UPDATE, INSE
21f10 52 54 20 2a 2f 0a 20 20 45 78 70 72 20 2a 70 57  RT */.  Expr *pW
21f20 68 65 72 65 3b 20 20 20 20 20 20 20 20 2f 2a 20  here;        /* 
21f30 54 68 65 20 57 48 45 52 45 20 63 6c 61 75 73 65  The WHERE clause
21f40 20 66 6f 72 20 44 45 4c 45 54 45 20 6f 72 20 55   for DELETE or U
21f50 50 44 41 54 45 20 73 74 65 70 73 20 2a 2f 0a 20  PDATE steps */. 
21f60 20 45 78 70 72 4c 69 73 74 20 2a 70 45 78 70 72   ExprList *pExpr
21f70 4c 69 73 74 3b 20 2f 2a 20 53 45 54 20 63 6c 61  List; /* SET cla
21f80 75 73 65 20 66 6f 72 20 55 50 44 41 54 45 2e 20  use for UPDATE. 
21f90 2a 2f 0a 20 20 49 64 4c 69 73 74 20 2a 70 49 64  */.  IdList *pId
21fa0 4c 69 73 74 3b 20 20 20 20 20 2f 2a 20 43 6f 6c  List;     /* Col
21fb0 75 6d 6e 20 6e 61 6d 65 73 20 66 6f 72 20 49 4e  umn names for IN
21fc0 53 45 52 54 20 2a 2f 0a 20 20 54 72 69 67 67 65  SERT */.  Trigge
21fd0 72 53 74 65 70 20 2a 70 4e 65 78 74 3b 20 20 2f  rStep *pNext;  /
21fe0 2a 20 4e 65 78 74 20 69 6e 20 74 68 65 20 6c 69  * Next in the li
21ff0 6e 6b 2d 6c 69 73 74 20 2a 2f 0a 20 20 54 72 69  nk-list */.  Tri
22000 67 67 65 72 53 74 65 70 20 2a 70 4c 61 73 74 3b  ggerStep *pLast;
22010 20 20 2f 2a 20 4c 61 73 74 20 65 6c 65 6d 65 6e    /* Last elemen
22020 74 20 69 6e 20 6c 69 6e 6b 2d 6c 69 73 74 2e 20  t in link-list. 
22030 56 61 6c 69 64 20 66 6f 72 20 31 73 74 20 65 6c  Valid for 1st el
22040 65 6d 20 6f 6e 6c 79 20 2a 2f 0a 7d 3b 0a 0a 2f  em only */.};../
22050 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69  *.** The followi
22060 6e 67 20 73 74 72 75 63 74 75 72 65 20 63 6f 6e  ng structure con
22070 74 61 69 6e 73 20 69 6e 66 6f 72 6d 61 74 69 6f  tains informatio
22080 6e 20 75 73 65 64 20 62 79 20 74 68 65 20 73 71  n used by the sq
22090 6c 69 74 65 46 69 78 2e 2e 2e 0a 2a 2a 20 72 6f  liteFix....** ro
220a0 75 74 69 6e 65 73 20 61 73 20 74 68 65 79 20 77  utines as they w
220b0 61 6c 6b 20 74 68 65 20 70 61 72 73 65 20 74 72  alk the parse tr
220c0 65 65 20 74 6f 20 6d 61 6b 65 20 64 61 74 61 62  ee to make datab
220d0 61 73 65 20 72 65 66 65 72 65 6e 63 65 73 0a 2a  ase references.*
220e0 2a 20 65 78 70 6c 69 63 69 74 2e 0a 2a 2f 0a 74  * explicit..*/.t
220f0 79 70 65 64 65 66 20 73 74 72 75 63 74 20 44 62  ypedef struct Db
22100 46 69 78 65 72 20 44 62 46 69 78 65 72 3b 0a 73  Fixer DbFixer;.s
22110 74 72 75 63 74 20 44 62 46 69 78 65 72 20 7b 0a  truct DbFixer {.
22120 20 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 3b    Parse *pParse;
22130 20 20 20 20 20 20 2f 2a 20 54 68 65 20 70 61 72        /* The par
22140 73 69 6e 67 20 63 6f 6e 74 65 78 74 2e 20 20 45  sing context.  E
22150 72 72 6f 72 20 6d 65 73 73 61 67 65 73 20 77 72  rror messages wr
22160 69 74 74 65 6e 20 68 65 72 65 20 2a 2f 0a 20 20  itten here */.  
22170 53 63 68 65 6d 61 20 2a 70 53 63 68 65 6d 61 3b  Schema *pSchema;
22180 20 20 20 20 2f 2a 20 46 69 78 20 69 74 65 6d 73      /* Fix items
22190 20 74 6f 20 74 68 69 73 20 73 63 68 65 6d 61 20   to this schema 
221a0 2a 2f 0a 20 20 69 6e 74 20 62 56 61 72 4f 6e 6c  */.  int bVarOnl
221b0 79 3b 20 20 20 20 20 20 20 2f 2a 20 43 68 65 63  y;       /* Chec
221c0 6b 20 66 6f 72 20 76 61 72 69 61 62 6c 65 20 72  k for variable r
221d0 65 66 65 72 65 6e 63 65 73 20 6f 6e 6c 79 20 2a  eferences only *
221e0 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  /.  const char *
221f0 7a 44 62 3b 20 20 20 20 2f 2a 20 4d 61 6b 65 20  zDb;    /* Make 
22200 73 75 72 65 20 61 6c 6c 20 6f 62 6a 65 63 74 73  sure all objects
22210 20 61 72 65 20 63 6f 6e 74 61 69 6e 65 64 20 69   are contained i
22220 6e 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  n this database 
22230 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
22240 2a 7a 54 79 70 65 3b 20 20 2f 2a 20 54 79 70 65  *zType;  /* Type
22250 20 6f 66 20 74 68 65 20 63 6f 6e 74 61 69 6e 65   of the containe
22260 72 20 2d 20 75 73 65 64 20 66 6f 72 20 65 72 72  r - used for err
22270 6f 72 20 6d 65 73 73 61 67 65 73 20 2a 2f 0a 20  or messages */. 
22280 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 2a 70 4e   const Token *pN
22290 61 6d 65 3b 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  ame; /* Name of 
222a0 74 68 65 20 63 6f 6e 74 61 69 6e 65 72 20 2d 20  the container - 
222b0 75 73 65 64 20 66 6f 72 20 65 72 72 6f 72 20 6d  used for error m
222c0 65 73 73 61 67 65 73 20 2a 2f 0a 7d 3b 0a 0a 2f  essages */.};../
222d0 2a 0a 2a 2a 20 41 6e 20 6f 62 6a 65 63 74 65 64  *.** An objected
222e0 20 75 73 65 64 20 74 6f 20 61 63 63 75 6d 75 6c   used to accumul
222f0 61 74 65 20 74 68 65 20 74 65 78 74 20 6f 66 20  ate the text of 
22300 61 20 73 74 72 69 6e 67 20 77 68 65 72 65 20 77  a string where w
22310 65 0a 2a 2a 20 64 6f 20 6e 6f 74 20 6e 65 63 65  e.** do not nece
22320 73 73 61 72 69 6c 79 20 6b 6e 6f 77 20 68 6f 77  ssarily know how
22330 20 62 69 67 20 74 68 65 20 73 74 72 69 6e 67 20   big the string 
22340 77 69 6c 6c 20 62 65 20 69 6e 20 74 68 65 20 65  will be in the e
22350 6e 64 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 74  nd..*/.struct St
22360 72 41 63 63 75 6d 20 7b 0a 20 20 73 71 6c 69 74  rAccum {.  sqlit
22370 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20 20  e3 *db;         
22380 2f 2a 20 4f 70 74 69 6f 6e 61 6c 20 64 61 74 61  /* Optional data
22390 62 61 73 65 20 66 6f 72 20 6c 6f 6f 6b 61 73 69  base for lookasi
223a0 64 65 2e 20 20 43 61 6e 20 62 65 20 4e 55 4c 4c  de.  Can be NULL
223b0 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 42 61 73   */.  char *zBas
223c0 65 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20  e;         /* A 
223d0 62 61 73 65 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e  base allocation.
223e0 20 20 4e 6f 74 20 66 72 6f 6d 20 6d 61 6c 6c 6f    Not from mallo
223f0 63 2e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a 54  c. */.  char *zT
22400 65 78 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ext;         /* 
22410 54 68 65 20 73 74 72 69 6e 67 20 63 6f 6c 6c 65  The string colle
22420 63 74 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a 20  cted so far */. 
22430 20 75 33 32 20 20 6e 43 68 61 72 3b 20 20 20 20   u32  nChar;    
22440 20 20 20 20 20 20 2f 2a 20 4c 65 6e 67 74 68 20        /* Length 
22450 6f 66 20 74 68 65 20 73 74 72 69 6e 67 20 73 6f  of the string so
22460 20 66 61 72 20 2a 2f 0a 20 20 75 33 32 20 20 6e   far */.  u32  n
22470 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 20 2f  Alloc;         /
22480 2a 20 41 6d 6f 75 6e 74 20 6f 66 20 73 70 61 63  * Amount of spac
22490 65 20 61 6c 6c 6f 63 61 74 65 64 20 69 6e 20 7a  e allocated in z
224a0 54 65 78 74 20 2a 2f 0a 20 20 75 33 32 20 20 6d  Text */.  u32  m
224b0 78 41 6c 6c 6f 63 3b 20 20 20 20 20 20 20 20 2f  xAlloc;        /
224c0 2a 20 4d 61 78 69 6d 75 6d 20 61 6c 6c 6f 77 65  * Maximum allowe
224d0 64 20 61 6c 6c 6f 63 61 74 69 6f 6e 2e 20 20 30  d allocation.  0
224e0 20 66 6f 72 20 6e 6f 20 6d 61 6c 6c 6f 63 20 75   for no malloc u
224f0 73 61 67 65 20 2a 2f 0a 20 20 75 38 20 20 20 61  sage */.  u8   a
22500 63 63 45 72 72 6f 72 3b 20 20 20 20 20 20 20 2f  ccError;       /
22510 2a 20 53 54 52 41 43 43 55 4d 5f 4e 4f 4d 45 4d  * STRACCUM_NOMEM
22520 20 6f 72 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f   or STRACCUM_TOO
22530 42 49 47 20 2a 2f 0a 20 20 75 38 20 20 20 70 72  BIG */.  u8   pr
22540 69 6e 74 66 46 6c 61 67 73 3b 20 20 20 20 2f 2a  intfFlags;    /*
22550 20 53 51 4c 49 54 45 5f 50 52 49 4e 54 46 20 66   SQLITE_PRINTF f
22560 6c 61 67 73 20 62 65 6c 6f 77 20 2a 2f 0a 7d 3b  lags below */.};
22570 0a 23 64 65 66 69 6e 65 20 53 54 52 41 43 43 55  .#define STRACCU
22580 4d 5f 4e 4f 4d 45 4d 20 20 20 31 0a 23 64 65 66  M_NOMEM   1.#def
22590 69 6e 65 20 53 54 52 41 43 43 55 4d 5f 54 4f 4f  ine STRACCUM_TOO
225a0 42 49 47 20 20 32 0a 23 64 65 66 69 6e 65 20 53  BIG  2.#define S
225b0 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 49 4e 54  QLITE_PRINTF_INT
225c0 45 52 4e 41 4c 20 30 78 30 31 20 20 2f 2a 20 49  ERNAL 0x01  /* I
225d0 6e 74 65 72 6e 61 6c 2d 75 73 65 2d 6f 6e 6c 79  nternal-use-only
225e0 20 63 6f 6e 76 65 72 74 65 72 73 20 61 6c 6c 6f   converters allo
225f0 77 65 64 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53  wed */.#define S
22600 51 4c 49 54 45 5f 50 52 49 4e 54 46 5f 53 51 4c  QLITE_PRINTF_SQL
22610 46 55 4e 43 20 20 30 78 30 32 20 20 2f 2a 20 53  FUNC  0x02  /* S
22620 51 4c 20 66 75 6e 63 74 69 6f 6e 20 61 72 67 75  QL function argu
22630 6d 65 6e 74 73 20 74 6f 20 56 58 50 72 69 6e 74  ments to VXPrint
22640 66 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51 4c  f */.#define SQL
22650 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c 4f  ITE_PRINTF_MALLO
22660 43 45 44 20 30 78 30 34 20 20 2f 2a 20 54 72 75  CED 0x04  /* Tru
22670 65 20 69 66 20 78 54 65 78 74 20 69 73 20 61 6c  e if xText is al
22680 6c 6f 63 61 74 65 64 20 73 70 61 63 65 20 2a 2f  located space */
22690 0a 0a 23 64 65 66 69 6e 65 20 69 73 4d 61 6c 6c  ..#define isMall
226a0 6f 63 65 64 28 58 29 20 20 28 28 28 58 29 2d 3e  oced(X)  (((X)->
226b0 70 72 69 6e 74 66 46 6c 61 67 73 20 26 20 53 51  printfFlags & SQ
226c0 4c 49 54 45 5f 50 52 49 4e 54 46 5f 4d 41 4c 4c  LITE_PRINTF_MALL
226d0 4f 43 45 44 29 21 3d 30 29 0a 0a 0a 2f 2a 0a 2a  OCED)!=0).../*.*
226e0 2a 20 41 20 70 6f 69 6e 74 65 72 20 74 6f 20 74  * A pointer to t
226f0 68 69 73 20 73 74 72 75 63 74 75 72 65 20 69 73  his structure is
22700 20 75 73 65 64 20 74 6f 20 63 6f 6d 6d 75 6e 69   used to communi
22710 63 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  cate information
22720 0a 2a 2a 20 66 72 6f 6d 20 73 71 6c 69 74 65 33  .** from sqlite3
22730 49 6e 69 74 20 61 6e 64 20 4f 50 5f 50 61 72 73  Init and OP_Pars
22740 65 53 63 68 65 6d 61 20 69 6e 74 6f 20 74 68 65  eSchema into the
22750 20 73 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c   sqlite3InitCall
22760 62 61 63 6b 2e 0a 2a 2f 0a 74 79 70 65 64 65 66  back..*/.typedef
22770 20 73 74 72 75 63 74 20 7b 0a 20 20 73 71 6c 69   struct {.  sqli
22780 74 65 33 20 2a 64 62 3b 20 20 20 20 20 20 20 20  te3 *db;        
22790 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
227a0 62 65 69 6e 67 20 69 6e 69 74 69 61 6c 69 7a 65  being initialize
227b0 64 20 2a 2f 0a 20 20 63 68 61 72 20 2a 2a 70 7a  d */.  char **pz
227c0 45 72 72 4d 73 67 3b 20 20 20 20 2f 2a 20 45 72  ErrMsg;    /* Er
227d0 72 6f 72 20 6d 65 73 73 61 67 65 20 73 74 6f 72  ror message stor
227e0 65 64 20 68 65 72 65 20 2a 2f 0a 20 20 69 6e 74  ed here */.  int
227f0 20 69 44 62 3b 20 20 20 20 20 20 20 20 20 20 20   iDb;           
22800 20 2f 2a 20 30 20 66 6f 72 20 6d 61 69 6e 20 64   /* 0 for main d
22810 61 74 61 62 61 73 65 2e 20 20 31 20 66 6f 72 20  atabase.  1 for 
22820 54 45 4d 50 2c 20 32 2e 2e 20 66 6f 72 20 41 54  TEMP, 2.. for AT
22830 54 41 43 48 65 64 20 2a 2f 0a 20 20 69 6e 74 20  TACHed */.  int 
22840 72 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  rc;             
22850 2f 2a 20 52 65 73 75 6c 74 20 63 6f 64 65 20 73  /* Result code s
22860 74 6f 72 65 64 20 68 65 72 65 20 2a 2f 0a 7d 20  tored here */.} 
22870 49 6e 69 74 44 61 74 61 3b 0a 0a 2f 2a 0a 2a 2a  InitData;../*.**
22880 20 53 74 72 75 63 74 75 72 65 20 63 6f 6e 74 61   Structure conta
22890 69 6e 69 6e 67 20 67 6c 6f 62 61 6c 20 63 6f 6e  ining global con
228a0 66 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 20  figuration data 
228b0 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 6c  for the SQLite l
228c0 69 62 72 61 72 79 2e 0a 2a 2a 0a 2a 2a 20 54 68  ibrary..**.** Th
228d0 69 73 20 73 74 72 75 63 74 75 72 65 20 61 6c 73  is structure als
228e0 6f 20 63 6f 6e 74 61 69 6e 73 20 73 6f 6d 65 20  o contains some 
228f0 73 74 61 74 65 20 69 6e 66 6f 72 6d 61 74 69 6f  state informatio
22900 6e 2e 0a 2a 2f 0a 73 74 72 75 63 74 20 53 71 6c  n..*/.struct Sql
22910 69 74 65 33 43 6f 6e 66 69 67 20 7b 0a 20 20 69  ite3Config {.  i
22920 6e 74 20 62 4d 65 6d 73 74 61 74 3b 20 20 20 20  nt bMemstat;    
22930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22940 20 2f 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62   /* True to enab
22950 6c 65 20 6d 65 6d 6f 72 79 20 73 74 61 74 75 73  le memory status
22960 20 2a 2f 0a 20 20 69 6e 74 20 62 43 6f 72 65 4d   */.  int bCoreM
22970 75 74 65 78 3b 20 20 20 20 20 20 20 20 20 20 20  utex;           
22980 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20          /* True 
22990 74 6f 20 65 6e 61 62 6c 65 20 63 6f 72 65 20 6d  to enable core m
229a0 75 74 65 78 69 6e 67 20 2a 2f 0a 20 20 69 6e 74  utexing */.  int
229b0 20 62 46 75 6c 6c 4d 75 74 65 78 3b 20 20 20 20   bFullMutex;    
229c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
229d0 2a 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  * True to enable
229e0 20 66 75 6c 6c 20 6d 75 74 65 78 69 6e 67 20 2a   full mutexing *
229f0 2f 0a 20 20 69 6e 74 20 62 4f 70 65 6e 55 72 69  /.  int bOpenUri
22a00 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22a10 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 74 6f        /* True to
22a20 20 69 6e 74 65 72 70 72 65 74 20 66 69 6c 65 6e   interpret filen
22a30 61 6d 65 73 20 61 73 20 55 52 49 73 20 2a 2f 0a  ames as URIs */.
22a40 20 20 69 6e 74 20 62 55 73 65 43 69 73 3b 20 20    int bUseCis;  
22a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22a60 20 20 20 20 2f 2a 20 55 73 65 20 63 6f 76 65 72      /* Use cover
22a70 69 6e 67 20 69 6e 64 69 63 65 73 20 66 6f 72 20  ing indices for 
22a80 66 75 6c 6c 2d 73 63 61 6e 73 20 2a 2f 0a 20 20  full-scans */.  
22a90 69 6e 74 20 6d 78 53 74 72 6c 65 6e 3b 20 20 20  int mxStrlen;   
22aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ab0 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 73 74 72    /* Maximum str
22ac0 69 6e 67 20 6c 65 6e 67 74 68 20 2a 2f 0a 20 20  ing length */.  
22ad0 69 6e 74 20 6e 65 76 65 72 43 6f 72 72 75 70 74  int neverCorrupt
22ae0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
22af0 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 73    /* Database is
22b00 20 61 6c 77 61 79 73 20 77 65 6c 6c 2d 66 6f 72   always well-for
22b10 6d 65 64 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 4c  med */.  int szL
22b20 6f 6f 6b 61 73 69 64 65 3b 20 20 20 20 20 20 20  ookaside;       
22b30 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 65             /* De
22b40 66 61 75 6c 74 20 6c 6f 6f 6b 61 73 69 64 65 20  fault lookaside 
22b50 62 75 66 66 65 72 20 73 69 7a 65 20 2a 2f 0a 20  buffer size */. 
22b60 20 69 6e 74 20 6e 4c 6f 6f 6b 61 73 69 64 65 3b   int nLookaside;
22b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22b80 20 20 20 2f 2a 20 44 65 66 61 75 6c 74 20 6c 6f     /* Default lo
22b90 6f 6b 61 73 69 64 65 20 62 75 66 66 65 72 20 63  okaside buffer c
22ba0 6f 75 6e 74 20 2a 2f 0a 20 20 69 6e 74 20 6e 53  ount */.  int nS
22bb0 74 6d 74 53 70 69 6c 6c 3b 20 20 20 20 20 20 20  tmtSpill;       
22bc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53              /* S
22bd0 74 6d 74 2d 6a 6f 75 72 6e 61 6c 20 73 70 69 6c  tmt-journal spil
22be0 6c 2d 74 6f 2d 64 69 73 6b 20 74 68 72 65 73 68  l-to-disk thresh
22bf0 6f 6c 64 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  old */.  sqlite3
22c00 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 20 6d 3b 20  _mem_methods m; 
22c10 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
22c20 77 2d 6c 65 76 65 6c 20 6d 65 6d 6f 72 79 20 61  w-level memory a
22c30 6c 6c 6f 63 61 74 69 6f 6e 20 69 6e 74 65 72 66  llocation interf
22c40 61 63 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  ace */.  sqlite3
22c50 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 6d  _mutex_methods m
22c60 75 74 65 78 3b 20 20 20 20 20 20 2f 2a 20 4c 6f  utex;      /* Lo
22c70 77 2d 6c 65 76 65 6c 20 6d 75 74 65 78 20 69 6e  w-level mutex in
22c80 74 65 72 66 61 63 65 20 2a 2f 0a 20 20 73 71 6c  terface */.  sql
22c90 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
22ca0 6f 64 73 32 20 70 63 61 63 68 65 32 3b 20 20 2f  ods2 pcache2;  /
22cb0 2a 20 4c 6f 77 2d 6c 65 76 65 6c 20 70 61 67 65  * Low-level page
22cc0 2d 63 61 63 68 65 20 69 6e 74 65 72 66 61 63 65  -cache interface
22cd0 20 2a 2f 0a 20 20 76 6f 69 64 20 2a 70 48 65 61   */.  void *pHea
22ce0 70 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  p;              
22cf0 20 20 20 20 20 20 20 20 2f 2a 20 48 65 61 70 20          /* Heap 
22d00 73 74 6f 72 61 67 65 20 73 70 61 63 65 20 2a 2f  storage space */
22d10 0a 20 20 69 6e 74 20 6e 48 65 61 70 3b 20 20 20  .  int nHeap;   
22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22d30 20 20 20 20 20 2f 2a 20 53 69 7a 65 20 6f 66 20       /* Size of 
22d40 70 48 65 61 70 5b 5d 20 2a 2f 0a 20 20 69 6e 74  pHeap[] */.  int
22d50 20 6d 6e 52 65 71 2c 20 6d 78 52 65 71 3b 20 20   mnReq, mxReq;  
22d60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
22d70 2a 20 4d 69 6e 20 61 6e 64 20 6d 61 78 20 68 65  * Min and max he
22d80 61 70 20 72 65 71 75 65 73 74 73 20 73 69 7a 65  ap requests size
22d90 73 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 5f 69  s */.  sqlite3_i
22da0 6e 74 36 34 20 73 7a 4d 6d 61 70 3b 20 20 20 20  nt64 szMmap;    
22db0 20 20 20 20 20 20 20 20 20 2f 2a 20 6d 6d 61 70           /* mmap
22dc0 28 29 20 73 70 61 63 65 20 70 65 72 20 6f 70 65  () space per ope
22dd0 6e 20 66 69 6c 65 20 2a 2f 0a 20 20 73 71 6c 69  n file */.  sqli
22de0 74 65 33 5f 69 6e 74 36 34 20 6d 78 4d 6d 61 70  te3_int64 mxMmap
22df0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
22e00 20 4d 61 78 69 6d 75 6d 20 76 61 6c 75 65 20 66   Maximum value f
22e10 6f 72 20 73 7a 4d 6d 61 70 20 2a 2f 0a 20 20 76  or szMmap */.  v
22e20 6f 69 64 20 2a 70 53 63 72 61 74 63 68 3b 20 20  oid *pScratch;  
22e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22e40 20 2f 2a 20 53 63 72 61 74 63 68 20 6d 65 6d 6f   /* Scratch memo
22e50 72 79 20 2a 2f 0a 20 20 69 6e 74 20 73 7a 53 63  ry */.  int szSc
22e60 72 61 74 63 68 3b 20 20 20 20 20 20 20 20 20 20  ratch;          
22e70 20 20 20 20 20 20 20 20 20 20 2f 2a 20 53 69 7a            /* Siz
22e80 65 20 6f 66 20 65 61 63 68 20 73 63 72 61 74 63  e of each scratc
22e90 68 20 62 75 66 66 65 72 20 2a 2f 0a 20 20 69 6e  h buffer */.  in
22ea0 74 20 6e 53 63 72 61 74 63 68 3b 20 20 20 20 20  t nScratch;     
22eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22ec0 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 73 63 72  /* Number of scr
22ed0 61 74 63 68 20 62 75 66 66 65 72 73 20 2a 2f 0a  atch buffers */.
22ee0 20 20 76 6f 69 64 20 2a 70 50 61 67 65 3b 20 20    void *pPage;  
22ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f00 20 20 20 20 2f 2a 20 50 61 67 65 20 63 61 63 68      /* Page cach
22f10 65 20 6d 65 6d 6f 72 79 20 2a 2f 0a 20 20 69 6e  e memory */.  in
22f20 74 20 73 7a 50 61 67 65 3b 20 20 20 20 20 20 20  t szPage;       
22f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f40 2f 2a 20 53 69 7a 65 20 6f 66 20 65 61 63 68 20  /* Size of each 
22f50 70 61 67 65 20 69 6e 20 70 50 61 67 65 5b 5d 20  page in pPage[] 
22f60 2a 2f 0a 20 20 69 6e 74 20 6e 50 61 67 65 3b 20  */.  int nPage; 
22f70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
22f80 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d 62 65 72         /* Number
22f90 20 6f 66 20 70 61 67 65 73 20 69 6e 20 70 50 61   of pages in pPa
22fa0 67 65 5b 5d 20 2a 2f 0a 20 20 69 6e 74 20 6d 78  ge[] */.  int mx
22fb0 50 61 72 73 65 72 53 74 61 63 6b 3b 20 20 20 20  ParserStack;    
22fc0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
22fd0 61 78 69 6d 75 6d 20 64 65 70 74 68 20 6f 66 20  aximum depth of 
22fe0 74 68 65 20 70 61 72 73 65 72 20 73 74 61 63 6b  the parser stack
22ff0 20 2a 2f 0a 20 20 69 6e 74 20 73 68 61 72 65 64   */.  int shared
23000 43 61 63 68 65 45 6e 61 62 6c 65 64 3b 20 20 20  CacheEnabled;   
23010 20 20 20 20 20 20 20 20 2f 2a 20 74 72 75 65 20          /* true 
23020 69 66 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  if shared-cache 
23030 6d 6f 64 65 20 65 6e 61 62 6c 65 64 20 2a 2f 0a  mode enabled */.
23040 20 20 75 33 32 20 73 7a 50 6d 61 3b 20 20 20 20    u32 szPma;    
23050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23060 20 20 20 20 2f 2a 20 4d 61 78 69 6d 75 6d 20 53      /* Maximum S
23070 6f 72 74 65 72 20 50 4d 41 20 73 69 7a 65 20 2a  orter PMA size *
23080 2f 0a 20 20 2f 2a 20 54 68 65 20 61 62 6f 76 65  /.  /* The above
23090 20 6d 69 67 68 74 20 62 65 20 69 6e 69 74 69 61   might be initia
230a0 6c 69 7a 65 64 20 74 6f 20 6e 6f 6e 2d 7a 65 72  lized to non-zer
230b0 6f 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  o.  The followin
230c0 67 20 6e 65 65 64 20 74 6f 20 61 6c 77 61 79 73  g need to always
230d0 0a 20 20 2a 2a 20 69 6e 69 74 69 61 6c 6c 79 20  .  ** initially 
230e0 62 65 20 7a 65 72 6f 2c 20 68 6f 77 65 76 65 72  be zero, however
230f0 2e 20 2a 2f 0a 20 20 69 6e 74 20 69 73 49 6e 69  . */.  int isIni
23100 74 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  t;              
23110 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65           /* True
23120 20 61 66 74 65 72 20 69 6e 69 74 69 61 6c 69 7a   after initializ
23130 61 74 69 6f 6e 20 68 61 73 20 66 69 6e 69 73 68  ation has finish
23140 65 64 20 2a 2f 0a 20 20 69 6e 74 20 69 6e 50 72  ed */.  int inPr
23150 6f 67 72 65 73 73 3b 20 20 20 20 20 20 20 20 20  ogress;         
23160 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
23170 65 20 77 68 69 6c 65 20 69 6e 69 74 69 61 6c 69  e while initiali
23180 7a 61 74 69 6f 6e 20 69 6e 20 70 72 6f 67 72 65  zation in progre
23190 73 73 20 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 75  ss */.  int isMu
231a0 74 65 78 49 6e 69 74 3b 20 20 20 20 20 20 20 20  texInit;        
231b0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 72 75            /* Tru
231c0 65 20 61 66 74 65 72 20 6d 75 74 65 78 65 73 20  e after mutexes 
231d0 61 72 65 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  are initialized 
231e0 2a 2f 0a 20 20 69 6e 74 20 69 73 4d 61 6c 6c 6f  */.  int isMallo
231f0 63 49 6e 69 74 3b 20 20 20 20 20 20 20 20 20 20  cInit;          
23200 20 20 20 20 20 20 20 2f 2a 20 54 72 75 65 20 61         /* True a
23210 66 74 65 72 20 6d 61 6c 6c 6f 63 20 69 73 20 69  fter malloc is i
23220 6e 69 74 69 61 6c 69 7a 65 64 20 2a 2f 0a 20 20  nitialized */.  
23230 69 6e 74 20 69 73 50 43 61 63 68 65 49 6e 69 74  int isPCacheInit
23240 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
23250 20 20 2f 2a 20 54 72 75 65 20 61 66 74 65 72 20    /* True after 
23260 6d 61 6c 6c 6f 63 20 69 73 20 69 6e 69 74 69 61  malloc is initia
23270 6c 69 7a 65 64 20 2a 2f 0a 20 20 69 6e 74 20 6e  lized */.  int n
23280 52 65 66 49 6e 69 74 4d 75 74 65 78 3b 20 20 20  RefInitMutex;   
23290 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
232a0 4e 75 6d 62 65 72 20 6f 66 20 75 73 65 72 73 20  Number of users 
232b0 6f 66 20 70 49 6e 69 74 4d 75 74 65 78 20 2a 2f  of pInitMutex */
232c0 0a 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  .  sqlite3_mutex
232d0 20 2a 70 49 6e 69 74 4d 75 74 65 78 3b 20 20 20   *pInitMutex;   
232e0 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 75 73       /* Mutex us
232f0 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 69 6e  ed by sqlite3_in
23300 69 74 69 61 6c 69 7a 65 28 29 20 2a 2f 0a 20 20  itialize() */.  
23310 76 6f 69 64 20 28 2a 78 4c 6f 67 29 28 76 6f 69  void (*xLog)(voi
23320 64 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 63 68 61  d*,int,const cha
23330 72 2a 29 3b 20 2f 2a 20 46 75 6e 63 74 69 6f 6e  r*); /* Function
23340 20 66 6f 72 20 6c 6f 67 67 69 6e 67 20 2a 2f 0a   for logging */.
23350 20 20 76 6f 69 64 20 2a 70 4c 6f 67 41 72 67 3b    void *pLogArg;
23360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23370 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
23380 61 72 67 75 6d 65 6e 74 20 74 6f 20 78 4c 6f 67  argument to xLog
23390 28 29 20 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  () */.#ifdef SQL
233a0 49 54 45 5f 45 4e 41 42 4c 45 5f 53 51 4c 4c 4f  ITE_ENABLE_SQLLO
233b0 47 0a 20 20 76 6f 69 64 28 2a 78 53 71 6c 6c 6f  G.  void(*xSqllo
233c0 67 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33  g)(void*,sqlite3
233d0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 69  *,const char*, i
233e0 6e 74 29 3b 0a 20 20 76 6f 69 64 20 2a 70 53 71  nt);.  void *pSq
233f0 6c 6c 6f 67 41 72 67 3b 0a 23 65 6e 64 69 66 0a  llogArg;.#endif.
23400 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 56 44  #ifdef SQLITE_VD
23410 42 45 5f 43 4f 56 45 52 41 47 45 0a 20 20 2f 2a  BE_COVERAGE.  /*
23420 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63   The following c
23430 61 6c 6c 62 61 63 6b 20 28 69 66 20 6e 6f 74 20  allback (if not 
23440 4e 55 4c 4c 29 20 69 73 20 69 6e 76 6f 6b 65 64  NULL) is invoked
23450 20 6f 6e 20 65 76 65 72 79 20 56 44 42 45 20 62   on every VDBE b
23460 72 61 6e 63 68 0a 20 20 2a 2a 20 6f 70 65 72 61  ranch.  ** opera
23470 74 69 6f 6e 2e 20 20 53 65 74 20 74 68 65 20 63  tion.  Set the c
23480 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 53 51  allback using SQ
23490 4c 49 54 45 5f 54 45 53 54 43 54 52 4c 5f 56 44  LITE_TESTCTRL_VD
234a0 42 45 5f 43 4f 56 45 52 41 47 45 2e 0a 20 20 2a  BE_COVERAGE..  *
234b0 2f 0a 20 20 76 6f 69 64 20 28 2a 78 56 64 62 65  /.  void (*xVdbe
234c0 42 72 61 6e 63 68 29 28 76 6f 69 64 2a 2c 69 6e  Branch)(void*,in
234d0 74 20 69 53 72 63 4c 69 6e 65 2c 75 38 20 65 54  t iSrcLine,u8 eT
234e0 68 69 73 2c 75 38 20 65 4d 78 29 3b 20 20 2f 2a  his,u8 eMx);  /*
234f0 20 43 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 76   Callback */.  v
23500 6f 69 64 20 2a 70 56 64 62 65 42 72 61 6e 63 68  oid *pVdbeBranch
23510 41 72 67 3b 20 20 20 20 20 20 20 20 20 20 20 20  Arg;            
23520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23530 20 20 20 20 20 20 20 20 20 2f 2a 20 31 73 74 20           /* 1st 
23540 61 72 67 75 6d 65 6e 74 20 2a 2f 0a 23 65 6e 64  argument */.#end
23550 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
23560 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 20 20 69  E_UNTESTABLE.  i
23570 6e 74 20 28 2a 78 54 65 73 74 43 61 6c 6c 62 61  nt (*xTestCallba
23580 63 6b 29 28 69 6e 74 29 3b 20 20 20 20 20 20 20  ck)(int);       
23590 20 2f 2a 20 49 6e 76 6f 6b 65 64 20 62 79 20 73   /* Invoked by s
235a0 71 6c 69 74 65 33 46 61 75 6c 74 53 69 6d 28 29  qlite3FaultSim()
235b0 20 2a 2f 0a 23 65 6e 64 69 66 0a 20 20 69 6e 74   */.#endif.  int
235c0 20 62 4c 6f 63 61 6c 74 69 6d 65 46 61 75 6c 74   bLocaltimeFault
235d0 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  ;              /
235e0 2a 20 54 72 75 65 20 74 6f 20 66 61 69 6c 20 6c  * True to fail l
235f0 6f 63 61 6c 74 69 6d 65 28 29 20 63 61 6c 6c 73  ocaltime() calls
23600 20 2a 2f 0a 20 20 69 6e 74 20 69 4f 6e 63 65 52   */.  int iOnceR
23610 65 73 65 74 54 68 72 65 73 68 6f 6c 64 3b 20 20  esetThreshold;  
23620 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20          /* When 
23630 74 6f 20 72 65 73 65 74 20 4f 50 5f 4f 6e 63 65  to reset OP_Once
23640 20 63 6f 75 6e 74 65 72 73 20 2a 2f 0a 7d 3b 0a   counters */.};.
23650 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20 6d 61 63 72  ./*.** This macr
23660 6f 20 69 73 20 75 73 65 64 20 69 6e 73 69 64 65  o is used inside
23670 20 6f 66 20 61 73 73 65 72 74 28 29 20 73 74 61   of assert() sta
23680 74 65 6d 65 6e 74 73 20 74 6f 20 69 6e 64 69 63  tements to indic
23690 61 74 65 20 74 68 61 74 0a 2a 2a 20 74 68 65 20  ate that.** the 
236a0 61 73 73 65 72 74 20 69 73 20 6f 6e 6c 79 20 76  assert is only v
236b0 61 6c 69 64 20 6f 6e 20 61 20 77 65 6c 6c 2d 66  alid on a well-f
236c0 6f 72 6d 65 64 20 64 61 74 61 62 61 73 65 2e 20  ormed database. 
236d0 20 49 6e 73 74 65 61 64 20 6f 66 3a 0a 2a 2a 0a   Instead of:.**.
236e0 2a 2a 20 20 20 20 20 61 73 73 65 72 74 28 20 58  **     assert( X
236f0 20 29 3b 0a 2a 2a 0a 2a 2a 20 4f 6e 65 20 77 72   );.**.** One wr
23700 69 74 65 73 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  ites:.**.**     
23710 61 73 73 65 72 74 28 20 58 20 7c 7c 20 43 4f 52  assert( X || COR
23720 52 55 50 54 5f 44 42 20 29 3b 0a 2a 2a 0a 2a 2a  RUPT_DB );.**.**
23730 20 43 4f 52 52 55 50 54 5f 44 42 20 69 73 20 74   CORRUPT_DB is t
23740 72 75 65 20 64 75 72 69 6e 67 20 6e 6f 72 6d 61  rue during norma
23750 6c 20 6f 70 65 72 61 74 69 6f 6e 2e 20 20 43 4f  l operation.  CO
23760 52 52 55 50 54 5f 44 42 20 64 6f 65 73 20 6e 6f  RRUPT_DB does no
23770 74 20 69 6e 64 69 63 61 74 65 0a 2a 2a 20 74 68  t indicate.** th
23780 61 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20  at the database 
23790 69 73 20 64 65 66 69 6e 69 74 65 6c 79 20 63 6f  is definitely co
237a0 72 72 75 70 74 2c 20 6f 6e 6c 79 20 74 68 61 74  rrupt, only that
237b0 20 69 74 20 6d 69 67 68 74 20 62 65 20 63 6f 72   it might be cor
237c0 72 75 70 74 2e 0a 2a 2a 20 46 6f 72 20 6d 6f 73  rupt..** For mos
237d0 74 20 74 65 73 74 20 63 61 73 65 73 2c 20 43 4f  t test cases, CO
237e0 52 52 55 50 54 5f 44 42 20 69 73 20 73 65 74 20  RRUPT_DB is set 
237f0 74 6f 20 66 61 6c 73 65 20 75 73 69 6e 67 20 61  to false using a
23800 20 73 70 65 63 69 61 6c 0a 2a 2a 20 73 71 6c 69   special.** sqli
23810 74 65 33 5f 74 65 73 74 5f 63 6f 6e 74 72 6f 6c  te3_test_control
23820 28 29 2e 20 20 54 68 69 73 20 65 6e 61 62 6c 65  ().  This enable
23830 73 20 61 73 73 65 72 74 28 29 20 73 74 61 74 65  s assert() state
23840 6d 65 6e 74 73 20 74 6f 20 70 72 6f 76 65 0a 2a  ments to prove.*
23850 2a 20 74 68 69 6e 67 73 20 74 68 61 74 20 61 72  * things that ar
23860 65 20 61 6c 77 61 79 73 20 74 72 75 65 20 66 6f  e always true fo
23870 72 20 77 65 6c 6c 2d 66 6f 72 6d 65 64 20 64 61  r well-formed da
23880 74 61 62 61 73 65 73 2e 0a 2a 2f 0a 23 64 65 66  tabases..*/.#def
23890 69 6e 65 20 43 4f 52 52 55 50 54 5f 44 42 20 20  ine CORRUPT_DB  
238a0 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6e  (sqlite3Config.n
238b0 65 76 65 72 43 6f 72 72 75 70 74 3d 3d 30 29 0a  everCorrupt==0).
238c0 0a 2f 2a 0a 2a 2a 20 43 6f 6e 74 65 78 74 20 70  ./*.** Context p
238d0 6f 69 6e 74 65 72 20 70 61 73 73 65 64 20 64 6f  ointer passed do
238e0 77 6e 20 74 68 72 6f 75 67 68 20 74 68 65 20 74  wn through the t
238f0 72 65 65 2d 77 61 6c 6b 2e 0a 2a 2f 0a 73 74 72  ree-walk..*/.str
23900 75 63 74 20 57 61 6c 6b 65 72 20 7b 0a 20 20 50  uct Walker {.  P
23910 61 72 73 65 20 2a 70 50 61 72 73 65 3b 20 20 20  arse *pParse;   
23920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23930 20 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 73           /* Pars
23940 65 72 20 63 6f 6e 74 65 78 74 2e 20 20 2a 2f 0a  er context.  */.
23950 20 20 69 6e 74 20 28 2a 78 45 78 70 72 43 61 6c    int (*xExprCal
23960 6c 62 61 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 20  lback)(Walker*, 
23970 45 78 70 72 2a 29 3b 20 20 20 20 20 2f 2a 20 43  Expr*);     /* C
23980 61 6c 6c 62 61 63 6b 20 66 6f 72 20 65 78 70 72  allback for expr
23990 65 73 73 69 6f 6e 73 20 2a 2f 0a 20 20 69 6e 74  essions */.  int
239a0 20 28 2a 78 53 65 6c 65 63 74 43 61 6c 6c 62 61   (*xSelectCallba
239b0 63 6b 29 28 57 61 6c 6b 65 72 2a 2c 53 65 6c 65  ck)(Walker*,Sele
239c0 63 74 2a 29 3b 20 20 2f 2a 20 43 61 6c 6c 62 61  ct*);  /* Callba
239d0 63 6b 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a  ck for SELECTs *
239e0 2f 0a 20 20 76 6f 69 64 20 28 2a 78 53 65 6c 65  /.  void (*xSele
239f0 63 74 43 61 6c 6c 62 61 63 6b 32 29 28 57 61 6c  ctCallback2)(Wal
23a00 6b 65 72 2a 2c 53 65 6c 65 63 74 2a 29 3b 2f 2a  ker*,Select*);/*
23a10 20 53 65 63 6f 6e 64 20 63 61 6c 6c 62 61 63 6b   Second callback
23a20 20 66 6f 72 20 53 45 4c 45 43 54 73 20 2a 2f 0a   for SELECTs */.
23a30 20 20 69 6e 74 20 77 61 6c 6b 65 72 44 65 70 74    int walkerDept
23a40 68 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  h;              
23a50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e              /* N
23a60 75 6d 62 65 72 20 6f 66 20 73 75 62 71 75 65 72  umber of subquer
23a70 69 65 73 20 2a 2f 0a 20 20 75 38 20 65 43 6f 64  ies */.  u8 eCod
23a80 65 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e;              
23a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23aa0 20 20 20 2f 2a 20 41 20 73 6d 61 6c 6c 20 70 72     /* A small pr
23ab0 6f 63 65 73 73 69 6e 67 20 63 6f 64 65 20 2a 2f  ocessing code */
23ac0 0a 20 20 75 6e 69 6f 6e 20 7b 20 20 20 20 20 20  .  union {      
23ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23af0 45 78 74 72 61 20 64 61 74 61 20 66 6f 72 20 63  Extra data for c
23b00 61 6c 6c 62 61 63 6b 20 2a 2f 0a 20 20 20 20 4e  allback */.    N
23b10 61 6d 65 43 6f 6e 74 65 78 74 20 2a 70 4e 43 3b  ameContext *pNC;
23b20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b30 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 61 6d 69           /* Nami
23b40 6e 67 20 63 6f 6e 74 65 78 74 20 2a 2f 0a 20 20  ng context */.  
23b50 20 20 69 6e 74 20 6e 3b 20 20 20 20 20 20 20 20    int n;        
23b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23b70 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
23b80 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
23b90 69 6e 74 20 69 43 75 72 3b 20 20 20 20 20 20 20  int iCur;       
23ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23bb0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41 20 63            /* A c
23bc0 75 72 73 6f 72 20 6e 75 6d 62 65 72 20 2a 2f 0a  ursor number */.
23bd0 20 20 20 20 53 72 63 4c 69 73 74 20 2a 70 53 72      SrcList *pSr
23be0 63 4c 69 73 74 3b 20 20 20 20 20 20 20 20 20 20  cList;          
23bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23c00 20 46 52 4f 4d 20 63 6c 61 75 73 65 20 2a 2f 0a   FROM clause */.
23c10 20 20 20 20 73 74 72 75 63 74 20 53 72 63 43 6f      struct SrcCo
23c20 75 6e 74 20 2a 70 53 72 63 43 6f 75 6e 74 3b 20  unt *pSrcCount; 
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
23c40 20 43 6f 75 6e 74 69 6e 67 20 63 6f 6c 75 6d 6e   Counting column
23c50 20 72 65 66 65 72 65 6e 63 65 73 20 2a 2f 0a 20   references */. 
23c60 20 20 20 73 74 72 75 63 74 20 43 43 75 72 48 69     struct CCurHi
23c70 6e 74 20 2a 70 43 43 75 72 48 69 6e 74 3b 20 20  nt *pCCurHint;  
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
23c90 55 73 65 64 20 62 79 20 63 6f 64 65 43 75 72 73  Used by codeCurs
23ca0 6f 72 48 69 6e 74 28 29 20 2a 2f 0a 20 20 20 20  orHint() */.    
23cb0 69 6e 74 20 2a 61 69 43 6f 6c 3b 20 20 20 20 20  int *aiCol;     
23cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23cd0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 61 72 72            /* arr
23ce0 61 79 20 6f 66 20 63 6f 6c 75 6d 6e 20 69 6e 64  ay of column ind
23cf0 65 78 65 73 20 2a 2f 0a 20 20 20 20 73 74 72 75  exes */.    stru
23d00 63 74 20 49 64 78 43 6f 76 65 72 20 2a 70 49 64  ct IdxCover *pId
23d10 78 43 6f 76 65 72 3b 20 20 20 20 20 20 20 20 20  xCover;         
23d20 20 20 20 20 20 20 2f 2a 20 43 68 65 63 6b 20 66        /* Check f
23d30 6f 72 20 69 6e 64 65 78 20 63 6f 76 65 72 61 67  or index coverag
23d40 65 20 2a 2f 0a 20 20 20 20 73 74 72 75 63 74 20  e */.    struct 
23d50 49 64 78 45 78 70 72 54 72 61 6e 73 20 2a 70 49  IdxExprTrans *pI
23d60 64 78 54 72 61 6e 73 3b 20 20 20 20 20 20 20 20  dxTrans;        
23d70 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 69 6e     /* Convert in
23d80 64 65 78 65 64 20 65 78 70 72 20 74 6f 20 63 6f  dexed expr to co
23d90 6c 75 6d 6e 20 2a 2f 0a 20 20 20 20 45 78 70 72  lumn */.    Expr
23da0 4c 69 73 74 20 2a 70 47 72 6f 75 70 42 79 3b 20  List *pGroupBy; 
23db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23dc0 20 20 20 20 20 20 2f 2a 20 47 52 4f 55 50 20 42        /* GROUP B
23dd0 59 20 63 6c 61 75 73 65 20 2a 2f 0a 20 20 20 20  Y clause */.    
23de0 73 74 72 75 63 74 20 48 61 76 69 6e 67 54 6f 57  struct HavingToW
23df0 68 65 72 65 43 74 78 20 2a 70 48 61 76 69 6e 67  hereCtx *pHaving
23e00 43 74 78 3b 20 20 20 20 20 20 2f 2a 20 48 41 56  Ctx;      /* HAV
23e10 49 4e 47 20 74 6f 20 57 48 45 52 45 20 63 6c 61  ING to WHERE cla
23e20 75 73 65 20 63 74 78 20 2a 2f 0a 20 20 7d 20 75  use ctx */.  } u
23e30 3b 0a 7d 3b 0a 0a 2f 2a 20 46 6f 72 77 61 72 64  ;.};../* Forward
23e40 20 64 65 63 6c 61 72 61 74 69 6f 6e 73 20 2a 2f   declarations */
23e50 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61 6c 6b  .int sqlite3Walk
23e60 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 45 78  Expr(Walker*, Ex
23e70 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
23e80 33 57 61 6c 6b 45 78 70 72 4c 69 73 74 28 57 61  3WalkExprList(Wa
23e90 6c 6b 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  lker*, ExprList*
23ea0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 61  );.int sqlite3Wa
23eb0 6c 6b 53 65 6c 65 63 74 28 57 61 6c 6b 65 72 2a  lkSelect(Walker*
23ec0 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20  , Select*);.int 
23ed0 73 71 6c 69 74 65 33 57 61 6c 6b 53 65 6c 65 63  sqlite3WalkSelec
23ee0 74 45 78 70 72 28 57 61 6c 6b 65 72 2a 2c 20 53  tExpr(Walker*, S
23ef0 65 6c 65 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  elect*);.int sql
23f00 69 74 65 33 57 61 6c 6b 53 65 6c 65 63 74 46 72  ite3WalkSelectFr
23f10 6f 6d 28 57 61 6c 6b 65 72 2a 2c 20 53 65 6c 65  om(Walker*, Sele
23f20 63 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ct*);.int sqlite
23f30 33 45 78 70 72 57 61 6c 6b 4e 6f 6f 70 28 57 61  3ExprWalkNoop(Wa
23f40 6c 6b 65 72 2a 2c 20 45 78 70 72 2a 29 3b 0a 69  lker*, Expr*);.i
23f50 6e 74 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  nt sqlite3Select
23f60 57 61 6c 6b 4e 6f 6f 70 28 57 61 6c 6b 65 72 2a  WalkNoop(Walker*
23f70 2c 20 53 65 6c 65 63 74 2a 29 3b 0a 23 69 66 64  , Select*);.#ifd
23f80 65 66 20 53 51 4c 49 54 45 5f 44 45 42 55 47 0a  ef SQLITE_DEBUG.
23f90 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65  void sqlite3Sele
23fa0 63 74 57 61 6c 6b 41 73 73 65 72 74 32 28 57 61  ctWalkAssert2(Wa
23fb0 6c 6b 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  lker*, Select*);
23fc0 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 52  .#endif../*.** R
23fd0 65 74 75 72 6e 20 63 6f 64 65 20 66 72 6f 6d 20  eturn code from 
23fe0 74 68 65 20 70 61 72 73 65 2d 74 72 65 65 20 77  the parse-tree w
23ff0 61 6c 6b 69 6e 67 20 70 72 69 6d 69 74 69 76 65  alking primitive
24000 73 20 61 6e 64 20 74 68 65 69 72 0a 2a 2a 20 63  s and their.** c
24010 61 6c 6c 62 61 63 6b 73 2e 0a 2a 2f 0a 23 64 65  allbacks..*/.#de
24020 66 69 6e 65 20 57 52 43 5f 43 6f 6e 74 69 6e 75  fine WRC_Continu
24030 65 20 20 20 20 30 20 20 20 2f 2a 20 43 6f 6e 74  e    0   /* Cont
24040 69 6e 75 65 20 64 6f 77 6e 20 69 6e 74 6f 20 63  inue down into c
24050 68 69 6c 64 72 65 6e 20 2a 2f 0a 23 64 65 66 69  hildren */.#defi
24060 6e 65 20 57 52 43 5f 50 72 75 6e 65 20 20 20 20  ne WRC_Prune    
24070 20 20 20 31 20 20 20 2f 2a 20 4f 6d 69 74 20 63     1   /* Omit c
24080 68 69 6c 64 72 65 6e 20 62 75 74 20 63 6f 6e 74  hildren but cont
24090 69 6e 75 65 20 77 61 6c 6b 69 6e 67 20 73 69 62  inue walking sib
240a0 6c 69 6e 67 73 20 2a 2f 0a 23 64 65 66 69 6e 65  lings */.#define
240b0 20 57 52 43 5f 41 62 6f 72 74 20 20 20 20 20 20   WRC_Abort      
240c0 20 32 20 20 20 2f 2a 20 41 62 61 6e 64 6f 6e 20   2   /* Abandon 
240d0 74 68 65 20 74 72 65 65 20 77 61 6c 6b 20 2a 2f  the tree walk */
240e0 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69 6e 73 74 61  ../*.** An insta
240f0 6e 63 65 20 6f 66 20 74 68 69 73 20 73 74 72 75  nce of this stru
24100 63 74 75 72 65 20 72 65 70 72 65 73 65 6e 74 73  cture represents
24110 20 61 20 73 65 74 20 6f 66 20 6f 6e 65 20 6f 72   a set of one or
24120 20 6d 6f 72 65 20 43 54 45 73 0a 2a 2a 20 28 63   more CTEs.** (c
24130 6f 6d 6d 6f 6e 20 74 61 62 6c 65 20 65 78 70 72  ommon table expr
24140 65 73 73 69 6f 6e 73 29 20 63 72 65 61 74 65 64  essions) created
24150 20 62 79 20 61 20 73 69 6e 67 6c 65 20 57 49 54   by a single WIT
24160 48 20 63 6c 61 75 73 65 2e 0a 2a 2f 0a 73 74 72  H clause..*/.str
24170 75 63 74 20 57 69 74 68 20 7b 0a 20 20 69 6e 74  uct With {.  int
24180 20 6e 43 74 65 3b 20 20 20 20 20 20 20 20 20 20   nCte;          
24190 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
241a0 4e 75 6d 62 65 72 20 6f 66 20 43 54 45 73 20 69  Number of CTEs i
241b0 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
241c0 65 20 2a 2f 0a 20 20 57 69 74 68 20 2a 70 4f 75  e */.  With *pOu
241d0 74 65 72 3b 20 20 20 20 20 20 20 20 20 20 20 20  ter;            
241e0 20 20 20 20 20 20 20 2f 2a 20 43 6f 6e 74 61 69         /* Contai
241f0 6e 69 6e 67 20 57 49 54 48 20 63 6c 61 75 73 65  ning WITH clause
24200 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 73  , or NULL */.  s
24210 74 72 75 63 74 20 43 74 65 20 7b 20 20 20 20 20  truct Cte {     
24220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
24230 2a 20 46 6f 72 20 65 61 63 68 20 43 54 45 20 69  * For each CTE i
24240 6e 20 74 68 65 20 57 49 54 48 20 63 6c 61 75 73  n the WITH claus
24250 65 2e 2e 2e 2e 20 2a 2f 0a 20 20 20 20 63 68 61  e.... */.    cha
24260 72 20 2a 7a 4e 61 6d 65 3b 20 20 20 20 20 20 20  r *zName;       
24270 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
24280 4e 61 6d 65 20 6f 66 20 74 68 69 73 20 43 54 45  Name of this CTE
24290 20 2a 2f 0a 20 20 20 20 45 78 70 72 4c 69 73 74   */.    ExprList
242a0 20 2a 70 43 6f 6c 73 3b 20 20 20 20 20 20 20 20   *pCols;        
242b0 20 20 20 20 20 20 20 20 2f 2a 20 4c 69 73 74 20          /* List 
242c0 6f 66 20 65 78 70 6c 69 63 69 74 20 63 6f 6c 75  of explicit colu
242d0 6d 6e 20 6e 61 6d 65 73 2c 20 6f 72 20 4e 55 4c  mn names, or NUL
242e0 4c 20 2a 2f 0a 20 20 20 20 53 65 6c 65 63 74 20  L */.    Select 
242f0 2a 70 53 65 6c 65 63 74 3b 20 20 20 20 20 20 20  *pSelect;       
24300 20 20 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20           /* The 
24310 64 65 66 69 6e 69 74 69 6f 6e 20 6f 66 20 74 68  definition of th
24320 69 73 20 43 54 45 20 2a 2f 0a 20 20 20 20 63 6f  is CTE */.    co
24330 6e 73 74 20 63 68 61 72 20 2a 7a 43 74 65 45 72  nst char *zCteEr
24340 72 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  r;            /*
24350 20 45 72 72 6f 72 20 6d 65 73 73 61 67 65 20 66   Error message f
24360 6f 72 20 63 69 72 63 75 6c 61 72 20 72 65 66 65  or circular refe
24370 72 65 6e 63 65 73 20 2a 2f 0a 20 20 7d 20 61 5b  rences */.  } a[
24380 31 5d 3b 0a 7d 3b 0a 0a 23 69 66 64 65 66 20 53  1];.};..#ifdef S
24390 51 4c 49 54 45 5f 44 45 42 55 47 0a 2f 2a 0a 2a  QLITE_DEBUG./*.*
243a0 2a 20 41 6e 20 69 6e 73 74 61 6e 63 65 20 6f 66  * An instance of
243b0 20 74 68 65 20 54 72 65 65 56 69 65 77 20 6f 62   the TreeView ob
243c0 6a 65 63 74 20 69 73 20 75 73 65 64 20 66 6f 72  ject is used for
243d0 20 70 72 69 6e 74 69 6e 67 20 74 68 65 20 63 6f   printing the co
243e0 6e 74 65 6e 74 20 6f 66 0a 2a 2a 20 64 61 74 61  ntent of.** data
243f0 20 73 74 72 75 63 74 75 72 65 73 20 6f 6e 20 73   structures on s
24400 71 6c 69 74 65 33 44 65 62 75 67 50 72 69 6e 74  qlite3DebugPrint
24410 66 28 29 20 75 73 69 6e 67 20 61 20 74 72 65 65  f() using a tree
24420 2d 6c 69 6b 65 20 76 69 65 77 2e 0a 2a 2f 0a 73  -like view..*/.s
24430 74 72 75 63 74 20 54 72 65 65 56 69 65 77 20 7b  truct TreeView {
24440 0a 20 20 69 6e 74 20 69 4c 65 76 65 6c 3b 20 20  .  int iLevel;  
24450 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 57 68             /* Wh
24460 69 63 68 20 6c 65 76 65 6c 20 6f 66 20 74 68 65  ich level of the
24470 20 74 72 65 65 20 77 65 20 61 72 65 20 6f 6e 20   tree we are on 
24480 2a 2f 0a 20 20 75 38 20 20 62 4c 69 6e 65 5b 31  */.  u8  bLine[1
24490 30 30 5d 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  00];         /* 
244a0 44 72 61 77 20 76 65 72 74 69 63 61 6c 20 69 6e  Draw vertical in
244b0 20 63 6f 6c 75 6d 6e 20 69 20 69 66 20 62 4c 69   column i if bLi
244c0 6e 65 5b 69 5d 20 69 73 20 74 72 75 65 20 2a 2f  ne[i] is true */
244d0 0a 7d 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .};.#endif /* SQ
244e0 4c 49 54 45 5f 44 45 42 55 47 20 2a 2f 0a 0a 2f  LITE_DEBUG */../
244f0 2a 0a 2a 2a 20 41 73 73 75 6d 69 6e 67 20 7a 49  *.** Assuming zI
24500 6e 20 70 6f 69 6e 74 73 20 74 6f 20 74 68 65 20  n points to the 
24510 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 61 20  first byte of a 
24520 55 54 46 2d 38 20 63 68 61 72 61 63 74 65 72 2c  UTF-8 character,
24530 0a 2a 2a 20 61 64 76 61 6e 63 65 20 7a 49 6e 20  .** advance zIn 
24540 74 6f 20 70 6f 69 6e 74 20 74 6f 20 74 68 65 20  to point to the 
24550 66 69 72 73 74 20 62 79 74 65 20 6f 66 20 74 68  first byte of th
24560 65 20 6e 65 78 74 20 55 54 46 2d 38 20 63 68 61  e next UTF-8 cha
24570 72 61 63 74 65 72 2e 0a 2a 2f 0a 23 64 65 66 69  racter..*/.#defi
24580 6e 65 20 53 51 4c 49 54 45 5f 53 4b 49 50 5f 55  ne SQLITE_SKIP_U
24590 54 46 38 28 7a 49 6e 29 20 7b 20 20 20 20 20 20  TF8(zIn) {      
245a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245b0 20 20 5c 0a 20 20 69 66 28 20 28 2a 28 7a 49 6e    \.  if( (*(zIn
245c0 2b 2b 29 29 3e 3d 30 78 63 30 20 29 7b 20 20 20  ++))>=0xc0 ){   
245d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
245e0 20 20 20 20 20 20 20 20 20 20 20 5c 0a 20 20 20             \.   
245f0 20 77 68 69 6c 65 28 20 28 2a 7a 49 6e 20 26 20   while( (*zIn & 
24600 30 78 63 30 29 3d 3d 30 78 38 30 20 29 7b 20 7a  0xc0)==0x80 ){ z
24610 49 6e 2b 2b 3b 20 7d 20 20 20 20 20 20 20 20 20  In++; }         
24620 20 20 20 20 5c 0a 20 20 7d 20 20 20 20 20 20 20      \.  }       
24630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24650 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 0a 7d               \.}
24660 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 53 51 4c 49  ../*.** The SQLI
24670 54 45 5f 2a 5f 42 4b 50 54 20 6d 61 63 72 6f 73  TE_*_BKPT macros
24680 20 61 72 65 20 73 75 62 73 74 69 74 75 74 65 73   are substitutes
24690 20 66 6f 72 20 74 68 65 20 65 72 72 6f 72 20 63   for the error c
246a0 6f 64 65 73 20 77 69 74 68 0a 2a 2a 20 74 68 65  odes with.** the
246b0 20 73 61 6d 65 20 6e 61 6d 65 20 62 75 74 20 77   same name but w
246c0 69 74 68 6f 75 74 20 74 68 65 20 5f 42 4b 50 54  ithout the _BKPT
246d0 20 73 75 66 66 69 78 2e 20 20 54 68 65 73 65 20   suffix.  These 
246e0 6d 61 63 72 6f 73 20 69 6e 76 6f 6b 65 0a 2a 2a  macros invoke.**
246f0 20 72 6f 75 74 69 6e 65 73 20 74 68 61 74 20 72   routines that r
24700 65 70 6f 72 74 20 74 68 65 20 6c 69 6e 65 2d 6e  eport the line-n
24710 75 6d 62 65 72 20 6f 6e 20 77 68 69 63 68 20 74  umber on which t
24720 68 65 20 65 72 72 6f 72 20 6f 72 69 67 69 6e 61  he error origina
24730 74 65 64 0a 2a 2a 20 75 73 69 6e 67 20 73 71 6c  ted.** using sql
24740 69 74 65 33 5f 6c 6f 67 28 29 2e 20 20 54 68 65  ite3_log().  The
24750 20 72 6f 75 74 69 6e 65 73 20 61 6c 73 6f 20 70   routines also p
24760 72 6f 76 69 64 65 20 61 20 63 6f 6e 76 65 6e 69  rovide a conveni
24770 65 6e 74 20 70 6c 61 63 65 0a 2a 2a 20 74 6f 20  ent place.** to 
24780 73 65 74 20 61 20 64 65 62 75 67 67 65 72 20 62  set a debugger b
24790 72 65 61 6b 70 6f 69 6e 74 2e 0a 2a 2f 0a 69 6e  reakpoint..*/.in
247a0 74 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74  t sqlite3Corrupt
247b0 45 72 72 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20  Error(int);.int 
247c0 73 71 6c 69 74 65 33 4d 69 73 75 73 65 45 72 72  sqlite3MisuseErr
247d0 6f 72 28 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c  or(int);.int sql
247e0 69 74 65 33 43 61 6e 74 6f 70 65 6e 45 72 72 6f  ite3CantopenErro
247f0 72 28 69 6e 74 29 3b 0a 23 64 65 66 69 6e 65 20  r(int);.#define 
24800 53 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 42  SQLITE_CORRUPT_B
24810 4b 50 54 20 73 71 6c 69 74 65 33 43 6f 72 72 75  KPT sqlite3Corru
24820 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f  ptError(__LINE__
24830 29 0a 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45  ).#define SQLITE
24840 5f 4d 49 53 55 53 45 5f 42 4b 50 54 20 73 71 6c  _MISUSE_BKPT sql
24850 69 74 65 33 4d 69 73 75 73 65 45 72 72 6f 72 28  ite3MisuseError(
24860 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 64 65 66 69 6e  __LINE__).#defin
24870 65 20 53 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45  e SQLITE_CANTOPE
24880 4e 5f 42 4b 50 54 20 73 71 6c 69 74 65 33 43 61  N_BKPT sqlite3Ca
24890 6e 74 6f 70 65 6e 45 72 72 6f 72 28 5f 5f 4c 49  ntopenError(__LI
248a0 4e 45 5f 5f 29 0a 23 69 66 64 65 66 20 53 51 4c  NE__).#ifdef SQL
248b0 49 54 45 5f 44 45 42 55 47 0a 20 20 69 6e 74 20  ITE_DEBUG.  int 
248c0 73 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f  sqlite3NomemErro
248d0 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71  r(int);.  int sq
248e0 6c 69 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45  lite3IoerrnomemE
248f0 72 72 6f 72 28 69 6e 74 29 3b 0a 20 20 69 6e 74  rror(int);.  int
24900 20 73 71 6c 69 74 65 33 43 6f 72 72 75 70 74 50   sqlite3CorruptP
24910 67 6e 6f 45 72 72 6f 72 28 69 6e 74 2c 50 67 6e  gnoError(int,Pgn
24920 6f 29 3b 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  o);.# define SQL
24930 49 54 45 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73  ITE_NOMEM_BKPT s
24940 71 6c 69 74 65 33 4e 6f 6d 65 6d 45 72 72 6f 72  qlite3NomemError
24950 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64 65 66  (__LINE__).# def
24960 69 6e 65 20 53 51 4c 49 54 45 5f 49 4f 45 52 52  ine SQLITE_IOERR
24970 5f 4e 4f 4d 45 4d 5f 42 4b 50 54 20 73 71 6c 69  _NOMEM_BKPT sqli
24980 74 65 33 49 6f 65 72 72 6e 6f 6d 65 6d 45 72 72  te3IoerrnomemErr
24990 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 29 0a 23 20 64  or(__LINE__).# d
249a0 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 43 4f 52  efine SQLITE_COR
249b0 52 55 50 54 5f 50 47 4e 4f 28 50 29 20 73 71 6c  RUPT_PGNO(P) sql
249c0 69 74 65 33 43 6f 72 72 75 70 74 50 67 6e 6f 45  ite3CorruptPgnoE
249d0 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f 5f 2c 28 50  rror(__LINE__,(P
249e0 29 29 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  )).#else.# defin
249f0 65 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 5f 42  e SQLITE_NOMEM_B
24a00 4b 50 54 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d  KPT SQLITE_NOMEM
24a10 0a 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45  .# define SQLITE
24a20 5f 49 4f 45 52 52 5f 4e 4f 4d 45 4d 5f 42 4b 50  _IOERR_NOMEM_BKP
24a30 54 20 53 51 4c 49 54 45 5f 49 4f 45 52 52 5f 4e  T SQLITE_IOERR_N
24a40 4f 4d 45 4d 0a 23 20 64 65 66 69 6e 65 20 53 51  OMEM.# define SQ
24a50 4c 49 54 45 5f 43 4f 52 52 55 50 54 5f 50 47 4e  LITE_CORRUPT_PGN
24a60 4f 28 50 29 20 73 71 6c 69 74 65 33 43 6f 72 72  O(P) sqlite3Corr
24a70 75 70 74 45 72 72 6f 72 28 5f 5f 4c 49 4e 45 5f  uptError(__LINE_
24a80 5f 29 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a  _).#endif../*.**
24a90 20 46 54 53 33 20 61 6e 64 20 46 54 53 34 20 62   FTS3 and FTS4 b
24aa0 6f 74 68 20 72 65 71 75 69 72 65 20 76 69 72 74  oth require virt
24ab0 75 61 6c 20 74 61 62 6c 65 20 73 75 70 70 6f 72  ual table suppor
24ac0 74 0a 2a 2f 0a 23 69 66 20 64 65 66 69 6e 65 64  t.*/.#if defined
24ad0 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56 49 52  (SQLITE_OMIT_VIR
24ae0 54 55 41 4c 54 41 42 4c 45 29 0a 23 20 75 6e 64  TUALTABLE).# und
24af0 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
24b00 5f 46 54 53 33 0a 23 20 75 6e 64 65 66 20 53 51  _FTS3.# undef SQ
24b10 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34  LITE_ENABLE_FTS4
24b20 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 46  .#endif../*.** F
24b30 54 53 34 20 69 73 20 72 65 61 6c 6c 79 20 61 6e  TS4 is really an
24b40 20 65 78 74 65 6e 73 69 6f 6e 20 66 6f 72 20 46   extension for F
24b50 54 53 33 2e 20 20 49 74 20 69 73 20 65 6e 61 62  TS3.  It is enab
24b60 6c 65 64 20 75 73 69 6e 67 20 74 68 65 0a 2a 2a  led using the.**
24b70 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 46   SQLITE_ENABLE_F
24b80 54 53 33 20 6d 61 63 72 6f 2e 20 20 42 75 74 20  TS3 macro.  But 
24b90 74 6f 20 61 76 6f 69 64 20 63 6f 6e 66 75 73 69  to avoid confusi
24ba0 6f 6e 20 77 65 20 61 6c 73 6f 20 63 61 6c 6c 0a  on we also call.
24bb0 2a 2a 20 74 68 65 20 53 51 4c 49 54 45 5f 45 4e  ** the SQLITE_EN
24bc0 41 42 4c 45 5f 46 54 53 34 20 6d 61 63 72 6f 20  ABLE_FTS4 macro 
24bd0 74 6f 20 73 65 72 76 65 20 61 73 20 61 6e 20 61  to serve as an a
24be0 6c 69 61 73 20 66 6f 72 20 53 51 4c 49 54 45 5f  lias for SQLITE_
24bf0 45 4e 41 42 4c 45 5f 46 54 53 33 2e 0a 2a 2f 0a  ENABLE_FTS3..*/.
24c00 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
24c10 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 34 29 20  TE_ENABLE_FTS4) 
24c20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
24c30 54 45 5f 45 4e 41 42 4c 45 5f 46 54 53 33 29 0a  TE_ENABLE_FTS3).
24c40 23 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f  # define SQLITE_
24c50 45 4e 41 42 4c 45 5f 46 54 53 33 20 31 0a 23 65  ENABLE_FTS3 1.#e
24c60 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20  ndif../*.** The 
24c70 63 74 79 70 65 2e 68 20 68 65 61 64 65 72 20 69  ctype.h header i
24c80 73 20 6e 65 65 64 65 64 20 66 6f 72 20 6e 6f 6e  s needed for non
24c90 2d 41 53 43 49 49 20 73 79 73 74 65 6d 73 2e 20  -ASCII systems. 
24ca0 20 49 74 20 69 73 20 61 6c 73 6f 0a 2a 2a 20 6e   It is also.** n
24cb0 65 65 64 65 64 20 62 79 20 46 54 53 33 20 77 68  eeded by FTS3 wh
24cc0 65 6e 20 46 54 53 33 20 69 73 20 69 6e 63 6c 75  en FTS3 is inclu
24cd0 64 65 64 20 69 6e 20 74 68 65 20 61 6d 61 6c 67  ded in the amalg
24ce0 61 6d 61 74 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 20  amation..*/.#if 
24cf0 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
24d00 41 53 43 49 49 29 20 7c 7c 20 5c 0a 20 20 20 20  ASCII) || \.    
24d10 28 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  (defined(SQLITE_
24d20 45 4e 41 42 4c 45 5f 46 54 53 33 29 20 26 26 20  ENABLE_FTS3) && 
24d30 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 41  defined(SQLITE_A
24d40 4d 41 4c 47 41 4d 41 54 49 4f 4e 29 29 0a 23 20  MALGAMATION)).# 
24d50 69 6e 63 6c 75 64 65 20 3c 63 74 79 70 65 2e 68  include <ctype.h
24d60 3e 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20  >.#endif../*.** 
24d70 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 6d 61  The following ma
24d80 63 72 6f 73 20 6d 69 6d 69 63 20 74 68 65 20 73  cros mimic the s
24d90 74 61 6e 64 61 72 64 20 6c 69 62 72 61 72 79 20  tandard library 
24da0 66 75 6e 63 74 69 6f 6e 73 20 74 6f 75 70 70 65  functions touppe
24db0 72 28 29 2c 0a 2a 2a 20 69 73 73 70 61 63 65 28  r(),.** isspace(
24dc0 29 2c 20 69 73 61 6c 6e 75 6d 28 29 2c 20 69 73  ), isalnum(), is
24dd0 64 69 67 69 74 28 29 20 61 6e 64 20 69 73 78 64  digit() and isxd
24de0 69 67 69 74 28 29 2c 20 72 65 73 70 65 63 74 69  igit(), respecti
24df0 76 65 6c 79 2e 20 54 68 65 0a 2a 2a 20 73 71 6c  vely. The.** sql
24e00 69 74 65 20 76 65 72 73 69 6f 6e 73 20 6f 6e 6c  ite versions onl
24e10 79 20 77 6f 72 6b 20 66 6f 72 20 41 53 43 49 49  y work for ASCII
24e20 20 63 68 61 72 61 63 74 65 72 73 2c 20 72 65 67   characters, reg
24e30 61 72 64 6c 65 73 73 20 6f 66 20 6c 6f 63 61 6c  ardless of local
24e40 65 2e 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c  e..*/.#ifdef SQL
24e50 49 54 45 5f 41 53 43 49 49 0a 23 20 64 65 66 69  ITE_ASCII.# defi
24e60 6e 65 20 73 71 6c 69 74 65 33 54 6f 75 70 70 65  ne sqlite3Touppe
24e70 72 28 78 29 20 20 28 28 78 29 26 7e 28 73 71 6c  r(x)  ((x)&~(sql
24e80 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75 6e  ite3CtypeMap[(un
24e90 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 5d  signed char)(x)]
24ea0 26 30 78 32 30 29 29 0a 23 20 64 65 66 69 6e 65  &0x20)).# define
24eb0 20 73 71 6c 69 74 65 33 49 73 73 70 61 63 65 28   sqlite3Isspace(
24ec0 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
24ed0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
24ee0 63 68 61 72 29 28 78 29 5d 26 30 78 30 31 29 0a  char)(x)]&0x01).
24ef0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24f00 49 73 61 6c 6e 75 6d 28 78 29 20 20 20 28 73 71  Isalnum(x)   (sq
24f10 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
24f20 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24f30 5d 26 30 78 30 36 29 0a 23 20 64 65 66 69 6e 65  ]&0x06).# define
24f40 20 73 71 6c 69 74 65 33 49 73 61 6c 70 68 61 28   sqlite3Isalpha(
24f50 78 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79  x)   (sqlite3Cty
24f60 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
24f70 63 68 61 72 29 28 78 29 5d 26 30 78 30 32 29 0a  char)(x)]&0x02).
24f80 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
24f90 49 73 64 69 67 69 74 28 78 29 20 20 20 28 73 71  Isdigit(x)   (sq
24fa0 6c 69 74 65 33 43 74 79 70 65 4d 61 70 5b 28 75  lite3CtypeMap[(u
24fb0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
24fc0 5d 26 30 78 30 34 29 0a 23 20 64 65 66 69 6e 65  ]&0x04).# define
24fd0 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69 74   sqlite3Isxdigit
24fe0 28 78 29 20 20 28 73 71 6c 69 74 65 33 43 74 79  (x)  (sqlite3Cty
24ff0 70 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20  peMap[(unsigned 
25000 63 68 61 72 29 28 78 29 5d 26 30 78 30 38 29 0a  char)(x)]&0x08).
25010 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25020 54 6f 6c 6f 77 65 72 28 78 29 20 20 20 28 73 71  Tolower(x)   (sq
25030 6c 69 74 65 33 55 70 70 65 72 54 6f 4c 6f 77 65  lite3UpperToLowe
25040 72 5b 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  r[(unsigned char
25050 29 28 78 29 5d 29 0a 23 20 64 65 66 69 6e 65 20  )(x)]).# define 
25060 73 71 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78  sqlite3Isquote(x
25070 29 20 20 20 28 73 71 6c 69 74 65 33 43 74 79 70  )   (sqlite3Ctyp
25080 65 4d 61 70 5b 28 75 6e 73 69 67 6e 65 64 20 63  eMap[(unsigned c
25090 68 61 72 29 28 78 29 5d 26 30 78 38 30 29 0a 23  har)(x)]&0x80).#
250a0 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
250b0 6c 69 74 65 33 54 6f 75 70 70 65 72 28 78 29 20  lite3Toupper(x) 
250c0 20 20 74 6f 75 70 70 65 72 28 28 75 6e 73 69 67    toupper((unsig
250d0 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a 23 20  ned char)(x)).# 
250e0 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 49 73  define sqlite3Is
250f0 73 70 61 63 65 28 78 29 20 20 20 69 73 73 70 61  space(x)   isspa
25100 63 65 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61  ce((unsigned cha
25110 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20  r)(x)).# define 
25120 73 71 6c 69 74 65 33 49 73 61 6c 6e 75 6d 28 78  sqlite3Isalnum(x
25130 29 20 20 20 69 73 61 6c 6e 75 6d 28 28 75 6e 73  )   isalnum((uns
25140 69 67 6e 65 64 20 63 68 61 72 29 28 78 29 29 0a  igned char)(x)).
25150 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
25160 49 73 61 6c 70 68 61 28 78 29 20 20 20 69 73 61  Isalpha(x)   isa
25170 6c 70 68 61 28 28 75 6e 73 69 67 6e 65 64 20 63  lpha((unsigned c
25180 68 61 72 29 28 78 29 29 0a 23 20 64 65 66 69 6e  har)(x)).# defin
25190 65 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  e sqlite3Isdigit
251a0 28 78 29 20 20 20 69 73 64 69 67 69 74 28 28 75  (x)   isdigit((u
251b0 6e 73 69 67 6e 65 64 20 63 68 61 72 29 28 78 29  nsigned char)(x)
251c0 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  ).# define sqlit
251d0 65 33 49 73 78 64 69 67 69 74 28 78 29 20 20 69  e3Isxdigit(x)  i
251e0 73 78 64 69 67 69 74 28 28 75 6e 73 69 67 6e 65  sxdigit((unsigne
251f0 64 20 63 68 61 72 29 28 78 29 29 0a 23 20 64 65  d char)(x)).# de
25200 66 69 6e 65 20 73 71 6c 69 74 65 33 54 6f 6c 6f  fine sqlite3Tolo
25210 77 65 72 28 78 29 20 20 20 74 6f 6c 6f 77 65 72  wer(x)   tolower
25220 28 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72 29  ((unsigned char)
25230 28 78 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71  (x)).# define sq
25240 6c 69 74 65 33 49 73 71 75 6f 74 65 28 78 29 20  lite3Isquote(x) 
25250 20 20 28 28 78 29 3d 3d 27 22 27 7c 7c 28 78 29    ((x)=='"'||(x)
25260 3d 3d 27 5c 27 27 7c 7c 28 78 29 3d 3d 27 5b 27  =='\''||(x)=='['
25270 7c 7c 28 78 29 3d 3d 27 60 27 29 0a 23 65 6e 64  ||(x)=='`').#end
25280 69 66 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  if.#ifndef SQLIT
25290 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
252a0 54 49 4f 4e 5f 44 49 41 47 53 0a 69 6e 74 20 73  TION_DIAGS.int s
252b0 71 6c 69 74 65 33 49 73 49 64 43 68 61 72 28 75  qlite3IsIdChar(u
252c0 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a  8);.#endif../*.*
252d0 2a 20 49 6e 74 65 72 6e 61 6c 20 66 75 6e 63 74  * Internal funct
252e0 69 6f 6e 20 70 72 6f 74 6f 74 79 70 65 73 0a 2a  ion prototypes.*
252f0 2f 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 74 72  /.int sqlite3Str
25300 49 43 6d 70 28 63 6f 6e 73 74 20 63 68 61 72 2a  ICmp(const char*
25310 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  ,const char*);.i
25320 6e 74 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  nt sqlite3Strlen
25330 33 30 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  30(const char*);
25340 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 43 6f  .char *sqlite3Co
25350 6c 75 6d 6e 54 79 70 65 28 43 6f 6c 75 6d 6e 2a  lumnType(Column*
25360 2c 63 68 61 72 2a 29 3b 0a 23 64 65 66 69 6e 65  ,char*);.#define
25370 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
25380 20 73 71 6c 69 74 65 33 5f 73 74 72 6e 69 63 6d   sqlite3_strnicm
25390 70 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 61  p..int sqlite3Ma
253a0 6c 6c 6f 63 49 6e 69 74 28 76 6f 69 64 29 3b 0a  llocInit(void);.
253b0 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 61 6c 6c  void sqlite3Mall
253c0 6f 63 45 6e 64 28 76 6f 69 64 29 3b 0a 76 6f 69  ocEnd(void);.voi
253d0 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63  d *sqlite3Malloc
253e0 28 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c  (u64);.void *sql
253f0 69 74 65 33 4d 61 6c 6c 6f 63 5a 65 72 6f 28 75  ite3MallocZero(u
25400 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
25410 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28 73  e3DbMallocZero(s
25420 71 6c 69 74 65 33 2a 2c 20 75 36 34 29 3b 0a 76  qlite3*, u64);.v
25430 6f 69 64 20 2a 73 71 6c 69 74 65 33 44 62 4d 61  oid *sqlite3DbMa
25440 6c 6c 6f 63 52 61 77 28 73 71 6c 69 74 65 33 2a  llocRaw(sqlite3*
25450 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71  , u64);.void *sq
25460 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
25470 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 75 36 34  NN(sqlite3*, u64
25480 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
25490 44 62 53 74 72 44 75 70 28 73 71 6c 69 74 65 33  DbStrDup(sqlite3
254a0 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  *,const char*);.
254b0 63 68 61 72 20 2a 73 71 6c 69 74 65 33 44 62 53  char *sqlite3DbS
254c0 74 72 4e 44 75 70 28 73 71 6c 69 74 65 33 2a 2c  trNDup(sqlite3*,
254d0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 75 36 34  const char*, u64
254e0 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  );.void *sqlite3
254f0 52 65 61 6c 6c 6f 63 28 76 6f 69 64 2a 2c 20 75  Realloc(void*, u
25500 36 34 29 3b 0a 76 6f 69 64 20 2a 73 71 6c 69 74  64);.void *sqlit
25510 65 33 44 62 52 65 61 6c 6c 6f 63 4f 72 46 72 65  e3DbReallocOrFre
25520 65 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  e(sqlite3 *, voi
25530 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
25540 2a 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f  *sqlite3DbReallo
25550 63 28 73 71 6c 69 74 65 33 20 2a 2c 20 76 6f 69  c(sqlite3 *, voi
25560 64 20 2a 2c 20 75 36 34 29 3b 0a 76 6f 69 64 20  d *, u64);.void 
25570 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 73 71  sqlite3DbFree(sq
25580 6c 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a  lite3*, void*);.
25590 76 6f 69 64 20 73 71 6c 69 74 65 33 44 62 46 72  void sqlite3DbFr
255a0 65 65 4e 4e 28 73 71 6c 69 74 65 33 2a 2c 20 76  eeNN(sqlite3*, v
255b0 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  oid*);.int sqlit
255c0 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 76 6f 69  e3MallocSize(voi
255d0 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  d*);.int sqlite3
255e0 44 62 4d 61 6c 6c 6f 63 53 69 7a 65 28 73 71 6c  DbMallocSize(sql
255f0 69 74 65 33 2a 2c 20 76 6f 69 64 2a 29 3b 0a 76  ite3*, void*);.v
25600 6f 69 64 20 2a 73 71 6c 69 74 65 33 53 63 72 61  oid *sqlite3Scra
25610 74 63 68 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a  tchMalloc(int);.
25620 76 6f 69 64 20 73 71 6c 69 74 65 33 53 63 72 61  void sqlite3Scra
25630 74 63 68 46 72 65 65 28 76 6f 69 64 2a 29 3b 0a  tchFree(void*);.
25640 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 50 61 67  void *sqlite3Pag
25650 65 4d 61 6c 6c 6f 63 28 69 6e 74 29 3b 0a 76 6f  eMalloc(int);.vo
25660 69 64 20 73 71 6c 69 74 65 33 50 61 67 65 46 72  id sqlite3PageFr
25670 65 65 28 76 6f 69 64 2a 29 3b 0a 76 6f 69 64 20  ee(void*);.void 
25680 73 71 6c 69 74 65 33 4d 65 6d 53 65 74 44 65 66  sqlite3MemSetDef
25690 61 75 6c 74 28 76 6f 69 64 29 3b 0a 23 69 66 6e  ault(void);.#ifn
256a0 64 65 66 20 53 51 4c 49 54 45 5f 55 4e 54 45 53  def SQLITE_UNTES
256b0 54 41 42 4c 45 0a 76 6f 69 64 20 73 71 6c 69 74  TABLE.void sqlit
256c0 65 33 42 65 6e 69 67 6e 4d 61 6c 6c 6f 63 48 6f  e3BenignMallocHo
256d0 6f 6b 73 28 76 6f 69 64 20 28 2a 29 28 76 6f 69  oks(void (*)(voi
256e0 64 29 2c 20 76 6f 69 64 20 28 2a 29 28 76 6f 69  d), void (*)(voi
256f0 64 29 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20  d));.#endif.int 
25700 73 71 6c 69 74 65 33 48 65 61 70 4e 65 61 72 6c  sqlite3HeapNearl
25710 79 46 75 6c 6c 28 76 6f 69 64 29 3b 0a 0a 2f 2a  yFull(void);../*
25720 0a 2a 2a 20 4f 6e 20 73 79 73 74 65 6d 73 20 77  .** On systems w
25730 69 74 68 20 61 6d 70 6c 65 20 73 74 61 63 6b 20  ith ample stack 
25740 73 70 61 63 65 20 61 6e 64 20 74 68 61 74 20 73  space and that s
25750 75 70 70 6f 72 74 20 61 6c 6c 6f 63 61 28 29 2c  upport alloca(),
25760 20 6d 61 6b 65 0a 2a 2a 20 75 73 65 20 6f 66 20   make.** use of 
25770 61 6c 6c 6f 63 61 28 29 20 74 6f 20 6f 62 74 61  alloca() to obta
25780 69 6e 20 73 70 61 63 65 20 66 6f 72 20 6c 61 72  in space for lar
25790 67 65 20 61 75 74 6f 6d 61 74 69 63 20 6f 62 6a  ge automatic obj
257a0 65 63 74 73 2e 20 20 42 79 20 64 65 66 61 75 6c  ects.  By defaul
257b0 74 2c 0a 2a 2a 20 6f 62 74 61 69 6e 20 73 70 61  t,.** obtain spa
257c0 63 65 20 66 72 6f 6d 20 6d 61 6c 6c 6f 63 28 29  ce from malloc()
257d0 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 6c 6c 6f  ..**.** The allo
257e0 63 61 28 29 20 72 6f 75 74 69 6e 65 20 6e 65 76  ca() routine nev
257f0 65 72 20 72 65 74 75 72 6e 73 20 4e 55 4c 4c 2e  er returns NULL.
25800 20 20 54 68 69 73 20 77 69 6c 6c 20 63 61 75 73    This will caus
25810 65 20 63 6f 64 65 20 70 61 74 68 73 0a 2a 2a 20  e code paths.** 
25820 74 68 61 74 20 64 65 61 6c 20 77 69 74 68 20 73  that deal with s
25830 71 6c 69 74 65 33 53 74 61 63 6b 41 6c 6c 6f 63  qlite3StackAlloc
25840 28 29 20 66 61 69 6c 75 72 65 73 20 74 6f 20 62  () failures to b
25850 65 20 75 6e 72 65 61 63 68 61 62 6c 65 2e 0a 2a  e unreachable..*
25860 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  /.#ifdef SQLITE_
25870 55 53 45 5f 41 4c 4c 4f 43 41 0a 23 20 64 65 66  USE_ALLOCA.# def
25880 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b  ine sqlite3Stack
25890 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20 20  AllocRaw(D,N)   
258a0 61 6c 6c 6f 63 61 28 4e 29 0a 23 20 64 65 66 69  alloca(N).# defi
258b0 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41  ne sqlite3StackA
258c0 6c 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 6d  llocZero(D,N)  m
258d0 65 6d 73 65 74 28 61 6c 6c 6f 63 61 28 4e 29 2c  emset(alloca(N),
258e0 20 30 2c 20 4e 29 0a 23 20 64 65 66 69 6e 65 20   0, N).# define 
258f0 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
25900 28 44 2c 50 29 0a 23 65 6c 73 65 0a 23 20 64 65  (D,P).#else.# de
25910 66 69 6e 65 20 73 71 6c 69 74 65 33 53 74 61 63  fine sqlite3Stac
25920 6b 41 6c 6c 6f 63 52 61 77 28 44 2c 4e 29 20 20  kAllocRaw(D,N)  
25930 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
25940 52 61 77 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e  Raw(D,N).# defin
25950 65 20 73 71 6c 69 74 65 33 53 74 61 63 6b 41 6c  e sqlite3StackAl
25960 6c 6f 63 5a 65 72 6f 28 44 2c 4e 29 20 20 73 71  locZero(D,N)  sq
25970 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72  lite3DbMallocZer
25980 6f 28 44 2c 4e 29 0a 23 20 64 65 66 69 6e 65 20  o(D,N).# define 
25990 73 71 6c 69 74 65 33 53 74 61 63 6b 46 72 65 65  sqlite3StackFree
259a0 28 44 2c 50 29 20 20 20 20 20 20 20 73 71 6c 69  (D,P)       sqli
259b0 74 65 33 44 62 46 72 65 65 28 44 2c 50 29 0a 23  te3DbFree(D,P).#
259c0 65 6e 64 69 66 0a 0a 2f 2a 20 44 6f 20 6e 6f 74  endif../* Do not
259d0 20 61 6c 6c 6f 77 20 62 6f 74 68 20 4d 45 4d 53   allow both MEMS
259e0 59 53 35 20 61 6e 64 20 4d 45 4d 53 59 53 33 20  YS5 and MEMSYS3 
259f0 74 6f 20 62 65 20 64 65 66 69 6e 65 64 20 74 6f  to be defined to
25a00 67 65 74 68 65 72 2e 20 20 49 66 20 74 68 65 79  gether.  If they
25a10 0a 2a 2a 20 61 72 65 2c 20 64 69 73 61 62 6c 65  .** are, disable
25a20 20 4d 45 4d 53 59 53 33 0a 2a 2f 0a 23 69 66 64   MEMSYS3.*/.#ifd
25a30 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
25a40 5f 4d 45 4d 53 59 53 35 0a 63 6f 6e 73 74 20 73  _MEMSYS5.const s
25a50 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f  qlite3_mem_metho
25a60 64 73 20 2a 73 71 6c 69 74 65 33 4d 65 6d 47 65  ds *sqlite3MemGe
25a70 74 4d 65 6d 73 79 73 35 28 76 6f 69 64 29 3b 0a  tMemsys5(void);.
25a80 23 75 6e 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #undef SQLITE_EN
25a90 41 42 4c 45 5f 4d 45 4d 53 59 53 33 0a 23 65 6e  ABLE_MEMSYS3.#en
25aa0 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54  dif.#ifdef SQLIT
25ab0 45 5f 45 4e 41 42 4c 45 5f 4d 45 4d 53 59 53 33  E_ENABLE_MEMSYS3
25ac0 0a 63 6f 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d  .const sqlite3_m
25ad0 65 6d 5f 6d 65 74 68 6f 64 73 20 2a 73 71 6c 69  em_methods *sqli
25ae0 74 65 33 4d 65 6d 47 65 74 4d 65 6d 73 79 73 33  te3MemGetMemsys3
25af0 28 76 6f 69 64 29 3b 0a 23 65 6e 64 69 66 0a 0a  (void);.#endif..
25b00 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
25b10 4d 55 54 45 58 5f 4f 4d 49 54 0a 20 20 73 71 6c  MUTEX_OMIT.  sql
25b20 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f  ite3_mutex_metho
25b30 64 73 20 63 6f 6e 73 74 20 2a 73 71 6c 69 74 65  ds const *sqlite
25b40 33 44 65 66 61 75 6c 74 4d 75 74 65 78 28 76 6f  3DefaultMutex(vo
25b50 69 64 29 3b 0a 20 20 73 71 6c 69 74 65 33 5f 6d  id);.  sqlite3_m
25b60 75 74 65 78 5f 6d 65 74 68 6f 64 73 20 63 6f 6e  utex_methods con
25b70 73 74 20 2a 73 71 6c 69 74 65 33 4e 6f 6f 70 4d  st *sqlite3NoopM
25b80 75 74 65 78 28 76 6f 69 64 29 3b 0a 20 20 73 71  utex(void);.  sq
25b90 6c 69 74 65 33 5f 6d 75 74 65 78 20 2a 73 71 6c  lite3_mutex *sql
25ba0 69 74 65 33 4d 75 74 65 78 41 6c 6c 6f 63 28 69  ite3MutexAlloc(i
25bb0 6e 74 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  nt);.  int sqlit
25bc0 65 33 4d 75 74 65 78 49 6e 69 74 28 76 6f 69 64  e3MutexInit(void
25bd0 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33  );.  int sqlite3
25be0 4d 75 74 65 78 45 6e 64 28 76 6f 69 64 29 3b 0a  MutexEnd(void);.
25bf0 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
25c00 6e 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  ned(SQLITE_MUTEX
25c10 5f 4f 4d 49 54 29 20 26 26 20 21 64 65 66 69 6e  _OMIT) && !defin
25c20 65 64 28 53 51 4c 49 54 45 5f 4d 55 54 45 58 5f  ed(SQLITE_MUTEX_
25c30 4e 4f 4f 50 29 0a 20 20 76 6f 69 64 20 73 71 6c  NOOP).  void sql
25c40 69 74 65 33 4d 65 6d 6f 72 79 42 61 72 72 69 65  ite3MemoryBarrie
25c50 72 28 76 6f 69 64 29 3b 0a 23 65 6c 73 65 0a 23  r(void);.#else.#
25c60 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d   define sqlite3M
25c70 65 6d 6f 72 79 42 61 72 72 69 65 72 28 29 0a 23  emoryBarrier().#
25c80 65 6e 64 69 66 0a 0a 73 71 6c 69 74 65 33 5f 69  endif..sqlite3_i
25c90 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 61 74  nt64 sqlite3Stat
25ca0 75 73 56 61 6c 75 65 28 69 6e 74 29 3b 0a 76 6f  usValue(int);.vo
25cb0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
25cc0 55 70 28 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  Up(int, int);.vo
25cd0 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 75 73  id sqlite3Status
25ce0 44 6f 77 6e 28 69 6e 74 2c 20 69 6e 74 29 3b 0a  Down(int, int);.
25cf0 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61 74  void sqlite3Stat
25d00 75 73 48 69 67 68 77 61 74 65 72 28 69 6e 74 2c  usHighwater(int,
25d10 20 69 6e 74 29 3b 0a 0a 2f 2a 20 41 63 63 65 73   int);../* Acces
25d20 73 20 74 6f 20 6d 75 74 65 78 65 73 20 75 73 65  s to mutexes use
25d30 64 20 62 79 20 73 71 6c 69 74 65 33 5f 73 74 61  d by sqlite3_sta
25d40 74 75 73 28 29 20 2a 2f 0a 73 71 6c 69 74 65 33  tus() */.sqlite3
25d50 5f 6d 75 74 65 78 20 2a 73 71 6c 69 74 65 33 50  _mutex *sqlite3P
25d60 63 61 63 68 65 31 4d 75 74 65 78 28 76 6f 69 64  cache1Mutex(void
25d70 29 3b 0a 73 71 6c 69 74 65 33 5f 6d 75 74 65 78  );.sqlite3_mutex
25d80 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 4d   *sqlite3MallocM
25d90 75 74 65 78 28 76 6f 69 64 29 3b 0a 0a 23 69 66  utex(void);..#if
25da0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
25db0 5f 46 4c 4f 41 54 49 4e 47 5f 50 4f 49 4e 54 0a  _FLOATING_POINT.
25dc0 20 20 69 6e 74 20 73 71 6c 69 74 65 33 49 73 4e    int sqlite3IsN
25dd0 61 4e 28 64 6f 75 62 6c 65 29 3b 0a 23 65 6c 73  aN(double);.#els
25de0 65 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74  e.# define sqlit
25df0 65 33 49 73 4e 61 4e 28 58 29 20 20 30 0a 23 65  e3IsNaN(X)  0.#e
25e00 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6e 20 69  ndif../*.** An i
25e10 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20 66  nstance of the f
25e20 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 75 63 74 75  ollowing structu
25e30 72 65 20 68 6f 6c 64 73 20 69 6e 66 6f 72 6d 61  re holds informa
25e40 74 69 6f 6e 20 61 62 6f 75 74 20 53 51 4c 0a 2a  tion about SQL.*
25e50 2a 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 67 75  * functions argu
25e60 6d 65 6e 74 73 20 74 68 61 74 20 61 72 65 20 74  ments that are t
25e70 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 74 6f  he parameters to
25e80 20 74 68 65 20 70 72 69 6e 74 66 28 29 20 66 75   the printf() fu
25e90 6e 63 74 69 6f 6e 2e 0a 2a 2f 0a 73 74 72 75 63  nction..*/.struc
25ea0 74 20 50 72 69 6e 74 66 41 72 67 75 6d 65 6e 74  t PrintfArgument
25eb0 73 20 7b 0a 20 20 69 6e 74 20 6e 41 72 67 3b 20  s {.  int nArg; 
25ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
25ed0 2a 20 54 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  * Total number o
25ee0 66 20 61 72 67 75 6d 65 6e 74 73 20 2a 2f 0a 20  f arguments */. 
25ef0 20 69 6e 74 20 6e 55 73 65 64 3b 20 20 20 20 20   int nUsed;     
25f00 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4e 75 6d            /* Num
25f10 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e 74 73  ber of arguments
25f20 20 75 73 65 64 20 73 6f 20 66 61 72 20 2a 2f 0a   used so far */.
25f30 20 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20    sqlite3_value 
25f40 2a 2a 61 70 41 72 67 3b 20 20 20 2f 2a 20 54 68  **apArg;   /* Th
25f50 65 20 61 72 67 75 6d 65 6e 74 20 76 61 6c 75 65  e argument value
25f60 73 20 2a 2f 0a 7d 3b 0a 0a 76 6f 69 64 20 73 71  s */.};..void sq
25f70 6c 69 74 65 33 56 58 50 72 69 6e 74 66 28 53 74  lite3VXPrintf(St
25f80 72 41 63 63 75 6d 2a 2c 20 63 6f 6e 73 74 20 63  rAccum*, const c
25f90 68 61 72 2a 2c 20 76 61 5f 6c 69 73 74 29 3b 0a  har*, va_list);.
25fa0 76 6f 69 64 20 73 71 6c 69 74 65 33 58 50 72 69  void sqlite3XPri
25fb0 6e 74 66 28 53 74 72 41 63 63 75 6d 2a 2c 20 63  ntf(StrAccum*, c
25fc0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29  onst char*, ...)
25fd0 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4d  ;.char *sqlite3M
25fe0 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33 2a 2c  Printf(sqlite3*,
25ff0 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e  const char*, ...
26000 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  );.char *sqlite3
26010 56 4d 50 72 69 6e 74 66 28 73 71 6c 69 74 65 33  VMPrintf(sqlite3
26020 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 76  *,const char*, v
26030 61 5f 6c 69 73 74 29 3b 0a 23 69 66 20 64 65 66  a_list);.#if def
26040 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
26050 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
26060 4c 49 54 45 5f 48 41 56 45 5f 4f 53 5f 54 52 41  LITE_HAVE_OS_TRA
26070 43 45 29 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  CE).  void sqlit
26080 65 33 44 65 62 75 67 50 72 69 6e 74 66 28 63 6f  e3DebugPrintf(co
26090 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e 2e 29 3b  nst char*, ...);
260a0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
260b0 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29  ned(SQLITE_TEST)
260c0 0a 20 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  .  void *sqlite3
260d0 54 65 73 74 54 65 78 74 54 6f 50 74 72 28 63 6f  TestTextToPtr(co
260e0 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23 65 6e 64  nst char*);.#end
260f0 69 66 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28  if..#if defined(
26100 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
26110 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72 65 65  void sqlite3Tree
26120 56 69 65 77 45 78 70 72 28 54 72 65 65 56 69 65  ViewExpr(TreeVie
26130 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 2a 2c  w*, const Expr*,
26140 20 75 38 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c   u8);.  void sql
26150 69 74 65 33 54 72 65 65 56 69 65 77 42 61 72 65  ite3TreeViewBare
26160 45 78 70 72 4c 69 73 74 28 54 72 65 65 56 69 65  ExprList(TreeVie
26170 77 2a 2c 20 63 6f 6e 73 74 20 45 78 70 72 4c 69  w*, const ExprLi
26180 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  st*, const char*
26190 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
261a0 33 54 72 65 65 56 69 65 77 45 78 70 72 4c 69 73  3TreeViewExprLis
261b0 74 28 54 72 65 65 56 69 65 77 2a 2c 20 63 6f 6e  t(TreeView*, con
261c0 73 74 20 45 78 70 72 4c 69 73 74 2a 2c 20 75 38  st ExprList*, u8
261d0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a  , const char*);.
261e0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 54 72    void sqlite3Tr
261f0 65 65 56 69 65 77 53 65 6c 65 63 74 28 54 72 65  eeViewSelect(Tre
26200 65 56 69 65 77 2a 2c 20 63 6f 6e 73 74 20 53 65  eView*, const Se
26210 6c 65 63 74 2a 2c 20 75 38 29 3b 0a 20 20 76 6f  lect*, u8);.  vo
26220 69 64 20 73 71 6c 69 74 65 33 54 72 65 65 56 69  id sqlite3TreeVi
26230 65 77 57 69 74 68 28 54 72 65 65 56 69 65 77 2a  ewWith(TreeView*
26240 2c 20 63 6f 6e 73 74 20 57 69 74 68 2a 2c 20 75  , const With*, u
26250 38 29 3b 0a 23 65 6e 64 69 66 0a 0a 0a 76 6f 69  8);.#endif...voi
26260 64 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69  d sqlite3SetStri
26270 6e 67 28 63 68 61 72 20 2a 2a 2c 20 73 71 6c 69  ng(char **, sqli
26280 74 65 33 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  te3*, const char
26290 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
262a0 45 72 72 6f 72 4d 73 67 28 50 61 72 73 65 2a 2c  ErrorMsg(Parse*,
262b0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 2e 2e   const char*, ..
262c0 2e 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  .);.void sqlite3
262d0 44 65 71 75 6f 74 65 28 63 68 61 72 2a 29 3b 0a  Dequote(char*);.
262e0 76 6f 69 64 20 73 71 6c 69 74 65 33 54 6f 6b 65  void sqlite3Toke
262f0 6e 49 6e 69 74 28 54 6f 6b 65 6e 2a 2c 63 68 61  nInit(Token*,cha
26300 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
26310 4b 65 79 77 6f 72 64 43 6f 64 65 28 63 6f 6e 73  KeywordCode(cons
26320 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61 72 2a  t unsigned char*
26330 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
26340 74 65 33 52 75 6e 50 61 72 73 65 72 28 50 61 72  te3RunParser(Par
26350 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  se*, const char*
26360 2c 20 63 68 61 72 20 2a 2a 29 3b 0a 76 6f 69 64  , char **);.void
26370 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 43 6f   sqlite3FinishCo
26380 64 69 6e 67 28 50 61 72 73 65 2a 29 3b 0a 69 6e  ding(Parse*);.in
26390 74 20 73 71 6c 69 74 65 33 47 65 74 54 65 6d 70  t sqlite3GetTemp
263a0 52 65 67 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69  Reg(Parse*);.voi
263b0 64 20 73 71 6c 69 74 65 33 52 65 6c 65 61 73 65  d sqlite3Release
263c0 54 65 6d 70 52 65 67 28 50 61 72 73 65 2a 2c 69  TempReg(Parse*,i
263d0 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  nt);.int sqlite3
263e0 47 65 74 54 65 6d 70 52 61 6e 67 65 28 50 61 72  GetTempRange(Par
263f0 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73  se*,int);.void s
26400 71 6c 69 74 65 33 52 65 6c 65 61 73 65 54 65 6d  qlite3ReleaseTem
26410 70 52 61 6e 67 65 28 50 61 72 73 65 2a 2c 69 6e  pRange(Parse*,in
26420 74 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  t,int);.void sql
26430 69 74 65 33 43 6c 65 61 72 54 65 6d 70 52 65 67  ite3ClearTempReg
26440 43 61 63 68 65 28 50 61 72 73 65 2a 29 3b 0a 23  Cache(Parse*);.#
26450 69 66 64 65 66 20 53 51 4c 49 54 45 5f 44 45 42  ifdef SQLITE_DEB
26460 55 47 0a 69 6e 74 20 73 71 6c 69 74 65 33 4e 6f  UG.int sqlite3No
26470 54 65 6d 70 73 49 6e 52 61 6e 67 65 28 50 61 72  TempsInRange(Par
26480 73 65 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23 65  se*,int,int);.#e
26490 6e 64 69 66 0a 45 78 70 72 20 2a 73 71 6c 69 74  ndif.Expr *sqlit
264a0 65 33 45 78 70 72 41 6c 6c 6f 63 28 73 71 6c 69  e3ExprAlloc(sqli
264b0 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74 20 54  te3*,int,const T
264c0 6f 6b 65 6e 2a 2c 69 6e 74 29 3b 0a 45 78 70 72  oken*,int);.Expr
264d0 20 2a 73 71 6c 69 74 65 33 45 78 70 72 28 73 71   *sqlite3Expr(sq
264e0 6c 69 74 65 33 2a 2c 69 6e 74 2c 63 6f 6e 73 74  lite3*,int,const
264f0 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71   char*);.void sq
26500 6c 69 74 65 33 45 78 70 72 41 74 74 61 63 68 53  lite3ExprAttachS
26510 75 62 74 72 65 65 73 28 73 71 6c 69 74 65 33 2a  ubtrees(sqlite3*
26520 2c 45 78 70 72 2a 2c 45 78 70 72 2a 2c 45 78 70  ,Expr*,Expr*,Exp
26530 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
26540 65 33 50 45 78 70 72 28 50 61 72 73 65 2a 2c 20  e3PExpr(Parse*, 
26550 69 6e 74 2c 20 45 78 70 72 2a 2c 20 45 78 70 72  int, Expr*, Expr
26560 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
26570 50 45 78 70 72 41 64 64 53 65 6c 65 63 74 28 50  PExprAddSelect(P
26580 61 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 53 65  arse*, Expr*, Se
26590 6c 65 63 74 2a 29 3b 0a 45 78 70 72 20 2a 73 71  lect*);.Expr *sq
265a0 6c 69 74 65 33 45 78 70 72 41 6e 64 28 73 71 6c  lite3ExprAnd(sql
265b0 69 74 65 33 2a 2c 45 78 70 72 2a 2c 20 45 78 70  ite3*,Expr*, Exp
265c0 72 2a 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  r*);.Expr *sqlit
265d0 65 33 45 78 70 72 46 75 6e 63 74 69 6f 6e 28 50  e3ExprFunction(P
265e0 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
265f0 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
26600 71 6c 69 74 65 33 45 78 70 72 41 73 73 69 67 6e  qlite3ExprAssign
26610 56 61 72 4e 75 6d 62 65 72 28 50 61 72 73 65 2a  VarNumber(Parse*
26620 2c 20 45 78 70 72 2a 2c 20 75 33 32 29 3b 0a 76  , Expr*, u32);.v
26630 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72 44  oid sqlite3ExprD
26640 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c 20  elete(sqlite3*, 
26650 45 78 70 72 2a 29 3b 0a 45 78 70 72 4c 69 73 74  Expr*);.ExprList
26660 20 2a 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73   *sqlite3ExprLis
26670 74 41 70 70 65 6e 64 28 50 61 72 73 65 2a 2c 45  tAppend(Parse*,E
26680 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 29 3b  xprList*,Expr*);
26690 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69 74  .ExprList *sqlit
266a0 65 33 45 78 70 72 4c 69 73 74 41 70 70 65 6e 64  e3ExprListAppend
266b0 56 65 63 74 6f 72 28 50 61 72 73 65 2a 2c 45 78  Vector(Parse*,Ex
266c0 70 72 4c 69 73 74 2a 2c 49 64 4c 69 73 74 2a 2c  prList*,IdList*,
266d0 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  Expr*);.void sql
266e0 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74 53  ite3ExprListSetS
266f0 6f 72 74 4f 72 64 65 72 28 45 78 70 72 4c 69 73  ortOrder(ExprLis
26700 74 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  t*,int);.void sq
26710 6c 69 74 65 33 45 78 70 72 4c 69 73 74 53 65 74  lite3ExprListSet
26720 4e 61 6d 65 28 50 61 72 73 65 2a 2c 45 78 70 72  Name(Parse*,Expr
26730 4c 69 73 74 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  List*,Token*,int
26740 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
26750 78 70 72 4c 69 73 74 53 65 74 53 70 61 6e 28 50  xprListSetSpan(P
26760 61 72 73 65 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  arse*,ExprList*,
26770 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69 64  ExprSpan*);.void
26780 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
26790 44 65 6c 65 74 65 28 73 71 6c 69 74 65 33 2a 2c  Delete(sqlite3*,
267a0 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 75 33 32   ExprList*);.u32
267b0 20 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74   sqlite3ExprList
267c0 46 6c 61 67 73 28 63 6f 6e 73 74 20 45 78 70 72  Flags(const Expr
267d0 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
267e0 74 65 33 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  te3Init(sqlite3*
267f0 2c 20 63 68 61 72 2a 2a 29 3b 0a 69 6e 74 20 73  , char**);.int s
26800 71 6c 69 74 65 33 49 6e 69 74 43 61 6c 6c 62 61  qlite3InitCallba
26810 63 6b 28 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 63  ck(void*, int, c
26820 68 61 72 2a 2a 2c 20 63 68 61 72 2a 2a 29 3b 0a  har**, char**);.
26830 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61 67  void sqlite3Prag
26840 6d 61 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a  ma(Parse*,Token*
26850 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69  ,Token*,Token*,i
26860 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
26870 49 54 45 5f 4f 4d 49 54 5f 56 49 52 54 55 41 4c  ITE_OMIT_VIRTUAL
26880 54 41 42 4c 45 0a 4d 6f 64 75 6c 65 20 2a 73 71  TABLE.Module *sq
26890 6c 69 74 65 33 50 72 61 67 6d 61 56 74 61 62 52  lite3PragmaVtabR
268a0 65 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a  egister(sqlite3*
268b0 2c 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61  ,const char *zNa
268c0 6d 65 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64  me);.#endif.void
268d0 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
268e0 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
268f0 69 6f 6e 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  ion(sqlite3*);.v
26900 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 65 74  oid sqlite3Reset
26910 4f 6e 65 53 63 68 65 6d 61 28 73 71 6c 69 74 65  OneSchema(sqlite
26920 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
26930 6c 69 74 65 33 43 6f 6c 6c 61 70 73 65 44 61 74  lite3CollapseDat
26940 61 62 61 73 65 41 72 72 61 79 28 73 71 6c 69 74  abaseArray(sqlit
26950 65 33 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  e3*);.void sqlit
26960 65 33 43 6f 6d 6d 69 74 49 6e 74 65 72 6e 61 6c  e3CommitInternal
26970 43 68 61 6e 67 65 73 28 73 71 6c 69 74 65 33 2a  Changes(sqlite3*
26980 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
26990 65 6c 65 74 65 43 6f 6c 75 6d 6e 4e 61 6d 65 73  eleteColumnNames
269a0 28 73 71 6c 69 74 65 33 2a 2c 54 61 62 6c 65 2a  (sqlite3*,Table*
269b0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43 6f  );.int sqlite3Co
269c0 6c 75 6d 6e 73 46 72 6f 6d 45 78 70 72 4c 69 73  lumnsFromExprLis
269d0 74 28 50 61 72 73 65 2a 2c 45 78 70 72 4c 69 73  t(Parse*,ExprLis
269e0 74 2a 2c 69 31 36 2a 2c 43 6f 6c 75 6d 6e 2a 2a  t*,i16*,Column**
269f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53  );.void sqlite3S
26a00 65 6c 65 63 74 41 64 64 43 6f 6c 75 6d 6e 54 79  electAddColumnTy
26a10 70 65 41 6e 64 43 6f 6c 6c 61 74 69 6f 6e 28 50  peAndCollation(P
26a20 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 53 65 6c  arse*,Table*,Sel
26a30 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
26a40 6c 69 74 65 33 52 65 73 75 6c 74 53 65 74 4f 66  lite3ResultSetOf
26a50 53 65 6c 65 63 74 28 50 61 72 73 65 2a 2c 53 65  Select(Parse*,Se
26a60 6c 65 63 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  lect*);.void sql
26a70 69 74 65 33 4f 70 65 6e 4d 61 73 74 65 72 54 61  ite3OpenMasterTa
26a80 62 6c 65 28 50 61 72 73 65 20 2a 2c 20 69 6e 74  ble(Parse *, int
26a90 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74 65  );.Index *sqlite
26aa0 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
26ab0 28 54 61 62 6c 65 2a 29 3b 0a 69 31 36 20 73 71  (Table*);.i16 sq
26ac0 6c 69 74 65 33 43 6f 6c 75 6d 6e 4f 66 49 6e 64  lite3ColumnOfInd
26ad0 65 78 28 49 6e 64 65 78 2a 2c 20 69 31 36 29 3b  ex(Index*, i16);
26ae0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74 61  .void sqlite3Sta
26af0 72 74 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 54  rtTable(Parse*,T
26b00 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 69 6e 74  oken*,Token*,int
26b10 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 29 3b 0a 23  ,int,int,int);.#
26b20 69 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  if SQLITE_ENABLE
26b30 5f 48 49 44 44 45 4e 5f 43 4f 4c 55 4d 4e 53 0a  _HIDDEN_COLUMNS.
26b40 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f    void sqlite3Co
26b50 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46 72  lumnPropertiesFr
26b60 6f 6d 4e 61 6d 65 28 54 61 62 6c 65 2a 2c 20 43  omName(Table*, C
26b70 6f 6c 75 6d 6e 2a 29 3b 0a 23 65 6c 73 65 0a 23  olumn*);.#else.#
26b80 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43   define sqlite3C
26b90 6f 6c 75 6d 6e 50 72 6f 70 65 72 74 69 65 73 46  olumnPropertiesF
26ba0 72 6f 6d 4e 61 6d 65 28 54 2c 43 29 20 2f 2a 20  romName(T,C) /* 
26bb0 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69 66 0a  no-op */.#endif.
26bc0 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43  void sqlite3AddC
26bd0 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 54 6f 6b  olumn(Parse*,Tok
26be0 65 6e 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  en*,Token*);.voi
26bf0 64 20 73 71 6c 69 74 65 33 41 64 64 4e 6f 74 4e  d sqlite3AddNotN
26c00 75 6c 6c 28 50 61 72 73 65 2a 2c 20 69 6e 74 29  ull(Parse*, int)
26c10 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 64  ;.void sqlite3Ad
26c20 64 50 72 69 6d 61 72 79 4b 65 79 28 50 61 72 73  dPrimaryKey(Pars
26c30 65 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69  e*, ExprList*, i
26c40 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76  nt, int, int);.v
26c50 6f 69 64 20 73 71 6c 69 74 65 33 41 64 64 43 68  oid sqlite3AddCh
26c60 65 63 6b 43 6f 6e 73 74 72 61 69 6e 74 28 50 61  eckConstraint(Pa
26c70 72 73 65 2a 2c 20 45 78 70 72 2a 29 3b 0a 76 6f  rse*, Expr*);.vo
26c80 69 64 20 73 71 6c 69 74 65 33 41 64 64 44 65 66  id sqlite3AddDef
26c90 61 75 6c 74 56 61 6c 75 65 28 50 61 72 73 65 2a  aultValue(Parse*
26ca0 2c 45 78 70 72 53 70 61 6e 2a 29 3b 0a 76 6f 69  ,ExprSpan*);.voi
26cb0 64 20 73 71 6c 69 74 65 33 41 64 64 43 6f 6c 6c  d sqlite3AddColl
26cc0 61 74 65 54 79 70 65 28 50 61 72 73 65 2a 2c 20  ateType(Parse*, 
26cd0 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71  Token*);.void sq
26ce0 6c 69 74 65 33 45 6e 64 54 61 62 6c 65 28 50 61  lite3EndTable(Pa
26cf0 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54 6f 6b 65  rse*,Token*,Toke
26d00 6e 2a 2c 75 38 2c 53 65 6c 65 63 74 2a 29 3b 0a  n*,u8,Select*);.
26d10 69 6e 74 20 73 71 6c 69 74 65 33 50 61 72 73 65  int sqlite3Parse
26d20 55 72 69 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  Uri(const char*,
26d30 63 6f 6e 73 74 20 63 68 61 72 2a 2c 75 6e 73 69  const char*,unsi
26d40 67 6e 65 64 20 69 6e 74 2a 2c 0a 20 20 20 20 20  gned int*,.     
26d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
26d60 71 6c 69 74 65 33 5f 76 66 73 2a 2a 2c 63 68 61  qlite3_vfs**,cha
26d70 72 2a 2a 2c 63 68 61 72 20 2a 2a 29 3b 0a 42 74  r**,char **);.Bt
26d80 72 65 65 20 2a 73 71 6c 69 74 65 33 44 62 4e 61  ree *sqlite3DbNa
26d90 6d 65 54 6f 42 74 72 65 65 28 73 71 6c 69 74 65  meToBtree(sqlite
26da0 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  3*,const char*);
26db0 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  ..#ifdef SQLITE_
26dc0 55 4e 54 45 53 54 41 42 4c 45 0a 23 20 64 65 66  UNTESTABLE.# def
26dd0 69 6e 65 20 73 71 6c 69 74 65 33 46 61 75 6c 74  ine sqlite3Fault
26de0 53 69 6d 28 58 29 20 53 51 4c 49 54 45 5f 4f 4b  Sim(X) SQLITE_OK
26df0 0a 23 65 6c 73 65 0a 20 20 69 6e 74 20 73 71 6c  .#else.  int sql
26e00 69 74 65 33 46 61 75 6c 74 53 69 6d 28 69 6e 74  ite3FaultSim(int
26e10 29 3b 0a 23 65 6e 64 69 66 0a 0a 42 69 74 76 65  );.#endif..Bitve
26e20 63 20 2a 73 71 6c 69 74 65 33 42 69 74 76 65 63  c *sqlite3Bitvec
26e30 43 72 65 61 74 65 28 75 33 32 29 3b 0a 69 6e 74  Create(u32);.int
26e40 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 54 65   sqlite3BitvecTe
26e50 73 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  st(Bitvec*, u32)
26e60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 42 69 74  ;.int sqlite3Bit
26e70 76 65 63 54 65 73 74 4e 6f 74 4e 75 6c 6c 28 42  vecTestNotNull(B
26e80 69 74 76 65 63 2a 2c 20 75 33 32 29 3b 0a 69 6e  itvec*, u32);.in
26e90 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 53  t sqlite3BitvecS
26ea0 65 74 28 42 69 74 76 65 63 2a 2c 20 75 33 32 29  et(Bitvec*, u32)
26eb0 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69  ;.void sqlite3Bi
26ec0 74 76 65 63 43 6c 65 61 72 28 42 69 74 76 65 63  tvecClear(Bitvec
26ed0 2a 2c 20 75 33 32 2c 20 76 6f 69 64 2a 29 3b 0a  *, u32, void*);.
26ee0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 69 74 76  void sqlite3Bitv
26ef0 65 63 44 65 73 74 72 6f 79 28 42 69 74 76 65 63  ecDestroy(Bitvec
26f00 2a 29 3b 0a 75 33 32 20 73 71 6c 69 74 65 33 42  *);.u32 sqlite3B
26f10 69 74 76 65 63 53 69 7a 65 28 42 69 74 76 65 63  itvecSize(Bitvec
26f20 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  *);.#ifndef SQLI
26f30 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 69 6e  TE_UNTESTABLE.in
26f40 74 20 73 71 6c 69 74 65 33 42 69 74 76 65 63 42  t sqlite3BitvecB
26f50 75 69 6c 74 69 6e 54 65 73 74 28 69 6e 74 2c 69  uiltinTest(int,i
26f60 6e 74 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 52 6f  nt*);.#endif..Ro
26f70 77 53 65 74 20 2a 73 71 6c 69 74 65 33 52 6f 77  wSet *sqlite3Row
26f80 53 65 74 49 6e 69 74 28 73 71 6c 69 74 65 33 2a  SetInit(sqlite3*
26f90 2c 20 76 6f 69 64 2a 2c 20 75 6e 73 69 67 6e 65  , void*, unsigne
26fa0 64 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  d int);.void sql
26fb0 69 74 65 33 52 6f 77 53 65 74 43 6c 65 61 72 28  ite3RowSetClear(
26fc0 52 6f 77 53 65 74 2a 29 3b 0a 76 6f 69 64 20 73  RowSet*);.void s
26fd0 71 6c 69 74 65 33 52 6f 77 53 65 74 49 6e 73 65  qlite3RowSetInse
26fe0 72 74 28 52 6f 77 53 65 74 2a 2c 20 69 36 34 29  rt(RowSet*, i64)
26ff0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f 77  ;.int sqlite3Row
27000 53 65 74 54 65 73 74 28 52 6f 77 53 65 74 2a 2c  SetTest(RowSet*,
27010 20 69 6e 74 20 69 42 61 74 63 68 2c 20 69 36 34   int iBatch, i64
27020 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 6f  );.int sqlite3Ro
27030 77 53 65 74 4e 65 78 74 28 52 6f 77 53 65 74 2a  wSetNext(RowSet*
27040 2c 20 69 36 34 2a 29 3b 0a 0a 76 6f 69 64 20 73  , i64*);..void s
27050 71 6c 69 74 65 33 43 72 65 61 74 65 56 69 65 77  qlite3CreateView
27060 28 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 2c 54  (Parse*,Token*,T
27070 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  oken*,Token*,Exp
27080 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 2c 69  rList*,Select*,i
27090 6e 74 2c 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64  nt,int);..#if !d
270a0 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
270b0 49 54 5f 56 49 45 57 29 20 7c 7c 20 21 64 65 66  IT_VIEW) || !def
270c0 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
270d0 5f 56 49 52 54 55 41 4c 54 41 42 4c 45 29 0a 20  _VIRTUALTABLE). 
270e0 20 69 6e 74 20 73 71 6c 69 74 65 33 56 69 65 77   int sqlite3View
270f0 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 50  GetColumnNames(P
27100 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 23  arse*,Table*);.#
27110 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
27120 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c 75  lite3ViewGetColu
27130 6d 6e 4e 61 6d 65 73 28 41 2c 42 29 20 30 0a 23  mnNames(A,B) 0.#
27140 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
27150 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 3e 33  E_MAX_ATTACHED>3
27160 30 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 44  0.  int sqlite3D
27170 62 4d 61 73 6b 41 6c 6c 5a 65 72 6f 28 79 44 62  bMaskAllZero(yDb
27180 4d 61 73 6b 29 3b 0a 23 65 6e 64 69 66 0a 76 6f  Mask);.#endif.vo
27190 69 64 20 73 71 6c 69 74 65 33 44 72 6f 70 54 61  id sqlite3DropTa
271a0 62 6c 65 28 50 61 72 73 65 2a 2c 20 53 72 63 4c  ble(Parse*, SrcL
271b0 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  ist*, int, int);
271c0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f 64  .void sqlite3Cod
271d0 65 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  eDropTable(Parse
271e0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
271f0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
27200 65 33 44 65 6c 65 74 65 54 61 62 6c 65 28 73 71  e3DeleteTable(sq
27210 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65 2a 29 3b  lite3*, Table*);
27220 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
27230 4f 4d 49 54 5f 41 55 54 4f 49 4e 43 52 45 4d 45  OMIT_AUTOINCREME
27240 4e 54 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  NT.  void sqlite
27250 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 42 65  3AutoincrementBe
27260 67 69 6e 28 50 61 72 73 65 20 2a 70 50 61 72 73  gin(Parse *pPars
27270 65 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  e);.  void sqlit
27280 65 33 41 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45  e3AutoincrementE
27290 6e 64 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  nd(Parse *pParse
272a0 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
272b0 65 20 73 71 6c 69 74 65 33 41 75 74 6f 69 6e 63  e sqlite3Autoinc
272c0 72 65 6d 65 6e 74 42 65 67 69 6e 28 58 29 0a 23  rementBegin(X).#
272d0 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 41   define sqlite3A
272e0 75 74 6f 69 6e 63 72 65 6d 65 6e 74 45 6e 64 28  utoincrementEnd(
272f0 58 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73  X).#endif.void s
27300 71 6c 69 74 65 33 49 6e 73 65 72 74 28 50 61 72  qlite3Insert(Par
27310 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 53  se*, SrcList*, S
27320 65 6c 65 63 74 2a 2c 20 49 64 4c 69 73 74 2a 2c  elect*, IdList*,
27330 20 69 6e 74 29 3b 0a 76 6f 69 64 20 2a 73 71 6c   int);.void *sql
27340 69 74 65 33 41 72 72 61 79 41 6c 6c 6f 63 61 74  ite3ArrayAllocat
27350 65 28 73 71 6c 69 74 65 33 2a 2c 76 6f 69 64 2a  e(sqlite3*,void*
27360 2c 69 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b  ,int,int*,int*);
27370 0a 49 64 4c 69 73 74 20 2a 73 71 6c 69 74 65 33  .IdList *sqlite3
27380 49 64 4c 69 73 74 41 70 70 65 6e 64 28 73 71 6c  IdListAppend(sql
27390 69 74 65 33 2a 2c 20 49 64 4c 69 73 74 2a 2c 20  ite3*, IdList*, 
273a0 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
273b0 69 74 65 33 49 64 4c 69 73 74 49 6e 64 65 78 28  ite3IdListIndex(
273c0 49 64 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  IdList*,const ch
273d0 61 72 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73  ar*);.SrcList *s
273e0 71 6c 69 74 65 33 53 72 63 4c 69 73 74 45 6e 6c  qlite3SrcListEnl
273f0 61 72 67 65 28 73 71 6c 69 74 65 33 2a 2c 20 53  arge(sqlite3*, S
27400 72 63 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69 6e  rcList*, int, in
27410 74 29 3b 0a 53 72 63 4c 69 73 74 20 2a 73 71 6c  t);.SrcList *sql
27420 69 74 65 33 53 72 63 4c 69 73 74 41 70 70 65 6e  ite3SrcListAppen
27430 64 28 73 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c  d(sqlite3*, SrcL
27440 69 73 74 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f  ist*, Token*, To
27450 6b 65 6e 2a 29 3b 0a 53 72 63 4c 69 73 74 20 2a  ken*);.SrcList *
27460 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 41 70  sqlite3SrcListAp
27470 70 65 6e 64 46 72 6f 6d 54 65 72 6d 28 50 61 72  pendFromTerm(Par
27480 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 54  se*, SrcList*, T
27490 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a 2c 0a 20  oken*, Token*,. 
274a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274c0 20 20 20 20 20 54 6f 6b 65 6e 2a 2c 20 53 65 6c       Token*, Sel
274d0 65 63 74 2a 2c 20 45 78 70 72 2a 2c 20 49 64 4c  ect*, Expr*, IdL
274e0 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ist*);.void sqli
274f0 74 65 33 53 72 63 4c 69 73 74 49 6e 64 65 78 65  te3SrcListIndexe
27500 64 42 79 28 50 61 72 73 65 20 2a 2c 20 53 72 63  dBy(Parse *, Src
27510 4c 69 73 74 20 2a 2c 20 54 6f 6b 65 6e 20 2a 29  List *, Token *)
27520 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 72  ;.void sqlite3Sr
27530 63 4c 69 73 74 46 75 6e 63 41 72 67 73 28 50 61  cListFuncArgs(Pa
27540 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20  rse*, SrcList*, 
27550 45 78 70 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20  ExprList*);.int 
27560 73 71 6c 69 74 65 33 49 6e 64 65 78 65 64 42 79  sqlite3IndexedBy
27570 4c 6f 6f 6b 75 70 28 50 61 72 73 65 20 2a 2c 20  Lookup(Parse *, 
27580 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f 69  struct SrcList_i
27590 74 65 6d 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  tem *);.void sql
275a0 69 74 65 33 53 72 63 4c 69 73 74 53 68 69 66 74  ite3SrcListShift
275b0 4a 6f 69 6e 54 79 70 65 28 53 72 63 4c 69 73 74  JoinType(SrcList
275c0 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
275d0 53 72 63 4c 69 73 74 41 73 73 69 67 6e 43 75 72  SrcListAssignCur
275e0 73 6f 72 73 28 50 61 72 73 65 2a 2c 20 53 72 63  sors(Parse*, Src
275f0 4c 69 73 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  List*);.void sql
27600 69 74 65 33 49 64 4c 69 73 74 44 65 6c 65 74 65  ite3IdListDelete
27610 28 73 71 6c 69 74 65 33 2a 2c 20 49 64 4c 69 73  (sqlite3*, IdLis
27620 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
27630 33 53 72 63 4c 69 73 74 44 65 6c 65 74 65 28 73  3SrcListDelete(s
27640 71 6c 69 74 65 33 2a 2c 20 53 72 63 4c 69 73 74  qlite3*, SrcList
27650 2a 29 3b 0a 49 6e 64 65 78 20 2a 73 71 6c 69 74  *);.Index *sqlit
27660 65 33 41 6c 6c 6f 63 61 74 65 49 6e 64 65 78 4f  e3AllocateIndexO
27670 62 6a 65 63 74 28 73 71 6c 69 74 65 33 2a 2c 69  bject(sqlite3*,i
27680 31 36 2c 69 6e 74 2c 63 68 61 72 2a 2a 29 3b 0a  16,int,char**);.
27690 76 6f 69 64 20 73 71 6c 69 74 65 33 43 72 65 61  void sqlite3Crea
276a0 74 65 49 6e 64 65 78 28 50 61 72 73 65 2a 2c 54  teIndex(Parse*,T
276b0 6f 6b 65 6e 2a 2c 54 6f 6b 65 6e 2a 2c 53 72 63  oken*,Token*,Src
276c0 4c 69 73 74 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  List*,ExprList*,
276d0 69 6e 74 2c 54 6f 6b 65 6e 2a 2c 0a 20 20 20 20  int,Token*,.    
276e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276f0 20 20 20 20 20 20 45 78 70 72 2a 2c 20 69 6e 74        Expr*, int
27700 2c 20 69 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64  , int, u8);.void
27710 20 73 71 6c 69 74 65 33 44 72 6f 70 49 6e 64 65   sqlite3DropInde
27720 78 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73  x(Parse*, SrcLis
27730 74 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71  t*, int);.int sq
27740 6c 69 74 65 33 53 65 6c 65 63 74 28 50 61 72 73  lite3Select(Pars
27750 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 53 65 6c  e*, Select*, Sel
27760 65 63 74 44 65 73 74 2a 29 3b 0a 53 65 6c 65 63  ectDest*);.Selec
27770 74 20 2a 73 71 6c 69 74 65 33 53 65 6c 65 63 74  t *sqlite3Select
27780 4e 65 77 28 50 61 72 73 65 2a 2c 45 78 70 72 4c  New(Parse*,ExprL
27790 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 45 78  ist*,SrcList*,Ex
277a0 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c 0a 20  pr*,ExprList*,. 
277b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
277c0 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c 45 78          Expr*,Ex
277d0 70 72 4c 69 73 74 2a 2c 75 33 32 2c 45 78 70 72  prList*,u32,Expr
277e0 2a 2c 45 78 70 72 2a 29 3b 0a 76 6f 69 64 20 73  *,Expr*);.void s
277f0 71 6c 69 74 65 33 53 65 6c 65 63 74 44 65 6c 65  qlite3SelectDele
27800 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 53 65 6c  te(sqlite3*, Sel
27810 65 63 74 2a 29 3b 0a 54 61 62 6c 65 20 2a 73 71  ect*);.Table *sq
27820 6c 69 74 65 33 53 72 63 4c 69 73 74 4c 6f 6f 6b  lite3SrcListLook
27830 75 70 28 50 61 72 73 65 2a 2c 20 53 72 63 4c 69  up(Parse*, SrcLi
27840 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  st*);.int sqlite
27850 33 49 73 52 65 61 64 4f 6e 6c 79 28 50 61 72 73  3IsReadOnly(Pars
27860 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29  e*, Table*, int)
27870 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 4f 70  ;.void sqlite3Op
27880 65 6e 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 20  enTable(Parse*, 
27890 69 6e 74 20 69 43 75 72 2c 20 69 6e 74 20 69 44  int iCur, int iD
278a0 62 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 29 3b  b, Table*, int);
278b0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
278c0 49 54 45 5f 45 4e 41 42 4c 45 5f 55 50 44 41 54  ITE_ENABLE_UPDAT
278d0 45 5f 44 45 4c 45 54 45 5f 4c 49 4d 49 54 29 20  E_DELETE_LIMIT) 
278e0 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
278f0 54 45 5f 4f 4d 49 54 5f 53 55 42 51 55 45 52 59  TE_OMIT_SUBQUERY
27900 29 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 4c  ).Expr *sqlite3L
27910 69 6d 69 74 57 68 65 72 65 28 50 61 72 73 65 2a  imitWhere(Parse*
27920 2c 53 72 63 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ,SrcList*,Expr*,
27930 45 78 70 72 4c 69 73 74 2a 2c 45 78 70 72 2a 2c  ExprList*,Expr*,
27940 45 78 70 72 2a 2c 63 68 61 72 2a 29 3b 0a 23 65  Expr*,char*);.#e
27950 6e 64 69 66 0a 76 6f 69 64 20 73 71 6c 69 74 65  ndif.void sqlite
27960 33 44 65 6c 65 74 65 46 72 6f 6d 28 50 61 72 73  3DeleteFrom(Pars
27970 65 2a 2c 20 53 72 63 4c 69 73 74 2a 2c 20 45 78  e*, SrcList*, Ex
27980 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
27990 65 33 55 70 64 61 74 65 28 50 61 72 73 65 2a 2c  e3Update(Parse*,
279a0 20 53 72 63 4c 69 73 74 2a 2c 20 45 78 70 72 4c   SrcList*, ExprL
279b0 69 73 74 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  ist*, Expr*, int
279c0 29 3b 0a 57 68 65 72 65 49 6e 66 6f 20 2a 73 71  );.WhereInfo *sq
279d0 6c 69 74 65 33 57 68 65 72 65 42 65 67 69 6e 28  lite3WhereBegin(
279e0 50 61 72 73 65 2a 2c 53 72 63 4c 69 73 74 2a 2c  Parse*,SrcList*,
279f0 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  Expr*,ExprList*,
27a00 45 78 70 72 4c 69 73 74 2a 2c 75 31 36 2c 69 6e  ExprList*,u16,in
27a10 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27a20 57 68 65 72 65 45 6e 64 28 57 68 65 72 65 49 6e  WhereEnd(WhereIn
27a30 66 6f 2a 29 3b 0a 4c 6f 67 45 73 74 20 73 71 6c  fo*);.LogEst sql
27a40 69 74 65 33 57 68 65 72 65 4f 75 74 70 75 74 52  ite3WhereOutputR
27a50 6f 77 43 6f 75 6e 74 28 57 68 65 72 65 49 6e 66  owCount(WhereInf
27a60 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  o*);.int sqlite3
27a70 57 68 65 72 65 49 73 44 69 73 74 69 6e 63 74 28  WhereIsDistinct(
27a80 57 68 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74  WhereInfo*);.int
27a90 20 73 71 6c 69 74 65 33 57 68 65 72 65 49 73 4f   sqlite3WhereIsO
27aa0 72 64 65 72 65 64 28 57 68 65 72 65 49 6e 66 6f  rdered(WhereInfo
27ab0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57  *);.int sqlite3W
27ac0 68 65 72 65 4f 72 64 65 72 65 64 49 6e 6e 65 72  hereOrderedInner
27ad0 4c 6f 6f 70 28 57 68 65 72 65 49 6e 66 6f 2a 29  Loop(WhereInfo*)
27ae0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68 65  ;.int sqlite3Whe
27af0 72 65 49 73 53 6f 72 74 65 64 28 57 68 65 72 65  reIsSorted(Where
27b00 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  Info*);.int sqli
27b10 74 65 33 57 68 65 72 65 43 6f 6e 74 69 6e 75 65  te3WhereContinue
27b20 4c 61 62 65 6c 28 57 68 65 72 65 49 6e 66 6f 2a  Label(WhereInfo*
27b30 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 57 68  );.int sqlite3Wh
27b40 65 72 65 42 72 65 61 6b 4c 61 62 65 6c 28 57 68  ereBreakLabel(Wh
27b50 65 72 65 49 6e 66 6f 2a 29 3b 0a 69 6e 74 20 73  ereInfo*);.int s
27b60 71 6c 69 74 65 33 57 68 65 72 65 4f 6b 4f 6e 65  qlite3WhereOkOne
27b70 50 61 73 73 28 57 68 65 72 65 49 6e 66 6f 2a 2c  Pass(WhereInfo*,
27b80 20 69 6e 74 2a 29 3b 0a 23 64 65 66 69 6e 65 20   int*);.#define 
27b90 4f 4e 45 50 41 53 53 5f 4f 46 46 20 20 20 20 20  ONEPASS_OFF     
27ba0 20 30 20 20 20 20 20 20 20 20 2f 2a 20 55 73 65   0        /* Use
27bb0 20 6f 66 20 4f 4e 45 50 41 53 53 20 6e 6f 74 20   of ONEPASS not 
27bc0 61 6c 6c 6f 77 65 64 20 2a 2f 0a 23 64 65 66 69  allowed */.#defi
27bd0 6e 65 20 4f 4e 45 50 41 53 53 5f 53 49 4e 47 4c  ne ONEPASS_SINGL
27be0 45 20 20 20 31 20 20 20 20 20 20 20 20 2f 2a 20  E   1        /* 
27bf0 4f 4e 45 50 41 53 53 20 76 61 6c 69 64 20 66 6f  ONEPASS valid fo
27c00 72 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 75  r a single row u
27c10 70 64 61 74 65 20 2a 2f 0a 23 64 65 66 69 6e 65  pdate */.#define
27c20 20 4f 4e 45 50 41 53 53 5f 4d 55 4c 54 49 20 20   ONEPASS_MULTI  
27c30 20 20 32 20 20 20 20 20 20 20 20 2f 2a 20 4f 4e    2        /* ON
27c40 45 50 41 53 53 20 69 73 20 76 61 6c 69 64 20 66  EPASS is valid f
27c50 6f 72 20 6d 75 6c 74 69 70 6c 65 20 72 6f 77 73  or multiple rows
27c60 20 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33   */.void sqlite3
27c70 45 78 70 72 43 6f 64 65 4c 6f 61 64 49 6e 64 65  ExprCodeLoadInde
27c80 78 43 6f 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20  xColumn(Parse*, 
27c90 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20 69 6e 74  Index*, int, int
27ca0 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
27cb0 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
27cc0 6c 75 6d 6e 28 50 61 72 73 65 2a 2c 20 54 61 62  lumn(Parse*, Tab
27cd0 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69  le*, int, int, i
27ce0 6e 74 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73 71  nt, u8);.void sq
27cf0 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65 74  lite3ExprCodeGet
27d00 43 6f 6c 75 6d 6e 54 6f 52 65 67 28 50 61 72 73  ColumnToReg(Pars
27d10 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c  e*, Table*, int,
27d20 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64   int, int);.void
27d30 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
27d40 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65  GetColumnOfTable
27d50 28 56 64 62 65 2a 2c 20 54 61 62 6c 65 2a 2c 20  (Vdbe*, Table*, 
27d60 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a  int, int, int);.
27d70 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
27d80 43 6f 64 65 4d 6f 76 65 28 50 61 72 73 65 2a 2c  CodeMove(Parse*,
27d90 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
27da0 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
27db0 72 43 61 63 68 65 53 74 6f 72 65 28 50 61 72 73  rCacheStore(Pars
27dc0 65 2a 2c 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e  e*, int, int, in
27dd0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
27de0 45 78 70 72 43 61 63 68 65 50 75 73 68 28 50 61  ExprCachePush(Pa
27df0 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  rse*);.void sqli
27e00 74 65 33 45 78 70 72 43 61 63 68 65 50 6f 70 28  te3ExprCachePop(
27e10 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71  Parse*);.void sq
27e20 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 52 65  lite3ExprCacheRe
27e30 6d 6f 76 65 28 50 61 72 73 65 2a 2c 20 69 6e 74  move(Parse*, int
27e40 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
27e50 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
27e60 61 72 28 50 61 72 73 65 2a 29 3b 0a 76 6f 69 64  ar(Parse*);.void
27e70 20 73 71 6c 69 74 65 33 45 78 70 72 43 61 63 68   sqlite3ExprCach
27e80 65 41 66 66 69 6e 69 74 79 43 68 61 6e 67 65 28  eAffinityChange(
27e90 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e 74  Parse*, int, int
27ea0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
27eb0 78 70 72 43 6f 64 65 28 50 61 72 73 65 2a 2c 20  xprCode(Parse*, 
27ec0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  Expr*, int);.voi
27ed0 64 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  d sqlite3ExprCod
27ee0 65 43 6f 70 79 28 50 61 72 73 65 2a 2c 20 45 78  eCopy(Parse*, Ex
27ef0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
27f00 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 46  sqlite3ExprCodeF
27f10 61 63 74 6f 72 61 62 6c 65 28 50 61 72 73 65 2a  actorable(Parse*
27f20 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69  , Expr*, int);.i
27f30 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f  nt sqlite3ExprCo
27f40 64 65 41 74 49 6e 69 74 28 50 61 72 73 65 2a 2c  deAtInit(Parse*,
27f50 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e   Expr*, int);.in
27f60 74 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64  t sqlite3ExprCod
27f70 65 54 65 6d 70 28 50 61 72 73 65 2a 2c 20 45 78  eTemp(Parse*, Ex
27f80 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
27f90 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 54  sqlite3ExprCodeT
27fa0 61 72 67 65 74 28 50 61 72 73 65 2a 2c 20 45 78  arget(Parse*, Ex
27fb0 70 72 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  pr*, int);.void 
27fc0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 41  sqlite3ExprCodeA
27fd0 6e 64 43 61 63 68 65 28 50 61 72 73 65 2a 2c 20  ndCache(Parse*, 
27fe0 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
27ff0 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65   sqlite3ExprCode
28000 45 78 70 72 4c 69 73 74 28 50 61 72 73 65 2a 2c  ExprList(Parse*,
28010 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c   ExprList*, int,
28020 20 69 6e 74 2c 20 75 38 29 3b 0a 23 64 65 66 69   int, u8);.#defi
28030 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c 5f 44  ne SQLITE_ECEL_D
28040 55 50 20 20 20 20 20 20 30 78 30 31 20 20 2f 2a  UP      0x01  /*
28050 20 44 65 65 70 2c 20 6e 6f 74 20 73 68 61 6c 6c   Deep, not shall
28060 6f 77 20 63 6f 70 69 65 73 20 2a 2f 0a 23 64 65  ow copies */.#de
28070 66 69 6e 65 20 53 51 4c 49 54 45 5f 45 43 45 4c  fine SQLITE_ECEL
28080 5f 46 41 43 54 4f 52 20 20 20 30 78 30 32 20 20  _FACTOR   0x02  
28090 2f 2a 20 46 61 63 74 6f 72 20 6f 75 74 20 63 6f  /* Factor out co
280a0 6e 73 74 61 6e 74 20 74 65 72 6d 73 20 2a 2f 0a  nstant terms */.
280b0 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 45  #define SQLITE_E
280c0 43 45 4c 5f 52 45 46 20 20 20 20 20 20 30 78 30  CEL_REF      0x0
280d0 34 20 20 2f 2a 20 55 73 65 20 45 78 70 72 4c 69  4  /* Use ExprLi
280e0 73 74 2e 75 2e 78 2e 69 4f 72 64 65 72 42 79 43  st.u.x.iOrderByC
280f0 6f 6c 20 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  ol */.#define SQ
28100 4c 49 54 45 5f 45 43 45 4c 5f 4f 4d 49 54 52 45  LITE_ECEL_OMITRE
28110 46 20 20 30 78 30 38 20 20 2f 2a 20 4f 6d 69 74  F  0x08  /* Omit
28120 20 69 66 20 45 78 70 72 4c 69 73 74 2e 75 2e 78   if ExprList.u.x
28130 2e 69 4f 72 64 65 72 42 79 43 6f 6c 20 2a 2f 0a  .iOrderByCol */.
28140 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70 72  void sqlite3Expr
28150 49 66 54 72 75 65 28 50 61 72 73 65 2a 2c 20 45  IfTrue(Parse*, E
28160 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  xpr*, int, int);
28170 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28180 72 49 66 46 61 6c 73 65 28 50 61 72 73 65 2a 2c  rIfFalse(Parse*,
28190 20 45 78 70 72 2a 2c 20 69 6e 74 2c 20 69 6e 74   Expr*, int, int
281a0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
281b0 78 70 72 49 66 46 61 6c 73 65 44 75 70 28 50 61  xprIfFalseDup(Pa
281c0 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74  rse*, Expr*, int
281d0 2c 20 69 6e 74 29 3b 0a 54 61 62 6c 65 20 2a 73  , int);.Table *s
281e0 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
281f0 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20 63  sqlite3*,const c
28200 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  har*, const char
28210 2a 29 3b 0a 23 64 65 66 69 6e 65 20 4c 4f 43 41  *);.#define LOCA
28220 54 45 5f 56 49 45 57 20 20 20 20 30 78 30 31 0a  TE_VIEW    0x01.
28230 23 64 65 66 69 6e 65 20 4c 4f 43 41 54 45 5f 4e  #define LOCATE_N
28240 4f 45 52 52 20 20 20 30 78 30 32 0a 54 61 62 6c  OERR   0x02.Tabl
28250 65 20 2a 73 71 6c 69 74 65 33 4c 6f 63 61 74 65  e *sqlite3Locate
28260 54 61 62 6c 65 28 50 61 72 73 65 2a 2c 75 33 32  Table(Parse*,u32
28270 20 66 6c 61 67 73 2c 63 6f 6e 73 74 20 63 68 61   flags,const cha
28280 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 29  r*, const char*)
28290 3b 0a 54 61 62 6c 65 20 2a 73 71 6c 69 74 65 33  ;.Table *sqlite3
282a0 4c 6f 63 61 74 65 54 61 62 6c 65 49 74 65 6d 28  LocateTableItem(
282b0 50 61 72 73 65 2a 2c 75 33 32 20 66 6c 61 67 73  Parse*,u32 flags
282c0 2c 73 74 72 75 63 74 20 53 72 63 4c 69 73 74 5f  ,struct SrcList_
282d0 69 74 65 6d 20 2a 29 3b 0a 49 6e 64 65 78 20 2a  item *);.Index *
282e0 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65 78  sqlite3FindIndex
282f0 28 73 71 6c 69 74 65 33 2a 2c 63 6f 6e 73 74 20  (sqlite3*,const 
28300 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61  char*, const cha
28310 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
28320 33 55 6e 6c 69 6e 6b 41 6e 64 44 65 6c 65 74 65  3UnlinkAndDelete
28330 54 61 62 6c 65 28 73 71 6c 69 74 65 33 2a 2c 69  Table(sqlite3*,i
28340 6e 74 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b  nt,const char*);
28350 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c  .void sqlite3Unl
28360 69 6e 6b 41 6e 64 44 65 6c 65 74 65 49 6e 64 65  inkAndDeleteInde
28370 78 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 2c 63  x(sqlite3*,int,c
28380 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
28390 64 20 73 71 6c 69 74 65 33 56 61 63 75 75 6d 28  d sqlite3Vacuum(
283a0 50 61 72 73 65 2a 2c 54 6f 6b 65 6e 2a 29 3b 0a  Parse*,Token*);.
283b0 69 6e 74 20 73 71 6c 69 74 65 33 52 75 6e 56 61  int sqlite3RunVa
283c0 63 75 75 6d 28 63 68 61 72 2a 2a 2c 20 73 71 6c  cuum(char**, sql
283d0 69 74 65 33 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  ite3*, int);.cha
283e0 72 20 2a 73 71 6c 69 74 65 33 4e 61 6d 65 46 72  r *sqlite3NameFr
283f0 6f 6d 54 6f 6b 65 6e 28 73 71 6c 69 74 65 33 2a  omToken(sqlite3*
28400 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73  , Token*);.int s
28410 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70 61 72  qlite3ExprCompar
28420 65 28 50 61 72 73 65 2a 2c 45 78 70 72 2a 2c 20  e(Parse*,Expr*, 
28430 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74  Expr*, int);.int
28440 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 6d 70   sqlite3ExprComp
28450 61 72 65 53 6b 69 70 28 45 78 70 72 2a 2c 20 45  areSkip(Expr*, E
28460 78 70 72 2a 2c 20 69 6e 74 29 3b 0a 69 6e 74 20  xpr*, int);.int 
28470 73 71 6c 69 74 65 33 45 78 70 72 4c 69 73 74 43  sqlite3ExprListC
28480 6f 6d 70 61 72 65 28 45 78 70 72 4c 69 73 74 2a  ompare(ExprList*
28490 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74  , ExprList*, int
284a0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
284b0 70 72 49 6d 70 6c 69 65 73 45 78 70 72 28 50 61  prImpliesExpr(Pa
284c0 72 73 65 2a 2c 45 78 70 72 2a 2c 20 45 78 70 72  rse*,Expr*, Expr
284d0 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  *, int);.void sq
284e0 6c 69 74 65 33 45 78 70 72 41 6e 61 6c 79 7a 65  lite3ExprAnalyze
284f0 41 67 67 72 65 67 61 74 65 73 28 4e 61 6d 65 43  Aggregates(NameC
28500 6f 6e 74 65 78 74 2a 2c 20 45 78 70 72 2a 29 3b  ontext*, Expr*);
28510 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45 78 70  .void sqlite3Exp
28520 72 41 6e 61 6c 79 7a 65 41 67 67 4c 69 73 74 28  rAnalyzeAggList(
28530 4e 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 45 78 70  NameContext*,Exp
28540 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
28550 69 74 65 33 45 78 70 72 43 6f 76 65 72 65 64 42  ite3ExprCoveredB
28560 79 49 6e 64 65 78 28 45 78 70 72 2a 2c 20 69 6e  yIndex(Expr*, in
28570 74 20 69 43 75 72 2c 20 49 6e 64 65 78 20 2a 70  t iCur, Index *p
28580 49 64 78 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  Idx);.int sqlite
28590 33 46 75 6e 63 74 69 6f 6e 55 73 65 73 54 68 69  3FunctionUsesThi
285a0 73 53 72 63 28 45 78 70 72 2a 2c 20 53 72 63 4c  sSrc(Expr*, SrcL
285b0 69 73 74 2a 29 3b 0a 56 64 62 65 20 2a 73 71 6c  ist*);.Vdbe *sql
285c0 69 74 65 33 47 65 74 56 64 62 65 28 50 61 72 73  ite3GetVdbe(Pars
285d0 65 2a 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  e*);.#ifndef SQL
285e0 49 54 45 5f 55 4e 54 45 53 54 41 42 4c 45 0a 76  ITE_UNTESTABLE.v
285f0 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67 53  oid sqlite3PrngS
28600 61 76 65 53 74 61 74 65 28 76 6f 69 64 29 3b 0a  aveState(void);.
28610 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 6e 67  void sqlite3Prng
28620 52 65 73 74 6f 72 65 53 74 61 74 65 28 76 6f 69  RestoreState(voi
28630 64 29 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  d);.#endif.void 
28640 73 71 6c 69 74 65 33 52 6f 6c 6c 62 61 63 6b 41  sqlite3RollbackA
28650 6c 6c 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29  ll(sqlite3*,int)
28660 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6f  ;.void sqlite3Co
28670 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 50  deVerifySchema(P
28680 61 72 73 65 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69  arse*, int);.voi
28690 64 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72  d sqlite3CodeVer
286a0 69 66 79 4e 61 6d 65 64 53 63 68 65 6d 61 28 50  ifyNamedSchema(P
286b0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
286c0 72 20 2a 7a 44 62 29 3b 0a 76 6f 69 64 20 73 71  r *zDb);.void sq
286d0 6c 69 74 65 33 42 65 67 69 6e 54 72 61 6e 73 61  lite3BeginTransa
286e0 63 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e  ction(Parse*, in
286f0 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  t);.void sqlite3
28700 45 6e 64 54 72 61 6e 73 61 63 74 69 6f 6e 28 50  EndTransaction(P
28710 61 72 73 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  arse*,int);.void
28720 20 73 71 6c 69 74 65 33 53 61 76 65 70 6f 69 6e   sqlite3Savepoin
28730 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
28740 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  oken*);.void sql
28750 69 74 65 33 43 6c 6f 73 65 53 61 76 65 70 6f 69  ite3CloseSavepoi
28760 6e 74 73 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a  nts(sqlite3 *);.
28770 76 6f 69 64 20 73 71 6c 69 74 65 33 4c 65 61 76  void sqlite3Leav
28780 65 4d 75 74 65 78 41 6e 64 43 6c 6f 73 65 5a 6f  eMutexAndCloseZo
28790 6d 62 69 65 28 73 71 6c 69 74 65 33 2a 29 3b 0a  mbie(sqlite3*);.
287a0 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70 72 49  int sqlite3ExprI
287b0 73 43 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 29  sConstant(Expr*)
287c0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
287d0 72 49 73 43 6f 6e 73 74 61 6e 74 4e 6f 74 4a 6f  rIsConstantNotJo
287e0 69 6e 28 45 78 70 72 2a 29 3b 0a 69 6e 74 20 73  in(Expr*);.int s
287f0 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
28800 74 61 6e 74 4f 72 46 75 6e 63 74 69 6f 6e 28 45  tantOrFunction(E
28810 78 70 72 2a 2c 20 75 38 29 3b 0a 69 6e 74 20 73  xpr*, u8);.int s
28820 71 6c 69 74 65 33 45 78 70 72 49 73 43 6f 6e 73  qlite3ExprIsCons
28830 74 61 6e 74 4f 72 47 72 6f 75 70 42 79 28 50 61  tantOrGroupBy(Pa
28840 72 73 65 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70  rse*, Expr*, Exp
28850 72 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c  rList*);.int sql
28860 69 74 65 33 45 78 70 72 49 73 54 61 62 6c 65 43  ite3ExprIsTableC
28870 6f 6e 73 74 61 6e 74 28 45 78 70 72 2a 2c 69 6e  onstant(Expr*,in
28880 74 29 3b 0a 23 69 66 64 65 66 20 53 51 4c 49 54  t);.#ifdef SQLIT
28890 45 5f 45 4e 41 42 4c 45 5f 43 55 52 53 4f 52 5f  E_ENABLE_CURSOR_
288a0 48 49 4e 54 53 0a 69 6e 74 20 73 71 6c 69 74 65  HINTS.int sqlite
288b0 33 45 78 70 72 43 6f 6e 74 61 69 6e 73 53 75 62  3ExprContainsSub
288c0 71 75 65 72 79 28 45 78 70 72 2a 29 3b 0a 23 65  query(Expr*);.#e
288d0 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69 74 65 33  ndif.int sqlite3
288e0 45 78 70 72 49 73 49 6e 74 65 67 65 72 28 45 78  ExprIsInteger(Ex
288f0 70 72 2a 2c 20 69 6e 74 2a 29 3b 0a 69 6e 74 20  pr*, int*);.int 
28900 73 71 6c 69 74 65 33 45 78 70 72 43 61 6e 42 65  sqlite3ExprCanBe
28910 4e 75 6c 6c 28 63 6f 6e 73 74 20 45 78 70 72 2a  Null(const Expr*
28920 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78  );.int sqlite3Ex
28930 70 72 4e 65 65 64 73 4e 6f 41 66 66 69 6e 69 74  prNeedsNoAffinit
28940 79 43 68 61 6e 67 65 28 63 6f 6e 73 74 20 45 78  yChange(const Ex
28950 70 72 2a 2c 20 63 68 61 72 29 3b 0a 69 6e 74 20  pr*, char);.int 
28960 73 71 6c 69 74 65 33 49 73 52 6f 77 69 64 28 63  sqlite3IsRowid(c
28970 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69  onst char*);.voi
28980 64 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  d sqlite3Generat
28990 65 52 6f 77 44 65 6c 65 74 65 28 0a 20 20 20 20  eRowDelete(.    
289a0 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 54 72  Parse*,Table*,Tr
289b0 69 67 67 65 72 2a 2c 69 6e 74 2c 69 6e 74 2c 69  igger*,int,int,i
289c0 6e 74 2c 69 31 36 2c 75 38 2c 75 38 2c 75 38 2c  nt,i16,u8,u8,u8,
289d0 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  int);.void sqlit
289e0 65 33 47 65 6e 65 72 61 74 65 52 6f 77 49 6e 64  e3GenerateRowInd
289f0 65 78 44 65 6c 65 74 65 28 50 61 72 73 65 2a 2c  exDelete(Parse*,
28a00 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 69 6e   Table*, int, in
28a10 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 69  t, int*, int);.i
28a20 6e 74 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61  nt sqlite3Genera
28a30 74 65 49 6e 64 65 78 4b 65 79 28 50 61 72 73 65  teIndexKey(Parse
28a40 2a 2c 20 49 6e 64 65 78 2a 2c 20 69 6e 74 2c 20  *, Index*, int, 
28a50 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 49  int, int, int*,I
28a60 6e 64 65 78 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64  ndex*,int);.void
28a70 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
28a80 61 72 74 49 64 78 4c 61 62 65 6c 28 50 61 72 73  artIdxLabel(Pars
28a90 65 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  e*,int);.void sq
28aa0 6c 69 74 65 33 47 65 6e 65 72 61 74 65 43 6f 6e  lite3GenerateCon
28ab0 73 74 72 61 69 6e 74 43 68 65 63 6b 73 28 50 61  straintChecks(Pa
28ac0 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74 2a  rse*,Table*,int*
28ad0 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74 2c 69 6e 74  ,int,int,int,int
28ae0 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
28af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28b00 20 20 20 20 20 20 20 75 38 2c 75 38 2c 69 6e 74         u8,u8,int
28b10 2c 69 6e 74 2a 2c 69 6e 74 2a 29 3b 0a 23 69 66  ,int*,int*);.#if
28b20 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
28b30 45 5f 4e 55 4c 4c 5f 54 52 49 4d 0a 20 20 76 6f  E_NULL_TRIM.  vo
28b40 69 64 20 73 71 6c 69 74 65 33 53 65 74 4d 61 6b  id sqlite3SetMak
28b50 65 52 65 63 6f 72 64 50 35 28 56 64 62 65 2a 2c  eRecordP5(Vdbe*,
28b60 54 61 62 6c 65 2a 29 3b 0a 23 65 6c 73 65 0a 23  Table*);.#else.#
28b70 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 53   define sqlite3S
28b80 65 74 4d 61 6b 65 52 65 63 6f 72 64 50 35 28 41  etMakeRecordP5(A
28b90 2c 42 29 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20  ,B).#endif.void 
28ba0 73 71 6c 69 74 65 33 43 6f 6d 70 6c 65 74 65 49  sqlite3CompleteI
28bb0 6e 73 65 72 74 69 6f 6e 28 50 61 72 73 65 2a 2c  nsertion(Parse*,
28bc0 54 61 62 6c 65 2a 2c 69 6e 74 2c 69 6e 74 2c 69  Table*,int,int,i
28bd0 6e 74 2c 69 6e 74 2a 2c 69 6e 74 2c 69 6e 74 2c  nt,int*,int,int,
28be0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
28bf0 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
28c00 69 63 65 73 28 50 61 72 73 65 2a 2c 20 54 61 62  ices(Parse*, Tab
28c10 6c 65 2a 2c 20 69 6e 74 2c 20 75 38 2c 20 69 6e  le*, int, u8, in
28c20 74 2c 20 75 38 2a 2c 20 69 6e 74 2a 2c 20 69 6e  t, u8*, int*, in
28c30 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
28c40 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
28c50 74 69 6f 6e 28 50 61 72 73 65 2a 2c 20 69 6e 74  tion(Parse*, int
28c60 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  , int);.void sql
28c70 69 74 65 33 4d 75 6c 74 69 57 72 69 74 65 28 50  ite3MultiWrite(P
28c80 61 72 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  arse*);.void sql
28c90 69 74 65 33 4d 61 79 41 62 6f 72 74 28 50 61 72  ite3MayAbort(Par
28ca0 73 65 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  se*);.void sqlit
28cb0 65 33 48 61 6c 74 43 6f 6e 73 74 72 61 69 6e 74  e3HaltConstraint
28cc0 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 69 6e  (Parse*, int, in
28cd0 74 2c 20 63 68 61 72 2a 2c 20 69 38 2c 20 75 38  t, char*, i8, u8
28ce0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 55  );.void sqlite3U
28cf0 6e 69 71 75 65 43 6f 6e 73 74 72 61 69 6e 74 28  niqueConstraint(
28d00 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 49 6e 64  Parse*, int, Ind
28d10 65 78 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  ex*);.void sqlit
28d20 65 33 52 6f 77 69 64 43 6f 6e 73 74 72 61 69 6e  e3RowidConstrain
28d30 74 28 50 61 72 73 65 2a 2c 20 69 6e 74 2c 20 54  t(Parse*, int, T
28d40 61 62 6c 65 2a 29 3b 0a 45 78 70 72 20 2a 73 71  able*);.Expr *sq
28d50 6c 69 74 65 33 45 78 70 72 44 75 70 28 73 71 6c  lite3ExprDup(sql
28d60 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69 6e 74 29  ite3*,Expr*,int)
28d70 3b 0a 45 78 70 72 4c 69 73 74 20 2a 73 71 6c 69  ;.ExprList *sqli
28d80 74 65 33 45 78 70 72 4c 69 73 74 44 75 70 28 73  te3ExprListDup(s
28d90 71 6c 69 74 65 33 2a 2c 45 78 70 72 4c 69 73 74  qlite3*,ExprList
28da0 2a 2c 69 6e 74 29 3b 0a 53 72 63 4c 69 73 74 20  *,int);.SrcList 
28db0 2a 73 71 6c 69 74 65 33 53 72 63 4c 69 73 74 44  *sqlite3SrcListD
28dc0 75 70 28 73 71 6c 69 74 65 33 2a 2c 53 72 63 4c  up(sqlite3*,SrcL
28dd0 69 73 74 2a 2c 69 6e 74 29 3b 0a 49 64 4c 69 73  ist*,int);.IdLis
28de0 74 20 2a 73 71 6c 69 74 65 33 49 64 4c 69 73 74  t *sqlite3IdList
28df0 44 75 70 28 73 71 6c 69 74 65 33 2a 2c 49 64 4c  Dup(sqlite3*,IdL
28e00 69 73 74 2a 29 3b 0a 53 65 6c 65 63 74 20 2a 73  ist*);.Select *s
28e10 71 6c 69 74 65 33 53 65 6c 65 63 74 44 75 70 28  qlite3SelectDup(
28e20 73 71 6c 69 74 65 33 2a 2c 53 65 6c 65 63 74 2a  sqlite3*,Select*
28e30 2c 69 6e 74 29 3b 0a 23 69 66 20 53 45 4c 45 43  ,int);.#if SELEC
28e40 54 54 52 41 43 45 5f 45 4e 41 42 4c 45 44 0a 76  TTRACE_ENABLED.v
28e50 6f 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63  oid sqlite3Selec
28e60 74 53 65 74 4e 61 6d 65 28 53 65 6c 65 63 74 2a  tSetName(Select*
28e70 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 23  ,const char*);.#
28e80 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20 73 71  else.# define sq
28e90 6c 69 74 65 33 53 65 6c 65 63 74 53 65 74 4e 61  lite3SelectSetNa
28ea0 6d 65 28 41 2c 42 29 0a 23 65 6e 64 69 66 0a 76  me(A,B).#endif.v
28eb0 6f 69 64 20 73 71 6c 69 74 65 33 49 6e 73 65 72  oid sqlite3Inser
28ec0 74 42 75 69 6c 74 69 6e 46 75 6e 63 73 28 46 75  tBuiltinFuncs(Fu
28ed0 6e 63 44 65 66 2a 2c 69 6e 74 29 3b 0a 46 75 6e  ncDef*,int);.Fun
28ee0 63 44 65 66 20 2a 73 71 6c 69 74 65 33 46 69 6e  cDef *sqlite3Fin
28ef0 64 46 75 6e 63 74 69 6f 6e 28 73 71 6c 69 74 65  dFunction(sqlite
28f00 33 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69  3*,const char*,i
28f10 6e 74 2c 75 38 2c 75 38 29 3b 0a 76 6f 69 64 20  nt,u8,u8);.void 
28f20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 42  sqlite3RegisterB
28f30 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f 6e 73 28  uiltinFunctions(
28f40 76 6f 69 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69  void);.void sqli
28f50 74 65 33 52 65 67 69 73 74 65 72 44 61 74 65 54  te3RegisterDateT
28f60 69 6d 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  imeFunctions(voi
28f70 64 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  d);.void sqlite3
28f80 52 65 67 69 73 74 65 72 50 65 72 43 6f 6e 6e 65  RegisterPerConne
28f90 63 74 69 6f 6e 42 75 69 6c 74 69 6e 46 75 6e 63  ctionBuiltinFunc
28fa0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 29 3b  tions(sqlite3*);
28fb0 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 61 66 65  .int sqlite3Safe
28fc0 74 79 43 68 65 63 6b 4f 6b 28 73 71 6c 69 74 65  tyCheckOk(sqlite
28fd0 33 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  3*);.int sqlite3
28fe0 53 61 66 65 74 79 43 68 65 63 6b 53 69 63 6b 4f  SafetyCheckSickO
28ff0 72 4f 6b 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76  rOk(sqlite3*);.v
29000 6f 69 64 20 73 71 6c 69 74 65 33 43 68 61 6e 67  oid sqlite3Chang
29010 65 43 6f 6f 6b 69 65 28 50 61 72 73 65 2a 2c 20  eCookie(Parse*, 
29020 69 6e 74 29 3b 0a 0a 23 69 66 20 21 64 65 66 69  int);..#if !defi
29030 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
29040 56 49 45 57 29 20 26 26 20 21 64 65 66 69 6e 65  VIEW) && !define
29050 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
29060 49 47 47 45 52 29 0a 76 6f 69 64 20 73 71 6c 69  IGGER).void sqli
29070 74 65 33 4d 61 74 65 72 69 61 6c 69 7a 65 56 69  te3MaterializeVi
29080 65 77 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ew(Parse*, Table
29090 2a 2c 20 45 78 70 72 2a 2c 20 69 6e 74 29 3b 0a  *, Expr*, int);.
290a0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
290b0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
290c0 47 45 52 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  GER.  void sqlit
290d0 65 33 42 65 67 69 6e 54 72 69 67 67 65 72 28 50  e3BeginTrigger(P
290e0 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c 54 6f  arse*, Token*,To
290f0 6b 65 6e 2a 2c 69 6e 74 2c 69 6e 74 2c 49 64 4c  ken*,int,int,IdL
29100 69 73 74 2a 2c 53 72 63 4c 69 73 74 2a 2c 0a 20  ist*,SrcList*,. 
29110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29120 20 20 20 20 20 20 20 20 20 20 45 78 70 72 2a 2c            Expr*,
29130 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69  int, int);.  voi
29140 64 20 73 71 6c 69 74 65 33 46 69 6e 69 73 68 54  d sqlite3FinishT
29150 72 69 67 67 65 72 28 50 61 72 73 65 2a 2c 20 54  rigger(Parse*, T
29160 72 69 67 67 65 72 53 74 65 70 2a 2c 20 54 6f 6b  riggerStep*, Tok
29170 65 6e 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c  en*);.  void sql
29180 69 74 65 33 44 72 6f 70 54 72 69 67 67 65 72 28  ite3DropTrigger(
29190 50 61 72 73 65 2a 2c 20 53 72 63 4c 69 73 74 2a  Parse*, SrcList*
291a0 2c 20 69 6e 74 29 3b 0a 20 20 76 6f 69 64 20 73  , int);.  void s
291b0 71 6c 69 74 65 33 44 72 6f 70 54 72 69 67 67 65  qlite3DropTrigge
291c0 72 50 74 72 28 50 61 72 73 65 2a 2c 20 54 72 69  rPtr(Parse*, Tri
291d0 67 67 65 72 2a 29 3b 0a 20 20 54 72 69 67 67 65  gger*);.  Trigge
291e0 72 20 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65  r *sqlite3Trigge
291f0 72 73 45 78 69 73 74 28 50 61 72 73 65 20 2a 2c  rsExist(Parse *,
29200 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20 45 78   Table*, int, Ex
29210 70 72 4c 69 73 74 2a 2c 20 69 6e 74 20 2a 70 4d  prList*, int *pM
29220 61 73 6b 29 3b 0a 20 20 54 72 69 67 67 65 72 20  ask);.  Trigger 
29230 2a 73 71 6c 69 74 65 33 54 72 69 67 67 65 72 4c  *sqlite3TriggerL
29240 69 73 74 28 50 61 72 73 65 20 2a 2c 20 54 61 62  ist(Parse *, Tab
29250 6c 65 20 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  le *);.  void sq
29260 6c 69 74 65 33 43 6f 64 65 52 6f 77 54 72 69 67  lite3CodeRowTrig
29270 67 65 72 28 50 61 72 73 65 2a 2c 20 54 72 69 67  ger(Parse*, Trig
29280 67 65 72 20 2a 2c 20 69 6e 74 2c 20 45 78 70 72  ger *, int, Expr
29290 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 54 61 62 6c  List*, int, Tabl
292a0 65 20 2a 2c 0a 20 20 20 20 20 20 20 20 20 20 20  e *,.           
292b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
292c0 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
292d0 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 43  .  void sqlite3C
292e0 6f 64 65 52 6f 77 54 72 69 67 67 65 72 44 69 72  odeRowTriggerDir
292f0 65 63 74 28 50 61 72 73 65 20 2a 2c 20 54 72 69  ect(Parse *, Tri
29300 67 67 65 72 20 2a 2c 20 54 61 62 6c 65 20 2a 2c  gger *, Table *,
29310 20 69 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 29 3b   int, int, int);
29320 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 56 69  .  void sqliteVi
29330 65 77 54 72 69 67 67 65 72 73 28 50 61 72 73 65  ewTriggers(Parse
29340 2a 2c 20 54 61 62 6c 65 2a 2c 20 45 78 70 72 2a  *, Table*, Expr*
29350 2c 20 69 6e 74 2c 20 45 78 70 72 4c 69 73 74 2a  , int, ExprList*
29360 29 3b 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65  );.  void sqlite
29370 33 44 65 6c 65 74 65 54 72 69 67 67 65 72 53 74  3DeleteTriggerSt
29380 65 70 28 73 71 6c 69 74 65 33 2a 2c 20 54 72 69  ep(sqlite3*, Tri
29390 67 67 65 72 53 74 65 70 2a 29 3b 0a 20 20 54 72  ggerStep*);.  Tr
293a0 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69 74  iggerStep *sqlit
293b0 65 33 54 72 69 67 67 65 72 53 65 6c 65 63 74 53  e3TriggerSelectS
293c0 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 53 65 6c  tep(sqlite3*,Sel
293d0 65 63 74 2a 29 3b 0a 20 20 54 72 69 67 67 65 72  ect*);.  Trigger
293e0 53 74 65 70 20 2a 73 71 6c 69 74 65 33 54 72 69  Step *sqlite3Tri
293f0 67 67 65 72 49 6e 73 65 72 74 53 74 65 70 28 73  ggerInsertStep(s
29400 71 6c 69 74 65 33 2a 2c 54 6f 6b 65 6e 2a 2c 20  qlite3*,Token*, 
29410 49 64 4c 69 73 74 2a 2c 0a 20 20 20 20 20 20 20  IdList*,.       
29420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29440 20 53 65 6c 65 63 74 2a 2c 75 38 29 3b 0a 20 20   Select*,u8);.  
29450 54 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c  TriggerStep *sql
29460 69 74 65 33 54 72 69 67 67 65 72 55 70 64 61 74  ite3TriggerUpdat
29470 65 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54  eStep(sqlite3*,T
29480 6f 6b 65 6e 2a 2c 45 78 70 72 4c 69 73 74 2a 2c  oken*,ExprList*,
29490 20 45 78 70 72 2a 2c 20 75 38 29 3b 0a 20 20 54   Expr*, u8);.  T
294a0 72 69 67 67 65 72 53 74 65 70 20 2a 73 71 6c 69  riggerStep *sqli
294b0 74 65 33 54 72 69 67 67 65 72 44 65 6c 65 74 65  te3TriggerDelete
294c0 53 74 65 70 28 73 71 6c 69 74 65 33 2a 2c 54 6f  Step(sqlite3*,To
294d0 6b 65 6e 2a 2c 20 45 78 70 72 2a 29 3b 0a 20 20  ken*, Expr*);.  
294e0 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
294f0 74 65 54 72 69 67 67 65 72 28 73 71 6c 69 74 65  teTrigger(sqlite
29500 33 2a 2c 20 54 72 69 67 67 65 72 2a 29 3b 0a 20  3*, Trigger*);. 
29510 20 76 6f 69 64 20 73 71 6c 69 74 65 33 55 6e 6c   void sqlite3Unl
29520 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
29530 67 65 72 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74  ger(sqlite3*,int
29540 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20  ,const char*);. 
29550 20 75 33 32 20 73 71 6c 69 74 65 33 54 72 69 67   u32 sqlite3Trig
29560 67 65 72 43 6f 6c 6d 61 73 6b 28 50 61 72 73 65  gerColmask(Parse
29570 2a 2c 54 72 69 67 67 65 72 2a 2c 45 78 70 72 4c  *,Trigger*,ExprL
29580 69 73 74 2a 2c 69 6e 74 2c 69 6e 74 2c 54 61 62  ist*,int,int,Tab
29590 6c 65 2a 2c 69 6e 74 29 3b 0a 23 20 64 65 66 69  le*,int);.# defi
295a0 6e 65 20 73 71 6c 69 74 65 33 50 61 72 73 65 54  ne sqlite3ParseT
295b0 6f 70 6c 65 76 65 6c 28 70 29 20 28 28 70 29 2d  oplevel(p) ((p)-
295c0 3e 70 54 6f 70 6c 65 76 65 6c 20 3f 20 28 70 29  >pToplevel ? (p)
295d0 2d 3e 70 54 6f 70 6c 65 76 65 6c 20 3a 20 28 70  ->pToplevel : (p
295e0 29 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  )).# define sqli
295f0 74 65 33 49 73 54 6f 70 6c 65 76 65 6c 28 70 29  te3IsToplevel(p)
29600 20 28 28 70 29 2d 3e 70 54 6f 70 6c 65 76 65 6c   ((p)->pToplevel
29610 3d 3d 30 29 0a 23 65 6c 73 65 0a 23 20 64 65 66  ==0).#else.# def
29620 69 6e 65 20 73 71 6c 69 74 65 33 54 72 69 67 67  ine sqlite3Trigg
29630 65 72 73 45 78 69 73 74 28 42 2c 43 2c 44 2c 45  ersExist(B,C,D,E
29640 2c 46 29 20 30 0a 23 20 64 65 66 69 6e 65 20 73  ,F) 0.# define s
29650 71 6c 69 74 65 33 44 65 6c 65 74 65 54 72 69 67  qlite3DeleteTrig
29660 67 65 72 28 41 2c 42 29 0a 23 20 64 65 66 69 6e  ger(A,B).# defin
29670 65 20 73 71 6c 69 74 65 33 44 72 6f 70 54 72 69  e sqlite3DropTri
29680 67 67 65 72 50 74 72 28 41 2c 42 29 0a 23 20 64  ggerPtr(A,B).# d
29690 65 66 69 6e 65 20 73 71 6c 69 74 65 33 55 6e 6c  efine sqlite3Unl
296a0 69 6e 6b 41 6e 64 44 65 6c 65 74 65 54 72 69 67  inkAndDeleteTrig
296b0 67 65 72 28 41 2c 42 2c 43 29 0a 23 20 64 65 66  ger(A,B,C).# def
296c0 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64 65 52  ine sqlite3CodeR
296d0 6f 77 54 72 69 67 67 65 72 28 41 2c 42 2c 43 2c  owTrigger(A,B,C,
296e0 44 2c 45 2c 46 2c 47 2c 48 2c 49 29 0a 23 20 64  D,E,F,G,H,I).# d
296f0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 64  efine sqlite3Cod
29700 65 52 6f 77 54 72 69 67 67 65 72 44 69 72 65 63  eRowTriggerDirec
29710 74 28 41 2c 42 2c 43 2c 44 2c 45 2c 46 29 0a 23  t(A,B,C,D,E,F).#
29720 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54   define sqlite3T
29730 72 69 67 67 65 72 4c 69 73 74 28 58 2c 20 59 29  riggerList(X, Y)
29740 20 30 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69   0.# define sqli
29750 74 65 33 50 61 72 73 65 54 6f 70 6c 65 76 65 6c  te3ParseToplevel
29760 28 70 29 20 70 0a 23 20 64 65 66 69 6e 65 20 73  (p) p.# define s
29770 71 6c 69 74 65 33 49 73 54 6f 70 6c 65 76 65 6c  qlite3IsToplevel
29780 28 70 29 20 31 0a 23 20 64 65 66 69 6e 65 20 73  (p) 1.# define s
29790 71 6c 69 74 65 33 54 72 69 67 67 65 72 43 6f 6c  qlite3TriggerCol
297a0 6d 61 73 6b 28 41 2c 42 2c 43 2c 44 2c 45 2c 46  mask(A,B,C,D,E,F
297b0 2c 47 29 20 30 0a 23 65 6e 64 69 66 0a 0a 69 6e  ,G) 0.#endif..in
297c0 74 20 73 71 6c 69 74 65 33 4a 6f 69 6e 54 79 70  t sqlite3JoinTyp
297d0 65 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a  e(Parse*, Token*
297e0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
297f0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 43  );.void sqlite3C
29800 72 65 61 74 65 46 6f 72 65 69 67 6e 4b 65 79 28  reateForeignKey(
29810 50 61 72 73 65 2a 2c 20 45 78 70 72 4c 69 73 74  Parse*, ExprList
29820 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 45 78 70 72 4c  *, Token*, ExprL
29830 69 73 74 2a 2c 20 69 6e 74 29 3b 0a 76 6f 69 64  ist*, int);.void
29840 20 73 71 6c 69 74 65 33 44 65 66 65 72 46 6f 72   sqlite3DeferFor
29850 65 69 67 6e 4b 65 79 28 50 61 72 73 65 2a 2c 20  eignKey(Parse*, 
29860 69 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51  int);.#ifndef SQ
29870 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 48 4f 52  LITE_OMIT_AUTHOR
29880 49 5a 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 73  IZATION.  void s
29890 71 6c 69 74 65 33 41 75 74 68 52 65 61 64 28 50  qlite3AuthRead(P
298a0 61 72 73 65 2a 2c 45 78 70 72 2a 2c 53 63 68 65  arse*,Expr*,Sche
298b0 6d 61 2a 2c 53 72 63 4c 69 73 74 2a 29 3b 0a 20  ma*,SrcList*);. 
298c0 20 69 6e 74 20 73 71 6c 69 74 65 33 41 75 74 68   int sqlite3Auth
298d0 43 68 65 63 6b 28 50 61 72 73 65 2a 2c 69 6e 74  Check(Parse*,int
298e0 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63  , const char*, c
298f0 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73  onst char*, cons
29900 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f 69 64  t char*);.  void
29910 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f 6e 74   sqlite3AuthCont
29920 65 78 74 50 75 73 68 28 50 61 72 73 65 2a 2c 20  extPush(Parse*, 
29930 41 75 74 68 43 6f 6e 74 65 78 74 2a 2c 20 63 6f  AuthContext*, co
29940 6e 73 74 20 63 68 61 72 2a 29 3b 0a 20 20 76 6f  nst char*);.  vo
29950 69 64 20 73 71 6c 69 74 65 33 41 75 74 68 43 6f  id sqlite3AuthCo
29960 6e 74 65 78 74 50 6f 70 28 41 75 74 68 43 6f 6e  ntextPop(AuthCon
29970 74 65 78 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71  text*);.  int sq
29980 6c 69 74 65 33 41 75 74 68 52 65 61 64 43 6f 6c  lite3AuthReadCol
29990 28 50 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63  (Parse*, const c
299a0 68 61 72 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61  har *, const cha
299b0 72 20 2a 2c 20 69 6e 74 29 3b 0a 23 65 6c 73 65  r *, int);.#else
299c0 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65  .# define sqlite
299d0 33 41 75 74 68 52 65 61 64 28 61 2c 62 2c 63 2c  3AuthRead(a,b,c,
299e0 64 29 0a 23 20 64 65 66 69 6e 65 20 73 71 6c 69  d).# define sqli
299f0 74 65 33 41 75 74 68 43 68 65 63 6b 28 61 2c 62  te3AuthCheck(a,b
29a00 2c 63 2c 64 2c 65 29 20 20 20 20 53 51 4c 49 54  ,c,d,e)    SQLIT
29a10 45 5f 4f 4b 0a 23 20 64 65 66 69 6e 65 20 73 71  E_OK.# define sq
29a20 6c 69 74 65 33 41 75 74 68 43 6f 6e 74 65 78 74  lite3AuthContext
29a30 50 75 73 68 28 61 2c 62 2c 63 29 0a 23 20 64 65  Push(a,b,c).# de
29a40 66 69 6e 65 20 73 71 6c 69 74 65 33 41 75 74 68  fine sqlite3Auth
29a50 43 6f 6e 74 65 78 74 50 6f 70 28 61 29 20 20 28  ContextPop(a)  (
29a60 28 76 6f 69 64 29 28 61 29 29 0a 23 65 6e 64 69  (void)(a)).#endi
29a70 66 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 74  f.void sqlite3At
29a80 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78 70  tach(Parse*, Exp
29a90 72 2a 2c 20 45 78 70 72 2a 2c 20 45 78 70 72 2a  r*, Expr*, Expr*
29aa0 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44  );.void sqlite3D
29ab0 65 74 61 63 68 28 50 61 72 73 65 2a 2c 20 45 78  etach(Parse*, Ex
29ac0 70 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  pr*);.void sqlit
29ad0 65 33 46 69 78 49 6e 69 74 28 44 62 46 69 78 65  e3FixInit(DbFixe
29ae0 72 2a 2c 20 50 61 72 73 65 2a 2c 20 69 6e 74 2c  r*, Parse*, int,
29af0 20 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f   const char*, co
29b00 6e 73 74 20 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74  nst Token*);.int
29b10 20 73 71 6c 69 74 65 33 46 69 78 53 72 63 4c 69   sqlite3FixSrcLi
29b20 73 74 28 44 62 46 69 78 65 72 2a 2c 20 53 72 63  st(DbFixer*, Src
29b30 4c 69 73 74 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  List*);.int sqli
29b40 74 65 33 46 69 78 53 65 6c 65 63 74 28 44 62 46  te3FixSelect(DbF
29b50 69 78 65 72 2a 2c 20 53 65 6c 65 63 74 2a 29 3b  ixer*, Select*);
29b60 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69 78 45  .int sqlite3FixE
29b70 78 70 72 28 44 62 46 69 78 65 72 2a 2c 20 45 78  xpr(DbFixer*, Ex
29b80 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  pr*);.int sqlite
29b90 33 46 69 78 45 78 70 72 4c 69 73 74 28 44 62 46  3FixExprList(DbF
29ba0 69 78 65 72 2a 2c 20 45 78 70 72 4c 69 73 74 2a  ixer*, ExprList*
29bb0 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 46 69  );.int sqlite3Fi
29bc0 78 54 72 69 67 67 65 72 53 74 65 70 28 44 62 46  xTriggerStep(DbF
29bd0 69 78 65 72 2a 2c 20 54 72 69 67 67 65 72 53 74  ixer*, TriggerSt
29be0 65 70 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  ep*);.int sqlite
29bf0 33 41 74 6f 46 28 63 6f 6e 73 74 20 63 68 61 72  3AtoF(const char
29c00 20 2a 7a 2c 20 64 6f 75 62 6c 65 2a 2c 20 69 6e   *z, double*, in
29c10 74 2c 20 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69  t, u8);.int sqli
29c20 74 65 33 47 65 74 49 6e 74 33 32 28 63 6f 6e 73  te3GetInt32(cons
29c30 74 20 63 68 61 72 20 2a 2c 20 69 6e 74 2a 29 3b  t char *, int*);
29c40 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f 69  .int sqlite3Atoi
29c50 28 63 6f 6e 73 74 20 63 68 61 72 2a 29 3b 0a 69  (const char*);.i
29c60 6e 74 20 73 71 6c 69 74 65 33 55 74 66 31 36 42  nt sqlite3Utf16B
29c70 79 74 65 4c 65 6e 28 63 6f 6e 73 74 20 76 6f 69  yteLen(const voi
29c80 64 20 2a 70 44 61 74 61 2c 20 69 6e 74 20 6e 43  d *pData, int nC
29c90 68 61 72 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  har);.int sqlite
29ca0 33 55 74 66 38 43 68 61 72 4c 65 6e 28 63 6f 6e  3Utf8CharLen(con
29cb0 73 74 20 63 68 61 72 20 2a 70 44 61 74 61 2c 20  st char *pData, 
29cc0 69 6e 74 20 6e 42 79 74 65 29 3b 0a 75 33 32 20  int nByte);.u32 
29cd0 73 71 6c 69 74 65 33 55 74 66 38 52 65 61 64 28  sqlite3Utf8Read(
29ce0 63 6f 6e 73 74 20 75 38 2a 2a 29 3b 0a 4c 6f 67  const u8**);.Log
29cf0 45 73 74 20 73 71 6c 69 74 65 33 4c 6f 67 45 73  Est sqlite3LogEs
29d00 74 28 75 36 34 29 3b 0a 4c 6f 67 45 73 74 20 73  t(u64);.LogEst s
29d10 71 6c 69 74 65 33 4c 6f 67 45 73 74 41 64 64 28  qlite3LogEstAdd(
29d20 4c 6f 67 45 73 74 2c 4c 6f 67 45 73 74 29 3b 0a  LogEst,LogEst);.
29d30 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
29d40 4d 49 54 5f 56 49 52 54 55 41 4c 54 41 42 4c 45  MIT_VIRTUALTABLE
29d50 0a 4c 6f 67 45 73 74 20 73 71 6c 69 74 65 33 4c  .LogEst sqlite3L
29d60 6f 67 45 73 74 46 72 6f 6d 44 6f 75 62 6c 65 28  ogEstFromDouble(
29d70 64 6f 75 62 6c 65 29 3b 0a 23 65 6e 64 69 66 0a  double);.#endif.
29d80 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
29d90 54 45 5f 45 4e 41 42 4c 45 5f 53 54 4d 54 5f 53  TE_ENABLE_STMT_S
29da0 43 41 4e 53 54 41 54 55 53 29 20 7c 7c 20 5c 0a  CANSTATUS) || \.
29db0 20 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49      defined(SQLI
29dc0 54 45 5f 45 4e 41 42 4c 45 5f 53 54 41 54 33 5f  TE_ENABLE_STAT3_
29dd0 4f 52 5f 53 54 41 54 34 29 20 7c 7c 20 5c 0a 20  OR_STAT4) || \. 
29de0 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
29df0 45 5f 45 58 50 4c 41 49 4e 5f 45 53 54 49 4d 41  E_EXPLAIN_ESTIMA
29e00 54 45 44 5f 52 4f 57 53 29 0a 75 36 34 20 73 71  TED_ROWS).u64 sq
29e10 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
29e20 28 4c 6f 67 45 73 74 29 3b 0a 23 65 6e 64 69 66  (LogEst);.#endif
29e30 0a 56 4c 69 73 74 20 2a 73 71 6c 69 74 65 33 56  .VList *sqlite3V
29e40 4c 69 73 74 41 64 64 28 73 71 6c 69 74 65 33 2a  ListAdd(sqlite3*
29e50 2c 56 4c 69 73 74 2a 2c 63 6f 6e 73 74 20 63 68  ,VList*,const ch
29e60 61 72 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 63 6f  ar*,int,int);.co
29e70 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
29e80 33 56 4c 69 73 74 4e 75 6d 54 6f 4e 61 6d 65 28  3VListNumToName(
29e90 56 4c 69 73 74 2a 2c 69 6e 74 29 3b 0a 69 6e 74  VList*,int);.int
29ea0 20 73 71 6c 69 74 65 33 56 4c 69 73 74 4e 61 6d   sqlite3VListNam
29eb0 65 54 6f 4e 75 6d 28 56 4c 69 73 74 2a 2c 63 6f  eToNum(VList*,co
29ec0 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b 0a  nst char*,int);.
29ed0 0a 2f 2a 0a 2a 2a 20 52 6f 75 74 69 6e 65 73 20  ./*.** Routines 
29ee0 74 6f 20 72 65 61 64 20 61 6e 64 20 77 72 69 74  to read and writ
29ef0 65 20 76 61 72 69 61 62 6c 65 2d 6c 65 6e 67 74  e variable-lengt
29f00 68 20 69 6e 74 65 67 65 72 73 2e 20 20 54 68 65  h integers.  The
29f10 73 65 20 75 73 65 64 20 74 6f 0a 2a 2a 20 62 65  se used to.** be
29f20 20 64 65 66 69 6e 65 64 20 6c 6f 63 61 6c 6c 79   defined locally
29f30 2c 20 62 75 74 20 6e 6f 77 20 77 65 20 75 73 65  , but now we use
29f40 20 74 68 65 20 76 61 72 69 6e 74 20 72 6f 75 74   the varint rout
29f50 69 6e 65 73 20 69 6e 20 74 68 65 20 75 74 69 6c  ines in the util
29f60 2e 63 0a 2a 2a 20 66 69 6c 65 2e 0a 2a 2f 0a 69  .c.** file..*/.i
29f70 6e 74 20 73 71 6c 69 74 65 33 50 75 74 56 61 72  nt sqlite3PutVar
29f80 69 6e 74 28 75 6e 73 69 67 6e 65 64 20 63 68 61  int(unsigned cha
29f90 72 2a 2c 20 75 36 34 29 3b 0a 75 38 20 73 71 6c  r*, u64);.u8 sql
29fa0 69 74 65 33 47 65 74 56 61 72 69 6e 74 28 63 6f  ite3GetVarint(co
29fb0 6e 73 74 20 75 6e 73 69 67 6e 65 64 20 63 68 61  nst unsigned cha
29fc0 72 20 2a 2c 20 75 36 34 20 2a 29 3b 0a 75 38 20  r *, u64 *);.u8 
29fd0 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74  sqlite3GetVarint
29fe0 33 32 28 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65  32(const unsigne
29ff0 64 20 63 68 61 72 20 2a 2c 20 75 33 32 20 2a 29  d char *, u32 *)
2a000 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 56 61 72  ;.int sqlite3Var
2a010 69 6e 74 4c 65 6e 28 75 36 34 20 76 29 3b 0a 0a  intLen(u64 v);..
2a020 2f 2a 0a 2a 2a 20 54 68 65 20 63 6f 6d 6d 6f 6e  /*.** The common
2a030 20 63 61 73 65 20 69 73 20 66 6f 72 20 61 20 76   case is for a v
2a040 61 72 69 6e 74 20 74 6f 20 62 65 20 61 20 73 69  arint to be a si
2a050 6e 67 6c 65 20 62 79 74 65 2e 20 20 54 68 65 79  ngle byte.  They
2a060 20 66 6f 6c 6c 6f 77 69 6e 67 0a 2a 2a 20 6d 61   following.** ma
2a070 63 72 6f 73 20 68 61 6e 64 6c 65 20 74 68 65 20  cros handle the 
2a080 63 6f 6d 6d 6f 6e 20 63 61 73 65 20 77 69 74 68  common case with
2a090 6f 75 74 20 61 20 70 72 6f 63 65 64 75 72 65 20  out a procedure 
2a0a0 63 61 6c 6c 2c 20 62 75 74 20 74 68 65 6e 20 63  call, but then c
2a0b0 61 6c 6c 0a 2a 2a 20 74 68 65 20 70 72 6f 63 65  all.** the proce
2a0c0 64 75 72 65 20 66 6f 72 20 6c 61 72 67 65 72 20  dure for larger 
2a0d0 76 61 72 69 6e 74 73 2e 0a 2a 2f 0a 23 64 65 66  varints..*/.#def
2a0e0 69 6e 65 20 67 65 74 56 61 72 69 6e 74 33 32 28  ine getVarint32(
2a0f0 41 2c 42 29 20 20 5c 0a 20 20 28 75 38 29 28 28  A,B)  \.  (u8)((
2a100 2a 28 41 29 3c 28 75 38 29 30 78 38 30 29 3f 28  *(A)<(u8)0x80)?(
2a110 28 42 29 3d 28 75 33 32 29 2a 28 41 29 29 2c 31  (B)=(u32)*(A)),1
2a120 3a 73 71 6c 69 74 65 33 47 65 74 56 61 72 69 6e  :sqlite3GetVarin
2a130 74 33 32 28 28 41 29 2c 28 75 33 32 20 2a 29 26  t32((A),(u32 *)&
2a140 28 42 29 29 29 0a 23 64 65 66 69 6e 65 20 70 75  (B))).#define pu
2a150 74 56 61 72 69 6e 74 33 32 28 41 2c 42 29 20 20  tVarint32(A,B)  
2a160 5c 0a 20 20 28 75 38 29 28 28 28 75 33 32 29 28  \.  (u8)(((u32)(
2a170 42 29 3c 28 75 33 32 29 30 78 38 30 29 3f 28 2a  B)<(u32)0x80)?(*
2a180 28 41 29 3d 28 75 6e 73 69 67 6e 65 64 20 63 68  (A)=(unsigned ch
2a190 61 72 29 28 42 29 29 2c 31 3a 5c 0a 20 20 73 71  ar)(B)),1:\.  sq
2a1a0 6c 69 74 65 33 50 75 74 56 61 72 69 6e 74 28 28  lite3PutVarint((
2a1b0 41 29 2c 28 42 29 29 29 0a 23 64 65 66 69 6e 65  A),(B))).#define
2a1c0 20 67 65 74 56 61 72 69 6e 74 20 20 20 20 73 71   getVarint    sq
2a1d0 6c 69 74 65 33 47 65 74 56 61 72 69 6e 74 0a 23  lite3GetVarint.#
2a1e0 64 65 66 69 6e 65 20 70 75 74 56 61 72 69 6e 74  define putVarint
2a1f0 20 20 20 20 73 71 6c 69 74 65 33 50 75 74 56 61      sqlite3PutVa
2a200 72 69 6e 74 0a 0a 0a 63 6f 6e 73 74 20 63 68 61  rint...const cha
2a210 72 20 2a 73 71 6c 69 74 65 33 49 6e 64 65 78 41  r *sqlite3IndexA
2a220 66 66 69 6e 69 74 79 53 74 72 28 73 71 6c 69 74  ffinityStr(sqlit
2a230 65 33 2a 2c 20 49 6e 64 65 78 2a 29 3b 0a 76 6f  e3*, Index*);.vo
2a240 69 64 20 73 71 6c 69 74 65 33 54 61 62 6c 65 41  id sqlite3TableA
2a250 66 66 69 6e 69 74 79 28 56 64 62 65 2a 2c 20 54  ffinity(Vdbe*, T
2a260 61 62 6c 65 2a 2c 20 69 6e 74 29 3b 0a 63 68 61  able*, int);.cha
2a270 72 20 73 71 6c 69 74 65 33 43 6f 6d 70 61 72 65  r sqlite3Compare
2a280 41 66 66 69 6e 69 74 79 28 45 78 70 72 20 2a 70  Affinity(Expr *p
2a290 45 78 70 72 2c 20 63 68 61 72 20 61 66 66 32 29  Expr, char aff2)
2a2a0 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49 6e 64  ;.int sqlite3Ind
2a2b0 65 78 41 66 66 69 6e 69 74 79 4f 6b 28 45 78 70  exAffinityOk(Exp
2a2c0 72 20 2a 70 45 78 70 72 2c 20 63 68 61 72 20 69  r *pExpr, char i
2a2d0 64 78 5f 61 66 66 69 6e 69 74 79 29 3b 0a 63 68  dx_affinity);.ch
2a2e0 61 72 20 73 71 6c 69 74 65 33 54 61 62 6c 65 43  ar sqlite3TableC
2a2f0 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 54 61  olumnAffinity(Ta
2a300 62 6c 65 2a 2c 69 6e 74 29 3b 0a 63 68 61 72 20  ble*,int);.char 
2a310 73 71 6c 69 74 65 33 45 78 70 72 41 66 66 69 6e  sqlite3ExprAffin
2a320 69 74 79 28 45 78 70 72 20 2a 70 45 78 70 72 29  ity(Expr *pExpr)
2a330 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 74 6f  ;.int sqlite3Ato
2a340 69 36 34 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  i64(const char*,
2a350 20 69 36 34 2a 2c 20 69 6e 74 2c 20 75 38 29 3b   i64*, int, u8);
2a360 0a 69 6e 74 20 73 71 6c 69 74 65 33 44 65 63 4f  .int sqlite3DecO
2a370 72 48 65 78 54 6f 49 36 34 28 63 6f 6e 73 74 20  rHexToI64(const 
2a380 63 68 61 72 2a 2c 20 69 36 34 2a 29 3b 0a 76 6f  char*, i64*);.vo
2a390 69 64 20 73 71 6c 69 74 65 33 45 72 72 6f 72 57  id sqlite3ErrorW
2a3a0 69 74 68 4d 73 67 28 73 71 6c 69 74 65 33 2a 2c  ithMsg(sqlite3*,
2a3b0 20 69 6e 74 2c 20 63 6f 6e 73 74 20 63 68 61 72   int, const char
2a3c0 2a 2c 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73 71 6c  *,...);.void sql
2a3d0 69 74 65 33 45 72 72 6f 72 28 73 71 6c 69 74 65  ite3Error(sqlite
2a3e0 33 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71  3*,int);.void sq
2a3f0 6c 69 74 65 33 53 79 73 74 65 6d 45 72 72 6f 72  lite3SystemError
2a400 28 73 71 6c 69 74 65 33 2a 2c 69 6e 74 29 3b 0a  (sqlite3*,int);.
2a410 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 48 65 78  void *sqlite3Hex
2a420 54 6f 42 6c 6f 62 28 73 71 6c 69 74 65 33 2a 2c  ToBlob(sqlite3*,
2a430 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20   const char *z, 
2a440 69 6e 74 20 6e 29 3b 0a 75 38 20 73 71 6c 69 74  int n);.u8 sqlit
2a450 65 33 48 65 78 54 6f 49 6e 74 28 69 6e 74 20 68  e3HexToInt(int h
2a460 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 77  );.int sqlite3Tw
2a470 6f 50 61 72 74 4e 61 6d 65 28 50 61 72 73 65 20  oPartName(Parse 
2a480 2a 2c 20 54 6f 6b 65 6e 20 2a 2c 20 54 6f 6b 65  *, Token *, Toke
2a490 6e 20 2a 2c 20 54 6f 6b 65 6e 20 2a 2a 29 3b 0a  n *, Token **);.
2a4a0 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2a4b0 49 54 45 5f 4e 45 45 44 5f 45 52 52 5f 4e 41 4d  ITE_NEED_ERR_NAM
2a4c0 45 29 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  E).const char *s
2a4d0 71 6c 69 74 65 33 45 72 72 4e 61 6d 65 28 69 6e  qlite3ErrName(in
2a4e0 74 29 3b 0a 23 65 6e 64 69 66 0a 0a 63 6f 6e 73  t);.#endif..cons
2a4f0 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 45  t char *sqlite3E
2a500 72 72 53 74 72 28 69 6e 74 29 3b 0a 69 6e 74 20  rrStr(int);.int 
2a510 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d  sqlite3ReadSchem
2a520 61 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  a(Parse *pParse)
2a530 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74  ;.CollSeq *sqlit
2a540 65 33 46 69 6e 64 43 6f 6c 6c 53 65 71 28 73 71  e3FindCollSeq(sq
2a550 6c 69 74 65 33 2a 2c 75 38 20 65 6e 63 2c 20 63  lite3*,u8 enc, c
2a560 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29 3b  onst char*,int);
2a570 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a580 33 4c 6f 63 61 74 65 43 6f 6c 6c 53 65 71 28 50  3LocateCollSeq(P
2a590 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63 6f  arse *pParse, co
2a5a0 6e 73 74 20 63 68 61 72 2a 7a 4e 61 6d 65 29 3b  nst char*zName);
2a5b0 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c 69 74 65  .CollSeq *sqlite
2a5c0 33 45 78 70 72 43 6f 6c 6c 53 65 71 28 50 61 72  3ExprCollSeq(Par
2a5d0 73 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72  se *pParse, Expr
2a5e0 20 2a 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a   *pExpr);.Expr *
2a5f0 73 71 6c 69 74 65 33 45 78 70 72 41 64 64 43 6f  sqlite3ExprAddCo
2a600 6c 6c 61 74 65 54 6f 6b 65 6e 28 50 61 72 73 65  llateToken(Parse
2a610 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 2a 2c   *pParse, Expr*,
2a620 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 2a 2c 20 69   const Token*, i
2a630 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2a640 65 33 45 78 70 72 41 64 64 43 6f 6c 6c 61 74 65  e3ExprAddCollate
2a650 53 74 72 69 6e 67 28 50 61 72 73 65 2a 2c 45 78  String(Parse*,Ex
2a660 70 72 2a 2c 63 6f 6e 73 74 20 63 68 61 72 2a 29  pr*,const char*)
2a670 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33 45  ;.Expr *sqlite3E
2a680 78 70 72 53 6b 69 70 43 6f 6c 6c 61 74 65 28 45  xprSkipCollate(E
2a690 78 70 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74  xpr*);.int sqlit
2a6a0 65 33 43 68 65 63 6b 43 6f 6c 6c 53 65 71 28 50  e3CheckCollSeq(P
2a6b0 61 72 73 65 20 2a 2c 20 43 6f 6c 6c 53 65 71 20  arse *, CollSeq 
2a6c0 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 43  *);.int sqlite3C
2a6d0 68 65 63 6b 4f 62 6a 65 63 74 4e 61 6d 65 28 50  heckObjectName(P
2a6e0 61 72 73 65 20 2a 2c 20 63 6f 6e 73 74 20 63 68  arse *, const ch
2a6f0 61 72 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  ar *);.void sqli
2a700 74 65 33 56 64 62 65 53 65 74 43 68 61 6e 67 65  te3VdbeSetChange
2a710 73 28 73 71 6c 69 74 65 33 20 2a 2c 20 69 6e 74  s(sqlite3 *, int
2a720 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 41 64  );.int sqlite3Ad
2a730 64 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29  dInt64(i64*,i64)
2a740 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53 75 62  ;.int sqlite3Sub
2a750 49 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b  Int64(i64*,i64);
2a760 0a 69 6e 74 20 73 71 6c 69 74 65 33 4d 75 6c 49  .int sqlite3MulI
2a770 6e 74 36 34 28 69 36 34 2a 2c 69 36 34 29 3b 0a  nt64(i64*,i64);.
2a780 69 6e 74 20 73 71 6c 69 74 65 33 41 62 73 49 6e  int sqlite3AbsIn
2a790 74 33 32 28 69 6e 74 29 3b 0a 23 69 66 64 65 66  t32(int);.#ifdef
2a7a0 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 38   SQLITE_ENABLE_8
2a7b0 5f 33 5f 4e 41 4d 45 53 0a 76 6f 69 64 20 73 71  _3_NAMES.void sq
2a7c0 6c 69 74 65 33 46 69 6c 65 53 75 66 66 69 78 33  lite3FileSuffix3
2a7d0 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 20 63 68  (const char*, ch
2a7e0 61 72 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65  ar*);.#else.# de
2a7f0 66 69 6e 65 20 73 71 6c 69 74 65 33 46 69 6c 65  fine sqlite3File
2a800 53 75 66 66 69 78 33 28 58 2c 59 29 0a 23 65 6e  Suffix3(X,Y).#en
2a810 64 69 66 0a 75 38 20 73 71 6c 69 74 65 33 47 65  dif.u8 sqlite3Ge
2a820 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
2a830 68 61 72 20 2a 7a 2c 75 38 29 3b 0a 0a 63 6f 6e  har *z,u8);..con
2a840 73 74 20 76 6f 69 64 20 2a 73 71 6c 69 74 65 33  st void *sqlite3
2a850 56 61 6c 75 65 54 65 78 74 28 73 71 6c 69 74 65  ValueText(sqlite
2a860 33 5f 76 61 6c 75 65 2a 2c 20 75 38 29 3b 0a 69  3_value*, u8);.i
2a870 6e 74 20 73 71 6c 69 74 65 33 56 61 6c 75 65 42  nt sqlite3ValueB
2a880 79 74 65 73 28 73 71 6c 69 74 65 33 5f 76 61 6c  ytes(sqlite3_val
2a890 75 65 2a 2c 20 75 38 29 3b 0a 76 6f 69 64 20 73  ue*, u8);.void s
2a8a0 71 6c 69 74 65 33 56 61 6c 75 65 53 65 74 53 74  qlite3ValueSetSt
2a8b0 72 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a  r(sqlite3_value*
2a8c0 2c 20 69 6e 74 2c 20 63 6f 6e 73 74 20 76 6f 69  , int, const voi
2a8d0 64 20 2a 2c 75 38 2c 0a 20 20 20 20 20 20 20 20  d *,u8,.        
2a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a8f0 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29 3b  void(*)(void*));
2a900 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 61 6c  .void sqlite3Val
2a910 75 65 53 65 74 4e 75 6c 6c 28 73 71 6c 69 74 65  ueSetNull(sqlite
2a920 33 5f 76 61 6c 75 65 2a 29 3b 0a 76 6f 69 64 20  3_value*);.void 
2a930 73 71 6c 69 74 65 33 56 61 6c 75 65 46 72 65 65  sqlite3ValueFree
2a940 28 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 2a 29  (sqlite3_value*)
2a950 3b 0a 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 20  ;.sqlite3_value 
2a960 2a 73 71 6c 69 74 65 33 56 61 6c 75 65 4e 65 77  *sqlite3ValueNew
2a970 28 73 71 6c 69 74 65 33 20 2a 29 3b 0a 63 68 61  (sqlite3 *);.cha
2a980 72 20 2a 73 71 6c 69 74 65 33 55 74 66 31 36 74  r *sqlite3Utf16t
2a990 6f 38 28 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f  o8(sqlite3 *, co
2a9a0 6e 73 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20  nst void*, int, 
2a9b0 75 38 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  u8);.int sqlite3
2a9c0 56 61 6c 75 65 46 72 6f 6d 45 78 70 72 28 73 71  ValueFromExpr(sq
2a9d0 6c 69 74 65 33 20 2a 2c 20 45 78 70 72 20 2a 2c  lite3 *, Expr *,
2a9e0 20 75 38 2c 20 75 38 2c 20 73 71 6c 69 74 65 33   u8, u8, sqlite3
2a9f0 5f 76 61 6c 75 65 20 2a 2a 29 3b 0a 76 6f 69 64  _value **);.void
2aa00 20 73 71 6c 69 74 65 33 56 61 6c 75 65 41 70 70   sqlite3ValueApp
2aa10 6c 79 41 66 66 69 6e 69 74 79 28 73 71 6c 69 74  lyAffinity(sqlit
2aa20 65 33 5f 76 61 6c 75 65 20 2a 2c 20 75 38 2c 20  e3_value *, u8, 
2aa30 75 38 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  u8);.#ifndef SQL
2aa40 49 54 45 5f 41 4d 41 4c 47 41 4d 41 54 49 4f 4e  ITE_AMALGAMATION
2aa50 0a 65 78 74 65 72 6e 20 63 6f 6e 73 74 20 75 6e  .extern const un
2aa60 73 69 67 6e 65 64 20 63 68 61 72 20 73 71 6c 69  signed char sqli
2aa70 74 65 33 4f 70 63 6f 64 65 50 72 6f 70 65 72 74  te3OpcodePropert
2aa80 79 5b 5d 3b 0a 65 78 74 65 72 6e 20 63 6f 6e 73  y[];.extern cons
2aa90 74 20 63 68 61 72 20 73 71 6c 69 74 65 33 53 74  t char sqlite3St
2aaa0 72 42 49 4e 41 52 59 5b 5d 3b 0a 65 78 74 65 72  rBINARY[];.exter
2aab0 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e 65 64  n const unsigned
2aac0 20 63 68 61 72 20 73 71 6c 69 74 65 33 55 70 70   char sqlite3Upp
2aad0 65 72 54 6f 4c 6f 77 65 72 5b 5d 3b 0a 65 78 74  erToLower[];.ext
2aae0 65 72 6e 20 63 6f 6e 73 74 20 75 6e 73 69 67 6e  ern const unsign
2aaf0 65 64 20 63 68 61 72 20 73 71 6c 69 74 65 33 43  ed char sqlite3C
2ab00 74 79 70 65 4d 61 70 5b 5d 3b 0a 65 78 74 65 72  typeMap[];.exter
2ab10 6e 20 63 6f 6e 73 74 20 54 6f 6b 65 6e 20 73 71  n const Token sq
2ab20 6c 69 74 65 33 49 6e 74 54 6f 6b 65 6e 73 5b 5d  lite3IntTokens[]
2ab30 3b 0a 65 78 74 65 72 6e 20 53 51 4c 49 54 45 5f  ;.extern SQLITE_
2ab40 57 53 44 20 73 74 72 75 63 74 20 53 71 6c 69 74  WSD struct Sqlit
2ab50 65 33 43 6f 6e 66 69 67 20 73 71 6c 69 74 65 33  e3Config sqlite3
2ab60 43 6f 6e 66 69 67 3b 0a 65 78 74 65 72 6e 20 46  Config;.extern F
2ab70 75 6e 63 44 65 66 48 61 73 68 20 73 71 6c 69 74  uncDefHash sqlit
2ab80 65 33 42 75 69 6c 74 69 6e 46 75 6e 63 74 69 6f  e3BuiltinFunctio
2ab90 6e 73 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  ns;.#ifndef SQLI
2aba0 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 65 78 74 65  TE_OMIT_WSD.exte
2abb0 72 6e 20 69 6e 74 20 73 71 6c 69 74 65 33 50 65  rn int sqlite3Pe
2abc0 6e 64 69 6e 67 42 79 74 65 3b 0a 23 65 6e 64 69  ndingByte;.#endi
2abd0 66 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  f.#endif.void sq
2abe0 6c 69 74 65 33 52 6f 6f 74 50 61 67 65 4d 6f 76  lite3RootPageMov
2abf0 65 64 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  ed(sqlite3*, int
2ac00 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69  , int, int);.voi
2ac10 64 20 73 71 6c 69 74 65 33 52 65 69 6e 64 65 78  d sqlite3Reindex
2ac20 28 50 61 72 73 65 2a 2c 20 54 6f 6b 65 6e 2a 2c  (Parse*, Token*,
2ac30 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69 64 20 73   Token*);.void s
2ac40 71 6c 69 74 65 33 41 6c 74 65 72 46 75 6e 63 74  qlite3AlterFunct
2ac50 69 6f 6e 73 28 76 6f 69 64 29 3b 0a 76 6f 69 64  ions(void);.void
2ac60 20 73 71 6c 69 74 65 33 41 6c 74 65 72 52 65 6e   sqlite3AlterRen
2ac70 61 6d 65 54 61 62 6c 65 28 50 61 72 73 65 2a 2c  ameTable(Parse*,
2ac80 20 53 72 63 4c 69 73 74 2a 2c 20 54 6f 6b 65 6e   SrcList*, Token
2ac90 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 47  *);.int sqlite3G
2aca0 65 74 54 6f 6b 65 6e 28 63 6f 6e 73 74 20 75 6e  etToken(const un
2acb0 73 69 67 6e 65 64 20 63 68 61 72 20 2a 2c 20 69  signed char *, i
2acc0 6e 74 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69  nt *);.void sqli
2acd0 74 65 33 4e 65 73 74 65 64 50 61 72 73 65 28 50  te3NestedParse(P
2ace0 61 72 73 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61  arse*, const cha
2acf0 72 2a 2c 20 2e 2e 2e 29 3b 0a 76 6f 69 64 20 73  r*, ...);.void s
2ad00 71 6c 69 74 65 33 45 78 70 69 72 65 50 72 65 70  qlite3ExpirePrep
2ad10 61 72 65 64 53 74 61 74 65 6d 65 6e 74 73 28 73  aredStatements(s
2ad20 71 6c 69 74 65 33 2a 29 3b 0a 69 6e 74 20 73 71  qlite3*);.int sq
2ad30 6c 69 74 65 33 43 6f 64 65 53 75 62 73 65 6c 65  lite3CodeSubsele
2ad40 63 74 28 50 61 72 73 65 2a 2c 20 45 78 70 72 20  ct(Parse*, Expr 
2ad50 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f  *, int, int);.vo
2ad60 69 64 20 73 71 6c 69 74 65 33 53 65 6c 65 63 74  id sqlite3Select
2ad70 50 72 65 70 28 50 61 72 73 65 2a 2c 20 53 65 6c  Prep(Parse*, Sel
2ad80 65 63 74 2a 2c 20 4e 61 6d 65 43 6f 6e 74 65 78  ect*, NameContex
2ad90 74 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  t*);.void sqlite
2ada0 33 53 65 6c 65 63 74 57 72 6f 6e 67 4e 75 6d 54  3SelectWrongNumT
2adb0 65 72 6d 73 45 72 72 6f 72 28 50 61 72 73 65 20  ermsError(Parse 
2adc0 2a 70 50 61 72 73 65 2c 20 53 65 6c 65 63 74 20  *pParse, Select 
2add0 2a 70 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  *p);.int sqlite3
2ade0 4d 61 74 63 68 53 70 61 6e 4e 61 6d 65 28 63 6f  MatchSpanName(co
2adf0 6e 73 74 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74  nst char*, const
2ae00 20 63 68 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68   char*, const ch
2ae10 61 72 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  ar*, const char*
2ae20 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2ae30 73 6f 6c 76 65 45 78 70 72 4e 61 6d 65 73 28 4e  solveExprNames(N
2ae40 61 6d 65 43 6f 6e 74 65 78 74 2a 2c 20 45 78 70  ameContext*, Exp
2ae50 72 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  r*);.int sqlite3
2ae60 52 65 73 6f 6c 76 65 45 78 70 72 4c 69 73 74 4e  ResolveExprListN
2ae70 61 6d 65 73 28 4e 61 6d 65 43 6f 6e 74 65 78 74  ames(NameContext
2ae80 2a 2c 20 45 78 70 72 4c 69 73 74 2a 29 3b 0a 76  *, ExprList*);.v
2ae90 6f 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c  oid sqlite3Resol
2aea0 76 65 53 65 6c 65 63 74 4e 61 6d 65 73 28 50 61  veSelectNames(Pa
2aeb0 72 73 65 2a 2c 20 53 65 6c 65 63 74 2a 2c 20 4e  rse*, Select*, N
2aec0 61 6d 65 43 6f 6e 74 65 78 74 2a 29 3b 0a 76 6f  ameContext*);.vo
2aed0 69 64 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76  id sqlite3Resolv
2aee0 65 53 65 6c 66 52 65 66 65 72 65 6e 63 65 28 50  eSelfReference(P
2aef0 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 69 6e 74  arse*,Table*,int
2af00 2c 45 78 70 72 2a 2c 45 78 70 72 4c 69 73 74 2a  ,Expr*,ExprList*
2af10 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 52 65  );.int sqlite3Re
2af20 73 6f 6c 76 65 4f 72 64 65 72 47 72 6f 75 70 42  solveOrderGroupB
2af30 79 28 50 61 72 73 65 2a 2c 20 53 65 6c 65 63 74  y(Parse*, Select
2af40 2a 2c 20 45 78 70 72 4c 69 73 74 2a 2c 20 63 6f  *, ExprList*, co
2af50 6e 73 74 20 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nst char*);.void
2af60 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
2af70 66 61 75 6c 74 28 56 64 62 65 20 2a 2c 20 54 61  fault(Vdbe *, Ta
2af80 62 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ble *, int, int)
2af90 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6c  ;.void sqlite3Al
2afa0 74 65 72 46 69 6e 69 73 68 41 64 64 43 6f 6c 75  terFinishAddColu
2afb0 6d 6e 28 50 61 72 73 65 20 2a 2c 20 54 6f 6b 65  mn(Parse *, Toke
2afc0 6e 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74  n *);.void sqlit
2afd0 65 33 41 6c 74 65 72 42 65 67 69 6e 41 64 64 43  e3AlterBeginAddC
2afe0 6f 6c 75 6d 6e 28 50 61 72 73 65 20 2a 2c 20 53  olumn(Parse *, S
2aff0 72 63 4c 69 73 74 20 2a 29 3b 0a 43 6f 6c 6c 53  rcList *);.CollS
2b000 65 71 20 2a 73 71 6c 69 74 65 33 47 65 74 43 6f  eq *sqlite3GetCo
2b010 6c 6c 53 65 71 28 50 61 72 73 65 2a 2c 20 75 38  llSeq(Parse*, u8
2b020 2c 20 43 6f 6c 6c 53 65 71 20 2a 2c 20 63 6f 6e  , CollSeq *, con
2b030 73 74 20 63 68 61 72 2a 29 3b 0a 63 68 61 72 20  st char*);.char 
2b040 73 71 6c 69 74 65 33 41 66 66 69 6e 69 74 79 54  sqlite3AffinityT
2b050 79 70 65 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c  ype(const char*,
2b060 20 75 38 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69   u8*);.void sqli
2b070 74 65 33 41 6e 61 6c 79 7a 65 28 50 61 72 73 65  te3Analyze(Parse
2b080 2a 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e  *, Token*, Token
2b090 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 49  *);.int sqlite3I
2b0a0 6e 76 6f 6b 65 42 75 73 79 48 61 6e 64 6c 65 72  nvokeBusyHandler
2b0b0 28 42 75 73 79 48 61 6e 64 6c 65 72 2a 29 3b 0a  (BusyHandler*);.
2b0c0 69 6e 74 20 73 71 6c 69 74 65 33 46 69 6e 64 44  int sqlite3FindD
2b0d0 62 28 73 71 6c 69 74 65 33 2a 2c 20 54 6f 6b 65  b(sqlite3*, Toke
2b0e0 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33  n*);.int sqlite3
2b0f0 46 69 6e 64 44 62 4e 61 6d 65 28 73 71 6c 69 74  FindDbName(sqlit
2b100 65 33 20 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  e3 *, const char
2b110 20 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33   *);.int sqlite3
2b120 41 6e 61 6c 79 73 69 73 4c 6f 61 64 28 73 71 6c  AnalysisLoad(sql
2b130 69 74 65 33 2a 2c 69 6e 74 20 69 44 42 29 3b 0a  ite3*,int iDB);.
2b140 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 6c 65  void sqlite3Dele
2b150 74 65 49 6e 64 65 78 53 61 6d 70 6c 65 73 28 73  teIndexSamples(s
2b160 71 6c 69 74 65 33 2a 2c 49 6e 64 65 78 2a 29 3b  qlite3*,Index*);
2b170 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 44 65 66  .void sqlite3Def
2b180 61 75 6c 74 52 6f 77 45 73 74 28 49 6e 64 65 78  aultRowEst(Index
2b190 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33  *);.void sqlite3
2b1a0 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63  RegisterLikeFunc
2b1b0 74 69 6f 6e 73 28 73 71 6c 69 74 65 33 2a 2c 20  tions(sqlite3*, 
2b1c0 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  int);.int sqlite
2b1d0 33 49 73 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 28  3IsLikeFunction(
2b1e0 73 71 6c 69 74 65 33 2a 2c 45 78 70 72 2a 2c 69  sqlite3*,Expr*,i
2b1f0 6e 74 2a 2c 63 68 61 72 2a 29 3b 0a 76 6f 69 64  nt*,char*);.void
2b200 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 43 6c   sqlite3SchemaCl
2b210 65 61 72 28 76 6f 69 64 20 2a 29 3b 0a 53 63 68  ear(void *);.Sch
2b220 65 6d 61 20 2a 73 71 6c 69 74 65 33 53 63 68 65  ema *sqlite3Sche
2b230 6d 61 47 65 74 28 73 71 6c 69 74 65 33 20 2a 2c  maGet(sqlite3 *,
2b240 20 42 74 72 65 65 20 2a 29 3b 0a 69 6e 74 20 73   Btree *);.int s
2b250 71 6c 69 74 65 33 53 63 68 65 6d 61 54 6f 49 6e  qlite3SchemaToIn
2b260 64 65 78 28 73 71 6c 69 74 65 33 20 2a 64 62 2c  dex(sqlite3 *db,
2b270 20 53 63 68 65 6d 61 20 2a 29 3b 0a 4b 65 79 49   Schema *);.KeyI
2b280 6e 66 6f 20 2a 73 71 6c 69 74 65 33 4b 65 79 49  nfo *sqlite3KeyI
2b290 6e 66 6f 41 6c 6c 6f 63 28 73 71 6c 69 74 65 33  nfoAlloc(sqlite3
2b2a0 2a 2c 69 6e 74 2c 69 6e 74 29 3b 0a 76 6f 69 64  *,int,int);.void
2b2b0 20 73 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 55   sqlite3KeyInfoU
2b2c0 6e 72 65 66 28 4b 65 79 49 6e 66 6f 2a 29 3b 0a  nref(KeyInfo*);.
2b2d0 4b 65 79 49 6e 66 6f 20 2a 73 71 6c 69 74 65 33  KeyInfo *sqlite3
2b2e0 4b 65 79 49 6e 66 6f 52 65 66 28 4b 65 79 49 6e  KeyInfoRef(KeyIn
2b2f0 66 6f 2a 29 3b 0a 4b 65 79 49 6e 66 6f 20 2a 73  fo*);.KeyInfo *s
2b300 71 6c 69 74 65 33 4b 65 79 49 6e 66 6f 4f 66 49  qlite3KeyInfoOfI
2b310 6e 64 65 78 28 50 61 72 73 65 2a 2c 20 49 6e 64  ndex(Parse*, Ind
2b320 65 78 2a 29 3b 0a 23 69 66 64 65 66 20 53 51 4c  ex*);.#ifdef SQL
2b330 49 54 45 5f 44 45 42 55 47 0a 69 6e 74 20 73 71  ITE_DEBUG.int sq
2b340 6c 69 74 65 33 4b 65 79 49 6e 66 6f 49 73 57 72  lite3KeyInfoIsWr
2b350 69 74 65 61 62 6c 65 28 4b 65 79 49 6e 66 6f 2a  iteable(KeyInfo*
2b360 29 3b 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71  );.#endif.int sq
2b370 6c 69 74 65 33 43 72 65 61 74 65 46 75 6e 63 28  lite3CreateFunc(
2b380 73 71 6c 69 74 65 33 20 2a 2c 20 63 6f 6e 73 74  sqlite3 *, const
2b390 20 63 68 61 72 20 2a 2c 20 69 6e 74 2c 20 69 6e   char *, int, in
2b3a0 74 2c 20 76 6f 69 64 20 2a 2c 0a 20 20 76 6f 69  t, void *,.  voi
2b3b0 64 20 28 2a 29 28 73 71 6c 69 74 65 33 5f 63 6f  d (*)(sqlite3_co
2b3c0 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71 6c 69 74  ntext*,int,sqlit
2b3d0 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c 0a 20 20  e3_value **),.  
2b3e0 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65 33  void (*)(sqlite3
2b3f0 5f 63 6f 6e 74 65 78 74 2a 2c 69 6e 74 2c 73 71  _context*,int,sq
2b400 6c 69 74 65 33 5f 76 61 6c 75 65 20 2a 2a 29 2c  lite3_value **),
2b410 20 76 6f 69 64 20 28 2a 29 28 73 71 6c 69 74 65   void (*)(sqlite
2b420 33 5f 63 6f 6e 74 65 78 74 2a 29 2c 0a 20 20 46  3_context*),.  F
2b430 75 6e 63 44 65 73 74 72 75 63 74 6f 72 20 2a 70  uncDestructor *p
2b440 44 65 73 74 72 75 63 74 6f 72 0a 29 3b 0a 76 6f  Destructor.);.vo
2b450 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 46 61 75  id sqlite3OomFau
2b460 6c 74 28 73 71 6c 69 74 65 33 2a 29 3b 0a 76 6f  lt(sqlite3*);.vo
2b470 69 64 20 73 71 6c 69 74 65 33 4f 6f 6d 43 6c 65  id sqlite3OomCle
2b480 61 72 28 73 71 6c 69 74 65 33 2a 29 3b 0a 69 6e  ar(sqlite3*);.in
2b490 74 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74  t sqlite3ApiExit
2b4a0 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e  (sqlite3 *db, in
2b4b0 74 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 4f  t);.int sqlite3O
2b4c0 70 65 6e 54 65 6d 70 44 61 74 61 62 61 73 65 28  penTempDatabase(
2b4d0 50 61 72 73 65 20 2a 29 3b 0a 0a 76 6f 69 64 20  Parse *);..void 
2b4e0 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 49  sqlite3StrAccumI
2b4f0 6e 69 74 28 53 74 72 41 63 63 75 6d 2a 2c 20 73  nit(StrAccum*, s
2b500 71 6c 69 74 65 33 2a 2c 20 63 68 61 72 2a 2c 20  qlite3*, char*, 
2b510 69 6e 74 2c 20 69 6e 74 29 3b 0a 76 6f 69 64 20  int, int);.void 
2b520 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d 41  sqlite3StrAccumA
2b530 70 70 65 6e 64 28 53 74 72 41 63 63 75 6d 2a 2c  ppend(StrAccum*,
2b540 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74 29  const char*,int)
2b550 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 74  ;.void sqlite3St
2b560 72 41 63 63 75 6d 41 70 70 65 6e 64 41 6c 6c 28  rAccumAppendAll(
2b570 53 74 72 41 63 63 75 6d 2a 2c 63 6f 6e 73 74 20  StrAccum*,const 
2b580 63 68 61 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c  char*);.void sql
2b590 69 74 65 33 41 70 70 65 6e 64 43 68 61 72 28 53  ite3AppendChar(S
2b5a0 74 72 41 63 63 75 6d 2a 2c 69 6e 74 2c 63 68 61  trAccum*,int,cha
2b5b0 72 29 3b 0a 63 68 61 72 20 2a 73 71 6c 69 74 65  r);.char *sqlite
2b5c0 33 53 74 72 41 63 63 75 6d 46 69 6e 69 73 68 28  3StrAccumFinish(
2b5d0 53 74 72 41 63 63 75 6d 2a 29 3b 0a 76 6f 69 64  StrAccum*);.void
2b5e0 20 73 71 6c 69 74 65 33 53 74 72 41 63 63 75 6d   sqlite3StrAccum
2b5f0 52 65 73 65 74 28 53 74 72 41 63 63 75 6d 2a 29  Reset(StrAccum*)
2b600 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 53 65  ;.void sqlite3Se
2b610 6c 65 63 74 44 65 73 74 49 6e 69 74 28 53 65 6c  lectDestInit(Sel
2b620 65 63 74 44 65 73 74 2a 2c 69 6e 74 2c 69 6e 74  ectDest*,int,int
2b630 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74 65 33  );.Expr *sqlite3
2b640 43 72 65 61 74 65 43 6f 6c 75 6d 6e 45 78 70 72  CreateColumnExpr
2b650 28 73 71 6c 69 74 65 33 20 2a 2c 20 53 72 63 4c  (sqlite3 *, SrcL
2b660 69 73 74 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29  ist *, int, int)
2b670 3b 0a 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 42  ;..void sqlite3B
2b680 61 63 6b 75 70 52 65 73 74 61 72 74 28 73 71 6c  ackupRestart(sql
2b690 69 74 65 33 5f 62 61 63 6b 75 70 20 2a 29 3b 0a  ite3_backup *);.
2b6a0 76 6f 69 64 20 73 71 6c 69 74 65 33 42 61 63 6b  void sqlite3Back
2b6b0 75 70 55 70 64 61 74 65 28 73 71 6c 69 74 65 33  upUpdate(sqlite3
2b6c0 5f 62 61 63 6b 75 70 20 2a 2c 20 50 67 6e 6f 2c  _backup *, Pgno,
2b6d0 20 63 6f 6e 73 74 20 75 38 20 2a 29 3b 0a 0a 23   const u8 *);..#
2b6e0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
2b6f0 49 54 5f 53 55 42 51 55 45 52 59 0a 69 6e 74 20  IT_SUBQUERY.int 
2b700 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2b710 49 4e 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  IN(Parse*, Expr*
2b720 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e  );.#else.# defin
2b730 65 20 73 71 6c 69 74 65 33 45 78 70 72 43 68 65  e sqlite3ExprChe
2b740 63 6b 49 4e 28 78 2c 79 29 20 53 51 4c 49 54 45  ckIN(x,y) SQLITE
2b750 5f 4f 4b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  _OK.#endif..#ifd
2b760 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  ef SQLITE_ENABLE
2b770 5f 53 54 41 54 33 5f 4f 52 5f 53 54 41 54 34 0a  _STAT3_OR_STAT4.
2b780 76 6f 69 64 20 73 71 6c 69 74 65 33 41 6e 61 6c  void sqlite3Anal
2b790 79 7a 65 46 75 6e 63 74 69 6f 6e 73 28 76 6f 69  yzeFunctions(voi
2b7a0 64 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 53  d);.int sqlite3S
2b7b0 74 61 74 34 50 72 6f 62 65 53 65 74 56 61 6c 75  tat4ProbeSetValu
2b7c0 65 28 0a 20 20 20 20 50 61 72 73 65 2a 2c 49 6e  e(.    Parse*,In
2b7d0 64 65 78 2a 2c 55 6e 70 61 63 6b 65 64 52 65 63  dex*,UnpackedRec
2b7e0 6f 72 64 2a 2a 2c 45 78 70 72 2a 2c 69 6e 74 2c  ord**,Expr*,int,
2b7f0 69 6e 74 2c 69 6e 74 2a 29 3b 0a 69 6e 74 20 73  int,int*);.int s
2b800 71 6c 69 74 65 33 53 74 61 74 34 56 61 6c 75 65  qlite3Stat4Value
2b810 46 72 6f 6d 45 78 70 72 28 50 61 72 73 65 2a 2c  FromExpr(Parse*,
2b820 20 45 78 70 72 2a 2c 20 75 38 2c 20 73 71 6c 69   Expr*, u8, sqli
2b830 74 65 33 5f 76 61 6c 75 65 2a 2a 29 3b 0a 76 6f  te3_value**);.vo
2b840 69 64 20 73 71 6c 69 74 65 33 53 74 61 74 34 50  id sqlite3Stat4P
2b850 72 6f 62 65 46 72 65 65 28 55 6e 70 61 63 6b 65  robeFree(Unpacke
2b860 64 52 65 63 6f 72 64 2a 29 3b 0a 69 6e 74 20 73  dRecord*);.int s
2b870 71 6c 69 74 65 33 53 74 61 74 34 43 6f 6c 75 6d  qlite3Stat4Colum
2b880 6e 28 73 71 6c 69 74 65 33 2a 2c 20 63 6f 6e 73  n(sqlite3*, cons
2b890 74 20 76 6f 69 64 2a 2c 20 69 6e 74 2c 20 69 6e  t void*, int, in
2b8a0 74 2c 20 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  t, sqlite3_value
2b8b0 2a 2a 29 3b 0a 63 68 61 72 20 73 71 6c 69 74 65  **);.char sqlite
2b8c0 33 49 6e 64 65 78 43 6f 6c 75 6d 6e 41 66 66 69  3IndexColumnAffi
2b8d0 6e 69 74 79 28 73 71 6c 69 74 65 33 2a 2c 20 49  nity(sqlite3*, I
2b8e0 6e 64 65 78 2a 2c 20 69 6e 74 29 3b 0a 23 65 6e  ndex*, int);.#en
2b8f0 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68 65 20 69  dif../*.** The i
2b900 6e 74 65 72 66 61 63 65 20 74 6f 20 74 68 65 20  nterface to the 
2b910 4c 45 4d 4f 4e 2d 67 65 6e 65 72 61 74 65 64 20  LEMON-generated 
2b920 70 61 72 73 65 72 0a 2a 2f 0a 23 69 66 6e 64 65  parser.*/.#ifnde
2b930 66 20 53 51 4c 49 54 45 5f 41 4d 41 4c 47 41 4d  f SQLITE_AMALGAM
2b940 41 54 49 4f 4e 0a 20 20 76 6f 69 64 20 2a 73 71  ATION.  void *sq
2b950 6c 69 74 65 33 50 61 72 73 65 72 41 6c 6c 6f 63  lite3ParserAlloc
2b960 28 76 6f 69 64 2a 28 2a 29 28 75 36 34 29 29 3b  (void*(*)(u64));
2b970 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 50  .  void sqlite3P
2b980 61 72 73 65 72 46 72 65 65 28 76 6f 69 64 2a 2c  arserFree(void*,
2b990 20 76 6f 69 64 28 2a 29 28 76 6f 69 64 2a 29 29   void(*)(void*))
2b9a0 3b 0a 23 65 6e 64 69 66 0a 76 6f 69 64 20 73 71  ;.#endif.void sq
2b9b0 6c 69 74 65 33 50 61 72 73 65 72 28 76 6f 69 64  lite3Parser(void
2b9c0 2a 2c 20 69 6e 74 2c 20 54 6f 6b 65 6e 2c 20 50  *, int, Token, P
2b9d0 61 72 73 65 2a 29 3b 0a 23 69 66 64 65 66 20 59  arse*);.#ifdef Y
2b9e0 59 54 52 41 43 4b 4d 41 58 53 54 41 43 4b 44 45  YTRACKMAXSTACKDE
2b9f0 50 54 48 0a 20 20 69 6e 74 20 73 71 6c 69 74 65  PTH.  int sqlite
2ba00 33 50 61 72 73 65 72 53 74 61 63 6b 50 65 61 6b  3ParserStackPeak
2ba10 28 76 6f 69 64 2a 29 3b 0a 23 65 6e 64 69 66 0a  (void*);.#endif.
2ba20 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 41 75 74  .void sqlite3Aut
2ba30 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 73 28  oLoadExtensions(
2ba40 73 71 6c 69 74 65 33 2a 29 3b 0a 23 69 66 6e 64  sqlite3*);.#ifnd
2ba50 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 4c  ef SQLITE_OMIT_L
2ba60 4f 41 44 5f 45 58 54 45 4e 53 49 4f 4e 0a 20 20  OAD_EXTENSION.  
2ba70 76 6f 69 64 20 73 71 6c 69 74 65 33 43 6c 6f 73  void sqlite3Clos
2ba80 65 45 78 74 65 6e 73 69 6f 6e 73 28 73 71 6c 69  eExtensions(sqli
2ba90 74 65 33 2a 29 3b 0a 23 65 6c 73 65 0a 23 20 64  te3*);.#else.# d
2baa0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6c 6f  efine sqlite3Clo
2bab0 73 65 45 78 74 65 6e 73 69 6f 6e 73 28 58 29 0a  seExtensions(X).
2bac0 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
2bad0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 48 41 52  SQLITE_OMIT_SHAR
2bae0 45 44 5f 43 41 43 48 45 0a 20 20 76 6f 69 64 20  ED_CACHE.  void 
2baf0 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
2bb00 28 50 61 72 73 65 20 2a 2c 20 69 6e 74 2c 20 69  (Parse *, int, i
2bb10 6e 74 2c 20 75 38 2c 20 63 6f 6e 73 74 20 63 68  nt, u8, const ch
2bb20 61 72 20 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23  ar *);.#else.  #
2bb30 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 54 61  define sqlite3Ta
2bb40 62 6c 65 4c 6f 63 6b 28 76 2c 77 2c 78 2c 79 2c  bleLock(v,w,x,y,
2bb50 7a 29 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65  z).#endif..#ifde
2bb60 66 20 53 51 4c 49 54 45 5f 54 45 53 54 0a 20 20  f SQLITE_TEST.  
2bb70 69 6e 74 20 73 71 6c 69 74 65 33 55 74 66 38 54  int sqlite3Utf8T
2bb80 6f 38 28 75 6e 73 69 67 6e 65 64 20 63 68 61 72  o8(unsigned char
2bb90 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64  *);.#endif..#ifd
2bba0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 56  ef SQLITE_OMIT_V
2bbb0 49 52 54 55 41 4c 54 41 42 4c 45 0a 23 20 20 64  IRTUALTABLE.#  d
2bbc0 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61  efine sqlite3Vta
2bbd0 62 43 6c 65 61 72 28 59 29 0a 23 20 20 64 65 66  bClear(Y).#  def
2bbe0 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62 53  ine sqlite3VtabS
2bbf0 79 6e 63 28 58 2c 59 29 20 53 51 4c 49 54 45 5f  ync(X,Y) SQLITE_
2bc00 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  OK.#  define sql
2bc10 69 74 65 33 56 74 61 62 52 6f 6c 6c 62 61 63 6b  ite3VtabRollback
2bc20 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2bc30 6c 69 74 65 33 56 74 61 62 43 6f 6d 6d 69 74 28  lite3VtabCommit(
2bc40 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c  X).#  define sql
2bc50 69 74 65 33 56 74 61 62 49 6e 53 79 6e 63 28 64  ite3VtabInSync(d
2bc60 62 29 20 30 0a 23 20 20 64 65 66 69 6e 65 20 73  b) 0.#  define s
2bc70 71 6c 69 74 65 33 56 74 61 62 4c 6f 63 6b 28 58  qlite3VtabLock(X
2bc80 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69  ).#  define sqli
2bc90 74 65 33 56 74 61 62 55 6e 6c 6f 63 6b 28 58 29  te3VtabUnlock(X)
2bca0 0a 23 20 20 64 65 66 69 6e 65 20 73 71 6c 69 74  .#  define sqlit
2bcb0 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
2bcc0 28 58 29 0a 23 20 20 64 65 66 69 6e 65 20 73 71  (X).#  define sq
2bcd0 6c 69 74 65 33 56 74 61 62 53 61 76 65 70 6f 69  lite3VtabSavepoi
2bce0 6e 74 28 58 2c 20 59 2c 20 5a 29 20 53 51 4c 49  nt(X, Y, Z) SQLI
2bcf0 54 45 5f 4f 4b 0a 23 20 20 64 65 66 69 6e 65 20  TE_OK.#  define 
2bd00 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
2bd10 28 58 2c 59 29 20 20 28 28 56 54 61 62 6c 65 2a  (X,Y)  ((VTable*
2bd20 29 30 29 0a 23 65 6c 73 65 0a 20 20 20 76 6f 69  )0).#else.   voi
2bd30 64 20 73 71 6c 69 74 65 33 56 74 61 62 43 6c 65  d sqlite3VtabCle
2bd40 61 72 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20  ar(sqlite3 *db, 
2bd50 54 61 62 6c 65 2a 29 3b 0a 20 20 20 76 6f 69 64  Table*);.   void
2bd60 20 73 71 6c 69 74 65 33 56 74 61 62 44 69 73 63   sqlite3VtabDisc
2bd70 6f 6e 6e 65 63 74 28 73 71 6c 69 74 65 33 20 2a  onnect(sqlite3 *
2bd80 64 62 2c 20 54 61 62 6c 65 20 2a 70 29 3b 0a 20  db, Table *p);. 
2bd90 20 20 69 6e 74 20 73 71 6c 69 74 65 33 56 74 61    int sqlite3Vta
2bda0 62 53 79 6e 63 28 73 71 6c 69 74 65 33 20 2a 64  bSync(sqlite3 *d
2bdb0 62 2c 20 56 64 62 65 2a 29 3b 0a 20 20 20 69 6e  b, Vdbe*);.   in
2bdc0 74 20 73 71 6c 69 74 65 33 56 74 61 62 52 6f 6c  t sqlite3VtabRol
2bdd0 6c 62 61 63 6b 28 73 71 6c 69 74 65 33 20 2a 64  lback(sqlite3 *d
2bde0 62 29 3b 0a 20 20 20 69 6e 74 20 73 71 6c 69 74  b);.   int sqlit
2bdf0 65 33 56 74 61 62 43 6f 6d 6d 69 74 28 73 71 6c  e3VtabCommit(sql
2be00 69 74 65 33 20 2a 64 62 29 3b 0a 20 20 20 76 6f  ite3 *db);.   vo
2be10 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 4c 6f  id sqlite3VtabLo
2be20 63 6b 28 56 54 61 62 6c 65 20 2a 29 3b 0a 20 20  ck(VTable *);.  
2be30 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2be40 62 55 6e 6c 6f 63 6b 28 56 54 61 62 6c 65 20 2a  bUnlock(VTable *
2be50 29 3b 0a 20 20 20 76 6f 69 64 20 73 71 6c 69 74  );.   void sqlit
2be60 65 33 56 74 61 62 55 6e 6c 6f 63 6b 4c 69 73 74  e3VtabUnlockList
2be70 28 73 71 6c 69 74 65 33 2a 29 3b 0a 20 20 20 69  (sqlite3*);.   i
2be80 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 53 61  nt sqlite3VtabSa
2be90 76 65 70 6f 69 6e 74 28 73 71 6c 69 74 65 33 20  vepoint(sqlite3 
2bea0 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b 0a 20 20  *, int, int);.  
2beb0 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61   void sqlite3Vta
2bec0 62 49 6d 70 6f 72 74 45 72 72 6d 73 67 28 56 64  bImportErrmsg(Vd
2bed0 62 65 2a 2c 20 73 71 6c 69 74 65 33 5f 76 74 61  be*, sqlite3_vta
2bee0 62 2a 29 3b 0a 20 20 20 56 54 61 62 6c 65 20 2a  b*);.   VTable *
2bef0 73 71 6c 69 74 65 33 47 65 74 56 54 61 62 6c 65  sqlite3GetVTable
2bf00 28 73 71 6c 69 74 65 33 2a 2c 20 54 61 62 6c 65  (sqlite3*, Table
2bf10 2a 29 3b 0a 20 20 20 4d 6f 64 75 6c 65 20 2a 73  *);.   Module *s
2bf20 71 6c 69 74 65 33 56 74 61 62 43 72 65 61 74 65  qlite3VtabCreate
2bf30 4d 6f 64 75 6c 65 28 0a 20 20 20 20 20 73 71 6c  Module(.     sql
2bf40 69 74 65 33 2a 2c 0a 20 20 20 20 20 63 6f 6e 73  ite3*,.     cons
2bf50 74 20 63 68 61 72 2a 2c 0a 20 20 20 20 20 63 6f  t char*,.     co
2bf60 6e 73 74 20 73 71 6c 69 74 65 33 5f 6d 6f 64 75  nst sqlite3_modu
2bf70 6c 65 2a 2c 0a 20 20 20 20 20 76 6f 69 64 2a 2c  le*,.     void*,
2bf80 0a 20 20 20 20 20 76 6f 69 64 28 2a 29 28 76 6f  .     void(*)(vo
2bf90 69 64 2a 29 0a 20 20 20 29 3b 0a 23 20 20 64 65  id*).   );.#  de
2bfa0 66 69 6e 65 20 73 71 6c 69 74 65 33 56 74 61 62  fine sqlite3Vtab
2bfb0 49 6e 53 79 6e 63 28 64 62 29 20 28 28 64 62 29  InSync(db) ((db)
2bfc0 2d 3e 6e 56 54 72 61 6e 73 3e 30 20 26 26 20 28  ->nVTrans>0 && (
2bfd0 64 62 29 2d 3e 61 56 54 72 61 6e 73 3d 3d 30 29  db)->aVTrans==0)
2bfe0 0a 23 65 6e 64 69 66 0a 69 6e 74 20 73 71 6c 69  .#endif.int sqli
2bff0 74 65 33 56 74 61 62 45 70 6f 6e 79 6d 6f 75 73  te3VtabEponymous
2c000 54 61 62 6c 65 49 6e 69 74 28 50 61 72 73 65 2a  TableInit(Parse*
2c010 2c 4d 6f 64 75 6c 65 2a 29 3b 0a 76 6f 69 64 20  ,Module*);.void 
2c020 73 71 6c 69 74 65 33 56 74 61 62 45 70 6f 6e 79  sqlite3VtabEpony
2c030 6d 6f 75 73 54 61 62 6c 65 43 6c 65 61 72 28 73  mousTableClear(s
2c040 71 6c 69 74 65 33 2a 2c 4d 6f 64 75 6c 65 2a 29  qlite3*,Module*)
2c050 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74  ;.void sqlite3Vt
2c060 61 62 4d 61 6b 65 57 72 69 74 61 62 6c 65 28 50  abMakeWritable(P
2c070 61 72 73 65 2a 2c 54 61 62 6c 65 2a 29 3b 0a 76  arse*,Table*);.v
2c080 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 42  oid sqlite3VtabB
2c090 65 67 69 6e 50 61 72 73 65 28 50 61 72 73 65 2a  eginParse(Parse*
2c0a0 2c 20 54 6f 6b 65 6e 2a 2c 20 54 6f 6b 65 6e 2a  , Token*, Token*
2c0b0 2c 20 54 6f 6b 65 6e 2a 2c 20 69 6e 74 29 3b 0a  , Token*, int);.
2c0c0 76 6f 69 64 20 73 71 6c 69 74 65 33 56 74 61 62  void sqlite3Vtab
2c0d0 46 69 6e 69 73 68 50 61 72 73 65 28 50 61 72 73  FinishParse(Pars
2c0e0 65 2a 2c 20 54 6f 6b 65 6e 2a 29 3b 0a 76 6f 69  e*, Token*);.voi
2c0f0 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72 67  d sqlite3VtabArg
2c100 49 6e 69 74 28 50 61 72 73 65 2a 29 3b 0a 76 6f  Init(Parse*);.vo
2c110 69 64 20 73 71 6c 69 74 65 33 56 74 61 62 41 72  id sqlite3VtabAr
2c120 67 45 78 74 65 6e 64 28 50 61 72 73 65 2a 2c 20  gExtend(Parse*, 
2c130 54 6f 6b 65 6e 2a 29 3b 0a 69 6e 74 20 73 71 6c  Token*);.int sql
2c140 69 74 65 33 56 74 61 62 43 61 6c 6c 43 72 65 61  ite3VtabCallCrea
2c150 74 65 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74  te(sqlite3*, int
2c160 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 2c 20  , const char *, 
2c170 63 68 61 72 20 2a 2a 29 3b 0a 69 6e 74 20 73 71  char **);.int sq
2c180 6c 69 74 65 33 56 74 61 62 43 61 6c 6c 43 6f 6e  lite3VtabCallCon
2c190 6e 65 63 74 28 50 61 72 73 65 2a 2c 20 54 61 62  nect(Parse*, Tab
2c1a0 6c 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  le*);.int sqlite
2c1b0 33 56 74 61 62 43 61 6c 6c 44 65 73 74 72 6f 79  3VtabCallDestroy
2c1c0 28 73 71 6c 69 74 65 33 2a 2c 20 69 6e 74 2c 20  (sqlite3*, int, 
2c1d0 63 6f 6e 73 74 20 63 68 61 72 20 2a 29 3b 0a 69  const char *);.i
2c1e0 6e 74 20 73 71 6c 69 74 65 33 56 74 61 62 42 65  nt sqlite3VtabBe
2c1f0 67 69 6e 28 73 71 6c 69 74 65 33 20 2a 2c 20 56  gin(sqlite3 *, V
2c200 54 61 62 6c 65 20 2a 29 3b 0a 46 75 6e 63 44 65  Table *);.FuncDe
2c210 66 20 2a 73 71 6c 69 74 65 33 56 74 61 62 4f 76  f *sqlite3VtabOv
2c220 65 72 6c 6f 61 64 46 75 6e 63 74 69 6f 6e 28 73  erloadFunction(s
2c230 71 6c 69 74 65 33 20 2a 2c 46 75 6e 63 44 65 66  qlite3 *,FuncDef
2c240 2a 2c 20 69 6e 74 20 6e 41 72 67 2c 20 45 78 70  *, int nArg, Exp
2c250 72 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65  r*);.void sqlite
2c260 33 49 6e 76 61 6c 69 64 46 75 6e 63 74 69 6f 6e  3InvalidFunction
2c270 28 73 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74  (sqlite3_context
2c280 2a 2c 69 6e 74 2c 73 71 6c 69 74 65 33 5f 76 61  *,int,sqlite3_va
2c290 6c 75 65 2a 2a 29 3b 0a 73 71 6c 69 74 65 33 5f  lue**);.sqlite3_
2c2a0 69 6e 74 36 34 20 73 71 6c 69 74 65 33 53 74 6d  int64 sqlite3Stm
2c2b0 74 43 75 72 72 65 6e 74 54 69 6d 65 28 73 71 6c  tCurrentTime(sql
2c2c0 69 74 65 33 5f 63 6f 6e 74 65 78 74 2a 29 3b 0a  ite3_context*);.
2c2d0 69 6e 74 20 73 71 6c 69 74 65 33 56 64 62 65 50  int sqlite3VdbeP
2c2e0 61 72 61 6d 65 74 65 72 49 6e 64 65 78 28 56 64  arameterIndex(Vd
2c2f0 62 65 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72 2a  be*, const char*
2c300 2c 20 69 6e 74 29 3b 0a 69 6e 74 20 73 71 6c 69  , int);.int sqli
2c310 74 65 33 54 72 61 6e 73 66 65 72 42 69 6e 64 69  te3TransferBindi
2c320 6e 67 73 28 73 71 6c 69 74 65 33 5f 73 74 6d 74  ngs(sqlite3_stmt
2c330 20 2a 2c 20 73 71 6c 69 74 65 33 5f 73 74 6d 74   *, sqlite3_stmt
2c340 20 2a 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65   *);.void sqlite
2c350 33 50 61 72 73 65 72 52 65 73 65 74 28 50 61 72  3ParserReset(Par
2c360 73 65 2a 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65  se*);.int sqlite
2c370 33 52 65 70 72 65 70 61 72 65 28 56 64 62 65 2a  3Reprepare(Vdbe*
2c380 29 3b 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 45  );.void sqlite3E
2c390 78 70 72 4c 69 73 74 43 68 65 63 6b 4c 65 6e 67  xprListCheckLeng
2c3a0 74 68 28 50 61 72 73 65 2a 2c 20 45 78 70 72 4c  th(Parse*, ExprL
2c3b0 69 73 74 2a 2c 20 63 6f 6e 73 74 20 63 68 61 72  ist*, const char
2c3c0 2a 29 3b 0a 43 6f 6c 6c 53 65 71 20 2a 73 71 6c  *);.CollSeq *sql
2c3d0 69 74 65 33 42 69 6e 61 72 79 43 6f 6d 70 61 72  ite3BinaryCompar
2c3e0 65 43 6f 6c 6c 53 65 71 28 50 61 72 73 65 20 2a  eCollSeq(Parse *
2c3f0 2c 20 45 78 70 72 20 2a 2c 20 45 78 70 72 20 2a  , Expr *, Expr *
2c400 29 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 54 65  );.int sqlite3Te
2c410 6d 70 49 6e 4d 65 6d 6f 72 79 28 63 6f 6e 73 74  mpInMemory(const
2c420 20 73 71 6c 69 74 65 33 2a 29 3b 0a 63 6f 6e 73   sqlite3*);.cons
2c430 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33 4a  t char *sqlite3J
2c440 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 69  ournalModename(i
2c450 6e 74 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  nt);.#ifndef SQL
2c460 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 69  ITE_OMIT_WAL.  i
2c470 6e 74 20 73 71 6c 69 74 65 33 43 68 65 63 6b 70  nt sqlite3Checkp
2c480 6f 69 6e 74 28 73 71 6c 69 74 65 33 2a 2c 20 69  oint(sqlite3*, i
2c490 6e 74 2c 20 69 6e 74 2c 20 69 6e 74 2a 2c 20 69  nt, int, int*, i
2c4a0 6e 74 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69  nt*);.  int sqli
2c4b0 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
2c4c0 6b 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 2a  k(void*,sqlite3*
2c4d0 2c 63 6f 6e 73 74 20 63 68 61 72 2a 2c 69 6e 74  ,const char*,int
2c4e0 29 3b 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65  );.#endif.#ifnde
2c4f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 54  f SQLITE_OMIT_CT
2c500 45 0a 20 20 57 69 74 68 20 2a 73 71 6c 69 74 65  E.  With *sqlite
2c510 33 57 69 74 68 41 64 64 28 50 61 72 73 65 2a 2c  3WithAdd(Parse*,
2c520 57 69 74 68 2a 2c 54 6f 6b 65 6e 2a 2c 45 78 70  With*,Token*,Exp
2c530 72 4c 69 73 74 2a 2c 53 65 6c 65 63 74 2a 29 3b  rList*,Select*);
2c540 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 57  .  void sqlite3W
2c550 69 74 68 44 65 6c 65 74 65 28 73 71 6c 69 74 65  ithDelete(sqlite
2c560 33 2a 2c 57 69 74 68 2a 29 3b 0a 20 20 76 6f 69  3*,With*);.  voi
2c570 64 20 73 71 6c 69 74 65 33 57 69 74 68 50 75 73  d sqlite3WithPus
2c580 68 28 50 61 72 73 65 2a 2c 20 57 69 74 68 2a 2c  h(Parse*, With*,
2c590 20 75 38 29 3b 0a 23 65 6c 73 65 0a 23 64 65 66   u8);.#else.#def
2c5a0 69 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 50  ine sqlite3WithP
2c5b0 75 73 68 28 78 2c 79 2c 7a 29 0a 23 64 65 66 69  ush(x,y,z).#defi
2c5c0 6e 65 20 73 71 6c 69 74 65 33 57 69 74 68 44 65  ne sqlite3WithDe
2c5d0 6c 65 74 65 28 78 2c 79 29 0a 23 65 6e 64 69 66  lete(x,y).#endif
2c5e0 0a 0a 2f 2a 20 44 65 63 6c 61 72 61 74 69 6f 6e  ../* Declaration
2c5f0 73 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 73 20  s for functions 
2c600 69 6e 20 66 6b 65 79 2e 63 2e 20 41 6c 6c 20 6f  in fkey.c. All o
2c610 66 20 74 68 65 73 65 20 61 72 65 20 72 65 70 6c  f these are repl
2c620 61 63 65 64 20 62 79 0a 2a 2a 20 6e 6f 2d 6f 70  aced by.** no-op
2c630 20 6d 61 63 72 6f 73 20 69 66 20 4f 4d 49 54 5f   macros if OMIT_
2c640 46 4f 52 45 49 47 4e 5f 4b 45 59 20 69 73 20 64  FOREIGN_KEY is d
2c650 65 66 69 6e 65 64 2e 20 49 6e 20 74 68 69 73 20  efined. In this 
2c660 63 61 73 65 20 6e 6f 20 66 6f 72 65 69 67 6e 0a  case no foreign.
2c670 2a 2a 20 6b 65 79 20 66 75 6e 63 74 69 6f 6e 61  ** key functiona
2c680 6c 69 74 79 20 69 73 20 61 76 61 69 6c 61 62 6c  lity is availabl
2c690 65 2e 20 49 66 20 4f 4d 49 54 5f 54 52 49 47 47  e. If OMIT_TRIGG
2c6a0 45 52 20 69 73 20 64 65 66 69 6e 65 64 20 62 75  ER is defined bu
2c6b0 74 0a 2a 2a 20 4f 4d 49 54 5f 46 4f 52 45 49 47  t.** OMIT_FOREIG
2c6c0 4e 5f 4b 45 59 20 69 73 20 6e 6f 74 2c 20 6f 6e  N_KEY is not, on
2c6d0 6c 79 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 66  ly some of the f
2c6e0 75 6e 63 74 69 6f 6e 73 20 61 72 65 20 6e 6f 2d  unctions are no-
2c6f0 6f 70 65 64 2e 20 49 6e 0a 2a 2a 20 74 68 69 73  oped. In.** this
2c700 20 63 61 73 65 20 66 6f 72 65 69 67 6e 20 6b 65   case foreign ke
2c710 79 73 20 61 72 65 20 70 61 72 73 65 64 2c 20 62  ys are parsed, b
2c720 75 74 20 6e 6f 20 6f 74 68 65 72 20 66 75 6e 63  ut no other func
2c730 74 69 6f 6e 61 6c 69 74 79 20 69 73 0a 2a 2a 20  tionality is.** 
2c740 70 72 6f 76 69 64 65 64 20 28 65 6e 66 6f 72 63  provided (enforc
2c750 65 6d 65 6e 74 20 6f 66 20 46 4b 20 63 6f 6e 73  ement of FK cons
2c760 74 72 61 69 6e 74 73 20 72 65 71 75 69 72 65 73  traints requires
2c770 20 74 68 65 20 74 72 69 67 67 65 72 73 20 73 75   the triggers su
2c780 62 2d 73 79 73 74 65 6d 29 2e 0a 2a 2f 0a 23 69  b-system)..*/.#i
2c790 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2c7a0 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
2c7b0 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
2c7c0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
2c7d0 47 45 52 29 0a 20 20 76 6f 69 64 20 73 71 6c 69  GER).  void sqli
2c7e0 74 65 33 46 6b 43 68 65 63 6b 28 50 61 72 73 65  te3FkCheck(Parse
2c7f0 2a 2c 20 54 61 62 6c 65 2a 2c 20 69 6e 74 2c 20  *, Table*, int, 
2c800 69 6e 74 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b  int, int*, int);
2c810 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 46  .  void sqlite3F
2c820 6b 44 72 6f 70 54 61 62 6c 65 28 50 61 72 73 65  kDropTable(Parse
2c830 2a 2c 20 53 72 63 4c 69 73 74 20 2a 2c 20 54 61  *, SrcList *, Ta
2c840 62 6c 65 2a 29 3b 0a 20 20 76 6f 69 64 20 73 71  ble*);.  void sq
2c850 6c 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 50  lite3FkActions(P
2c860 61 72 73 65 2a 2c 20 54 61 62 6c 65 2a 2c 20 45  arse*, Table*, E
2c870 78 70 72 4c 69 73 74 2a 2c 20 69 6e 74 2c 20 69  xprList*, int, i
2c880 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20 20 69 6e 74  nt*, int);.  int
2c890 20 73 71 6c 69 74 65 33 46 6b 52 65 71 75 69 72   sqlite3FkRequir
2c8a0 65 64 28 50 61 72 73 65 2a 2c 20 54 61 62 6c 65  ed(Parse*, Table
2c8b0 2a 2c 20 69 6e 74 2a 2c 20 69 6e 74 29 3b 0a 20  *, int*, int);. 
2c8c0 20 75 33 32 20 73 71 6c 69 74 65 33 46 6b 4f 6c   u32 sqlite3FkOl
2c8d0 64 6d 61 73 6b 28 50 61 72 73 65 2a 2c 20 54 61  dmask(Parse*, Ta
2c8e0 62 6c 65 2a 29 3b 0a 20 20 46 4b 65 79 20 2a 73  ble*);.  FKey *s
2c8f0 71 6c 69 74 65 33 46 6b 52 65 66 65 72 65 6e 63  qlite3FkReferenc
2c900 65 73 28 54 61 62 6c 65 20 2a 29 3b 0a 23 65 6c  es(Table *);.#el
2c910 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c  se.  #define sql
2c920 69 74 65 33 46 6b 41 63 74 69 6f 6e 73 28 61 2c  ite3FkActions(a,
2c930 62 2c 63 2c 64 2c 65 2c 66 29 0a 20 20 23 64 65  b,c,d,e,f).  #de
2c940 66 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 43 68  fine sqlite3FkCh
2c950 65 63 6b 28 61 2c 62 2c 63 2c 64 2c 65 2c 66 29  eck(a,b,c,d,e,f)
2c960 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74  .  #define sqlit
2c970 65 33 46 6b 44 72 6f 70 54 61 62 6c 65 28 61 2c  e3FkDropTable(a,
2c980 62 2c 63 29 0a 20 20 23 64 65 66 69 6e 65 20 73  b,c).  #define s
2c990 71 6c 69 74 65 33 46 6b 4f 6c 64 6d 61 73 6b 28  qlite3FkOldmask(
2c9a0 61 2c 62 29 20 20 20 20 20 20 20 20 20 30 0a 20  a,b)         0. 
2c9b0 20 23 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33   #define sqlite3
2c9c0 46 6b 52 65 71 75 69 72 65 64 28 61 2c 62 2c 63  FkRequired(a,b,c
2c9d0 2c 64 29 20 20 20 20 30 0a 20 20 23 64 65 66 69  ,d)    0.  #defi
2c9e0 6e 65 20 73 71 6c 69 74 65 33 46 6b 52 65 66 65  ne sqlite3FkRefe
2c9f0 72 65 6e 63 65 73 28 61 29 20 20 20 20 20 20 20  rences(a)       
2ca00 20 30 0a 23 65 6e 64 69 66 0a 23 69 66 6e 64 65   0.#endif.#ifnde
2ca10 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
2ca20 52 45 49 47 4e 5f 4b 45 59 0a 20 20 76 6f 69 64  REIGN_KEY.  void
2ca30 20 73 71 6c 69 74 65 33 46 6b 44 65 6c 65 74 65   sqlite3FkDelete
2ca40 28 73 71 6c 69 74 65 33 20 2a 2c 20 54 61 62 6c  (sqlite3 *, Tabl
2ca50 65 2a 29 3b 0a 20 20 69 6e 74 20 73 71 6c 69 74  e*);.  int sqlit
2ca60 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
2ca70 50 61 72 73 65 2a 2c 54 61 62 6c 65 2a 2c 46 4b  Parse*,Table*,FK
2ca80 65 79 2a 2c 49 6e 64 65 78 2a 2a 2c 69 6e 74 2a  ey*,Index**,int*
2ca90 2a 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65 66  *);.#else.  #def
2caa0 69 6e 65 20 73 71 6c 69 74 65 33 46 6b 44 65 6c  ine sqlite3FkDel
2cab0 65 74 65 28 61 2c 62 29 0a 20 20 23 64 65 66 69  ete(a,b).  #defi
2cac0 6e 65 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61  ne sqlite3FkLoca
2cad0 74 65 49 6e 64 65 78 28 61 2c 62 2c 63 2c 64 2c  teIndex(a,b,c,d,
2cae0 65 29 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  e).#endif.../*.*
2caf0 2a 20 41 76 61 69 6c 61 62 6c 65 20 66 61 75 6c  * Available faul
2cb00 74 20 69 6e 6a 65 63 74 6f 72 73 2e 20 20 53 68  t injectors.  Sh
2cb10 6f 75 6c 64 20 62 65 20 6e 75 6d 62 65 72 65 64  ould be numbered
2cb20 20 62 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20   beginning with 
2cb30 30 2e 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 53 51  0..*/.#define SQ
2cb40 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
2cb50 4f 52 5f 4d 41 4c 4c 4f 43 20 20 20 20 20 30 0a  OR_MALLOC     0.
2cb60 23 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 46  #define SQLITE_F
2cb70 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f 43 4f 55  AULTINJECTOR_COU
2cb80 4e 54 20 20 20 20 20 20 31 0a 0a 2f 2a 0a 2a 2a  NT      1../*.**
2cb90 20 54 68 65 20 69 6e 74 65 72 66 61 63 65 20 74   The interface t
2cba0 6f 20 74 68 65 20 63 6f 64 65 20 69 6e 20 66 61  o the code in fa
2cbb0 75 6c 74 2e 63 20 75 73 65 64 20 66 6f 72 20 69  ult.c used for i
2cbc0 64 65 6e 74 69 66 79 69 6e 67 20 22 62 65 6e 69  dentifying "beni
2cbd0 67 6e 22 0a 2a 2a 20 6d 61 6c 6c 6f 63 20 66 61  gn".** malloc fa
2cbe0 69 6c 75 72 65 73 2e 20 54 68 69 73 20 69 73 20  ilures. This is 
2cbf0 6f 6e 6c 79 20 70 72 65 73 65 6e 74 20 69 66 20  only present if 
2cc00 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2cc10 45 0a 2a 2a 20 69 73 20 6e 6f 74 20 64 65 66 69  E.** is not defi
2cc20 6e 65 64 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ned..*/.#ifndef 
2cc30 53 51 4c 49 54 45 5f 55 4e 54 45 53 54 41 42 4c  SQLITE_UNTESTABL
2cc40 45 0a 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33  E.  void sqlite3
2cc50 42 65 67 69 6e 42 65 6e 69 67 6e 4d 61 6c 6c 6f  BeginBenignMallo
2cc60 63 28 76 6f 69 64 29 3b 0a 20 20 76 6f 69 64 20  c(void);.  void 
2cc70 73 71 6c 69 74 65 33 45 6e 64 42 65 6e 69 67 6e  sqlite3EndBenign
2cc80 4d 61 6c 6c 6f 63 28 76 6f 69 64 29 3b 0a 23 65  Malloc(void);.#e
2cc90 6c 73 65 0a 20 20 23 64 65 66 69 6e 65 20 73 71  lse.  #define sq
2cca0 6c 69 74 65 33 42 65 67 69 6e 42 65 6e 69 67 6e  lite3BeginBenign
2ccb0 4d 61 6c 6c 6f 63 28 29 0a 20 20 23 64 65 66 69  Malloc().  #defi
2ccc0 6e 65 20 73 71 6c 69 74 65 33 45 6e 64 42 65 6e  ne sqlite3EndBen
2ccd0 69 67 6e 4d 61 6c 6c 6f 63 28 29 0a 23 65 6e 64  ignMalloc().#end
2cce0 69 66 0a 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77 65  if../*.** Allowe
2ccf0 64 20 72 65 74 75 72 6e 20 76 61 6c 75 65 73 20  d return values 
2cd00 66 72 6f 6d 20 73 71 6c 69 74 65 33 46 69 6e 64  from sqlite3Find
2cd10 49 6e 49 6e 64 65 78 28 29 0a 2a 2f 0a 23 64 65  InIndex().*/.#de
2cd20 66 69 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 52 4f  fine IN_INDEX_RO
2cd30 57 49 44 20 20 20 20 20 20 20 20 31 20 20 20 2f  WID        1   /
2cd40 2a 20 53 65 61 72 63 68 20 74 68 65 20 72 6f 77  * Search the row
2cd50 69 64 20 6f 66 20 74 68 65 20 74 61 62 6c 65 20  id of the table 
2cd60 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e  */.#define IN_IN
2cd70 44 45 58 5f 45 50 48 20 20 20 20 20 20 20 20 20  DEX_EPH         
2cd80 20 32 20 20 20 2f 2a 20 53 65 61 72 63 68 20 61   2   /* Search a
2cd90 6e 20 65 70 68 65 6d 65 72 61 6c 20 62 2d 74 72  n ephemeral b-tr
2cda0 65 65 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49 4e  ee */.#define IN
2cdb0 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 41 53 43  _INDEX_INDEX_ASC
2cdc0 20 20 20 20 33 20 20 20 2f 2a 20 45 78 69 73 74      3   /* Exist
2cdd0 69 6e 67 20 69 6e 64 65 78 20 41 53 43 45 4e 44  ing index ASCEND
2cde0 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65 20 49  ING */.#define I
2cdf0 4e 5f 49 4e 44 45 58 5f 49 4e 44 45 58 5f 44 45  N_INDEX_INDEX_DE
2ce00 53 43 20 20 20 34 20 20 20 2f 2a 20 45 78 69 73  SC   4   /* Exis
2ce10 74 69 6e 67 20 69 6e 64 65 78 20 44 45 53 43 45  ting index DESCE
2ce20 4e 44 49 4e 47 20 2a 2f 0a 23 64 65 66 69 6e 65  NDING */.#define
2ce30 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 20   IN_INDEX_NOOP  
2ce40 20 20 20 20 20 20 20 35 20 20 20 2f 2a 20 4e 6f         5   /* No
2ce50 20 74 61 62 6c 65 20 61 76 61 69 6c 61 62 6c 65   table available
2ce60 2e 20 55 73 65 20 63 6f 6d 70 61 72 69 73 6f 6e  . Use comparison
2ce70 73 20 2a 2f 0a 2f 2a 0a 2a 2a 20 41 6c 6c 6f 77  s */./*.** Allow
2ce80 65 64 20 66 6c 61 67 73 20 66 6f 72 20 74 68 65  ed flags for the
2ce90 20 33 72 64 20 70 61 72 61 6d 65 74 65 72 20 74   3rd parameter t
2cea0 6f 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 49  o sqlite3FindInI
2ceb0 6e 64 65 78 28 29 2e 0a 2a 2f 0a 23 64 65 66 69  ndex()..*/.#defi
2cec0 6e 65 20 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50  ne IN_INDEX_NOOP
2ced0 5f 4f 4b 20 20 20 20 20 30 78 30 30 30 31 20 20  _OK     0x0001  
2cee0 2f 2a 20 4f 4b 20 74 6f 20 72 65 74 75 72 6e 20  /* OK to return 
2cef0 49 4e 5f 49 4e 44 45 58 5f 4e 4f 4f 50 20 2a 2f  IN_INDEX_NOOP */
2cf00 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2cf10 58 5f 4d 45 4d 42 45 52 53 48 49 50 20 20 30 78  X_MEMBERSHIP  0x
2cf20 30 30 30 32 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0002  /* IN oper
2cf30 61 74 6f 72 20 75 73 65 64 20 66 6f 72 20 6d 65  ator used for me
2cf40 6d 62 65 72 73 68 69 70 20 74 65 73 74 20 2a 2f  mbership test */
2cf50 0a 23 64 65 66 69 6e 65 20 49 4e 5f 49 4e 44 45  .#define IN_INDE
2cf60 58 5f 4c 4f 4f 50 20 20 20 20 20 20 20 20 30 78  X_LOOP        0x
2cf70 30 30 30 34 20 20 2f 2a 20 49 4e 20 6f 70 65 72  0004  /* IN oper
2cf80 61 74 6f 72 20 75 73 65 64 20 61 73 20 61 20 6c  ator used as a l
2cf90 6f 6f 70 20 2a 2f 0a 69 6e 74 20 73 71 6c 69 74  oop */.int sqlit
2cfa0 65 33 46 69 6e 64 49 6e 49 6e 64 65 78 28 50 61  e3FindInIndex(Pa
2cfb0 72 73 65 20 2a 2c 20 45 78 70 72 20 2a 2c 20 75  rse *, Expr *, u
2cfc0 33 32 2c 20 69 6e 74 2a 2c 20 69 6e 74 2a 29 3b  32, int*, int*);
2cfd0 0a 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75  ..int sqlite3Jou
2cfe0 72 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33  rnalOpen(sqlite3
2cff0 5f 76 66 73 20 2a 2c 20 63 6f 6e 73 74 20 63 68  _vfs *, const ch
2d000 61 72 20 2a 2c 20 73 71 6c 69 74 65 33 5f 66 69  ar *, sqlite3_fi
2d010 6c 65 20 2a 2c 20 69 6e 74 2c 20 69 6e 74 29 3b  le *, int, int);
2d020 0a 69 6e 74 20 73 71 6c 69 74 65 33 4a 6f 75 72  .int sqlite3Jour
2d030 6e 61 6c 53 69 7a 65 28 73 71 6c 69 74 65 33 5f  nalSize(sqlite3_
2d040 76 66 73 20 2a 29 3b 0a 23 69 66 64 65 66 20 53  vfs *);.#ifdef S
2d050 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 41 54 4f  QLITE_ENABLE_ATO
2d060 4d 49 43 5f 57 52 49 54 45 0a 20 20 69 6e 74 20  MIC_WRITE.  int 
2d070 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 43 72  sqlite3JournalCr
2d080 65 61 74 65 28 73 71 6c 69 74 65 33 5f 66 69 6c  eate(sqlite3_fil
2d090 65 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e  e *);.#endif..in
2d0a0 74 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  t sqlite3Journal
2d0b0 49 73 49 6e 4d 65 6d 6f 72 79 28 73 71 6c 69 74  IsInMemory(sqlit
2d0c0 65 33 5f 66 69 6c 65 20 2a 70 29 3b 0a 76 6f 69  e3_file *p);.voi
2d0d0 64 20 73 71 6c 69 74 65 33 4d 65 6d 4a 6f 75 72  d sqlite3MemJour
2d0e0 6e 61 6c 4f 70 65 6e 28 73 71 6c 69 74 65 33 5f  nalOpen(sqlite3_
2d0f0 66 69 6c 65 20 2a 29 3b 0a 0a 76 6f 69 64 20 73  file *);..void s
2d100 71 6c 69 74 65 33 45 78 70 72 53 65 74 48 65 69  qlite3ExprSetHei
2d110 67 68 74 41 6e 64 46 6c 61 67 73 28 50 61 72 73  ghtAndFlags(Pars
2d120 65 20 2a 70 50 61 72 73 65 2c 20 45 78 70 72 20  e *pParse, Expr 
2d130 2a 70 29 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f  *p);.#if SQLITE_
2d140 4d 41 58 5f 45 58 50 52 5f 44 45 50 54 48 3e 30  MAX_EXPR_DEPTH>0
2d150 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 53 65  .  int sqlite3Se
2d160 6c 65 63 74 45 78 70 72 48 65 69 67 68 74 28 53  lectExprHeight(S
2d170 65 6c 65 63 74 20 2a 29 3b 0a 20 20 69 6e 74 20  elect *);.  int 
2d180 73 71 6c 69 74 65 33 45 78 70 72 43 68 65 63 6b  sqlite3ExprCheck
2d190 48 65 69 67 68 74 28 50 61 72 73 65 2a 2c 20 69  Height(Parse*, i
2d1a0 6e 74 29 3b 0a 23 65 6c 73 65 0a 20 20 23 64 65  nt);.#else.  #de
2d1b0 66 69 6e 65 20 73 71 6c 69 74 65 33 53 65 6c 65  fine sqlite3Sele
2d1c0 63 74 45 78 70 72 48 65 69 67 68 74 28 78 29 20  ctExprHeight(x) 
2d1d0 30 0a 20 20 23 64 65 66 69 6e 65 20 73 71 6c 69  0.  #define sqli
2d1e0 74 65 33 45 78 70 72 43 68 65 63 6b 48 65 69 67  te3ExprCheckHeig
2d1f0 68 74 28 78 2c 79 29 0a 23 65 6e 64 69 66 0a 0a  ht(x,y).#endif..
2d200 75 33 32 20 73 71 6c 69 74 65 33 47 65 74 34 62  u32 sqlite3Get4b
2d210 79 74 65 28 63 6f 6e 73 74 20 75 38 2a 29 3b 0a  yte(const u8*);.
2d220 76 6f 69 64 20 73 71 6c 69 74 65 33 50 75 74 34  void sqlite3Put4
2d230 62 79 74 65 28 75 38 2a 2c 20 75 33 32 29 3b 0a  byte(u8*, u32);.
2d240 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
2d250 4e 41 42 4c 45 5f 55 4e 4c 4f 43 4b 5f 4e 4f 54  NABLE_UNLOCK_NOT
2d260 49 46 59 0a 20 20 76 6f 69 64 20 73 71 6c 69 74  IFY.  void sqlit
2d270 65 33 43 6f 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63  e3ConnectionBloc
2d280 6b 65 64 28 73 71 6c 69 74 65 33 20 2a 2c 20 73  ked(sqlite3 *, s
2d290 71 6c 69 74 65 33 20 2a 29 3b 0a 20 20 76 6f 69  qlite3 *);.  voi
2d2a0 64 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74  d sqlite3Connect
2d2b0 69 6f 6e 55 6e 6c 6f 63 6b 65 64 28 73 71 6c 69  ionUnlocked(sqli
2d2c0 74 65 33 20 2a 64 62 29 3b 0a 20 20 76 6f 69 64  te3 *db);.  void
2d2d0 20 73 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69   sqlite3Connecti
2d2e0 6f 6e 43 6c 6f 73 65 64 28 73 71 6c 69 74 65 33  onClosed(sqlite3
2d2f0 20 2a 64 62 29 3b 0a 23 65 6c 73 65 0a 20 20 23   *db);.#else.  #
2d300 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f  define sqlite3Co
2d310 6e 6e 65 63 74 69 6f 6e 42 6c 6f 63 6b 65 64 28  nnectionBlocked(
2d320 78 2c 79 29 0a 20 20 23 64 65 66 69 6e 65 20 73  x,y).  #define s
2d330 71 6c 69 74 65 33 43 6f 6e 6e 65 63 74 69 6f 6e  qlite3Connection
2d340 55 6e 6c 6f 63 6b 65 64 28 78 29 0a 20 20 23 64  Unlocked(x).  #d
2d350 65 66 69 6e 65 20 73 71 6c 69 74 65 33 43 6f 6e  efine sqlite3Con
2d360 6e 65 63 74 69 6f 6e 43 6c 6f 73 65 64 28 78 29  nectionClosed(x)
2d370 0a 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20  .#endif..#ifdef 
2d380 53 51 4c 49 54 45 5f 44 45 42 55 47 0a 20 20 76  SQLITE_DEBUG.  v
2d390 6f 69 64 20 73 71 6c 69 74 65 33 50 61 72 73 65  oid sqlite3Parse
2d3a0 72 54 72 61 63 65 28 46 49 4c 45 2a 2c 20 63 68  rTrace(FILE*, ch
2d3b0 61 72 20 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 2f  ar *);.#endif../
2d3c0 2a 0a 2a 2a 20 49 66 20 74 68 65 20 53 51 4c 49  *.** If the SQLI
2d3d0 54 45 5f 45 4e 41 42 4c 45 20 49 4f 54 52 41 43  TE_ENABLE IOTRAC
2d3e0 45 20 65 78 69 73 74 73 20 74 68 65 6e 20 74 68  E exists then th
2d3f0 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
2d400 65 0a 2a 2a 20 73 71 6c 69 74 65 33 49 6f 54 72  e.** sqlite3IoTr
2d410 61 63 65 20 69 73 20 61 20 70 6f 69 6e 74 65 72  ace is a pointer
2d420 20 74 6f 20 61 20 70 72 69 6e 74 66 2d 6c 69 6b   to a printf-lik
2d430 65 20 72 6f 75 74 69 6e 65 20 75 73 65 64 20 74  e routine used t
2d440 6f 0a 2a 2a 20 70 72 69 6e 74 20 49 2f 4f 20 74  o.** print I/O t
2d450 72 61 63 69 6e 67 20 6d 65 73 73 61 67 65 73 2e  racing messages.
2d460 0a 2a 2f 0a 23 69 66 64 65 66 20 53 51 4c 49 54  .*/.#ifdef SQLIT
2d470 45 5f 45 4e 41 42 4c 45 5f 49 4f 54 52 41 43 45  E_ENABLE_IOTRACE
2d480 0a 23 20 64 65 66 69 6e 65 20 49 4f 54 52 41 43  .# define IOTRAC
2d490 45 28 41 29 20 20 69 66 28 20 73 71 6c 69 74 65  E(A)  if( sqlite
2d4a0 33 49 6f 54 72 61 63 65 20 29 7b 20 73 71 6c 69  3IoTrace ){ sqli
2d4b0 74 65 33 49 6f 54 72 61 63 65 20 41 3b 20 7d 0a  te3IoTrace A; }.
2d4c0 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 56 64    void sqlite3Vd
2d4d0 62 65 49 4f 54 72 61 63 65 53 71 6c 28 56 64 62  beIOTraceSql(Vdb
2d4e0 65 2a 29 3b 0a 53 51 4c 49 54 45 5f 41 50 49 20  e*);.SQLITE_API 
2d4f0 53 51 4c 49 54 45 5f 45 58 54 45 52 4e 20 76 6f  SQLITE_EXTERN vo
2d500 69 64 20 28 53 51 4c 49 54 45 5f 43 44 45 43 4c  id (SQLITE_CDECL
2d510 20 2a 73 71 6c 69 74 65 33 49 6f 54 72 61 63 65   *sqlite3IoTrace
2d520 29 28 63 6f 6e 73 74 20 63 68 61 72 2a 2c 2e 2e  )(const char*,..
2d530 2e 29 3b 0a 23 65 6c 73 65 0a 23 20 64 65 66 69  .);.#else.# defi
2d540 6e 65 20 49 4f 54 52 41 43 45 28 41 29 0a 23 20  ne IOTRACE(A).# 
2d550 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 56 64  define sqlite3Vd
2d560 62 65 49 4f 54 72 61 63 65 53 71 6c 28 58 29 0a  beIOTraceSql(X).
2d570 23 65 6e 64 69 66 0a 0a 2f 2a 0a 2a 2a 20 54 68  #endif../*.** Th
2d580 65 73 65 20 72 6f 75 74 69 6e 65 73 20 61 72 65  ese routines are
2d590 20 61 76 61 69 6c 61 62 6c 65 20 66 6f 72 20 74   available for t
2d5a0 68 65 20 6d 65 6d 32 2e 63 20 64 65 62 75 67 67  he mem2.c debugg
2d5b0 69 6e 67 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63  ing memory alloc
2d5c0 61 74 6f 72 0a 2a 2a 20 6f 6e 6c 79 2e 20 20 54  ator.** only.  T
2d5d0 68 65 79 20 61 72 65 20 75 73 65 64 20 74 6f 20  hey are used to 
2d5e0 76 65 72 69 66 79 20 74 68 61 74 20 64 69 66 66  verify that diff
2d5f0 65 72 65 6e 74 20 22 74 79 70 65 73 22 20 6f 66  erent "types" of
2d600 20 6d 65 6d 6f 72 79 0a 2a 2a 20 61 6c 6c 6f 63   memory.** alloc
2d610 61 74 69 6f 6e 73 20 61 72 65 20 70 72 6f 70 65  ations are prope
2d620 72 6c 79 20 74 72 61 63 6b 65 64 20 62 79 20 74  rly tracked by t
2d630 68 65 20 73 79 73 74 65 6d 2e 0a 2a 2a 0a 2a 2a  he system..**.**
2d640 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2d650 53 65 74 54 79 70 65 28 29 20 73 65 74 73 20 74  SetType() sets t
2d660 68 65 20 22 74 79 70 65 22 20 6f 66 20 61 6e 20  he "type" of an 
2d670 61 6c 6c 6f 63 61 74 69 6f 6e 20 74 6f 20 6f 6e  allocation to on
2d680 65 20 6f 66 0a 2a 2a 20 74 68 65 20 4d 45 4d 54  e of.** the MEMT
2d690 59 50 45 5f 2a 20 6d 61 63 72 6f 73 20 64 65 66  YPE_* macros def
2d6a0 69 6e 65 64 20 62 65 6c 6f 77 2e 20 20 54 68 65  ined below.  The
2d6b0 20 74 79 70 65 20 6d 75 73 74 20 62 65 20 61 20   type must be a 
2d6c0 62 69 74 6d 61 73 6b 20 77 69 74 68 0a 2a 2a 20  bitmask with.** 
2d6d0 61 20 73 69 6e 67 6c 65 20 62 69 74 20 73 65 74  a single bit set
2d6e0 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65 33 4d  ..**.** sqlite3M
2d6f0 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28 29  emdebugHasType()
2d700 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69 66   returns true if
2d710 20 61 6e 79 20 6f 66 20 74 68 65 20 62 69 74 73   any of the bits
2d720 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64 0a 2a   in its second.*
2d730 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74 63 68  * argument match
2d740 20 74 68 65 20 74 79 70 65 20 73 65 74 20 62 79   the type set by
2d750 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 73 71   the previous sq
2d760 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53 65 74  lite3MemdebugSet
2d770 54 79 70 65 28 29 2e 0a 2a 2a 20 73 71 6c 69 74  Type()..** sqlit
2d780 65 33 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70  e3MemdebugHasTyp
2d790 65 28 29 20 69 73 20 69 6e 74 65 6e 64 65 64 20  e() is intended 
2d7a0 66 6f 72 20 75 73 65 20 69 6e 73 69 64 65 20 61  for use inside a
2d7b0 73 73 65 72 74 28 29 20 73 74 61 74 65 6d 65 6e  ssert() statemen
2d7c0 74 73 2e 0a 2a 2a 0a 2a 2a 20 73 71 6c 69 74 65  ts..**.** sqlite
2d7d0 33 4d 65 6d 64 65 62 75 67 4e 6f 54 79 70 65 28  3MemdebugNoType(
2d7e0 29 20 72 65 74 75 72 6e 73 20 74 72 75 65 20 69  ) returns true i
2d7f0 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 62 69  f none of the bi
2d800 74 73 20 69 6e 20 69 74 73 20 73 65 63 6f 6e 64  ts in its second
2d810 0a 2a 2a 20 61 72 67 75 6d 65 6e 74 20 6d 61 74  .** argument mat
2d820 63 68 20 74 68 65 20 74 79 70 65 20 73 65 74 20  ch the type set 
2d830 62 79 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  by the previous 
2d840 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 53  sqlite3MemdebugS
2d850 65 74 54 79 70 65 28 29 2e 0a 2a 2a 0a 2a 2a 20  etType()..**.** 
2d860 50 65 72 68 61 70 73 20 74 68 65 20 6d 6f 73 74  Perhaps the most
2d870 20 69 6d 70 6f 72 74 61 6e 74 20 70 6f 69 6e 74   important point
2d880 20 69 73 20 74 68 65 20 64 69 66 66 65 72 65 6e   is the differen
2d890 63 65 20 62 65 74 77 65 65 6e 20 4d 45 4d 54 59  ce between MEMTY
2d8a0 50 45 5f 48 45 41 50 0a 2a 2a 20 61 6e 64 20 4d  PE_HEAP.** and M
2d8b0 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2d8c0 2e 20 20 49 66 20 61 6e 20 61 6c 6c 6f 63 61 74  .  If an allocat
2d8d0 69 6f 6e 20 69 73 20 4d 45 4d 54 59 50 45 5f 4c  ion is MEMTYPE_L
2d8e0 4f 4f 4b 41 53 49 44 45 2c 20 74 68 61 74 20 6d  OOKASIDE, that m
2d8f0 65 61 6e 73 0a 2a 2a 20 69 74 20 6d 69 67 68 74  eans.** it might
2d900 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63   have been alloc
2d910 61 74 65 64 20 62 79 20 6c 6f 6f 6b 61 73 69 64  ated by lookasid
2d920 65 2c 20 65 78 63 65 70 74 20 74 68 65 20 61 6c  e, except the al
2d930 6c 6f 63 61 74 69 6f 6e 20 77 61 73 0a 2a 2a 20  location was.** 
2d940 74 6f 6f 20 6c 61 72 67 65 20 6f 72 20 6c 6f 6f  too large or loo
2d950 6b 61 73 69 64 65 20 77 61 73 20 61 6c 72 65 61  kaside was alrea
2d960 64 79 20 66 75 6c 6c 2e 20 20 49 74 20 69 73 20  dy full.  It is 
2d970 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 76 65 72  important to ver
2d980 69 66 79 0a 2a 2a 20 74 68 61 74 20 61 6c 6c 6f  ify.** that allo
2d990 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 69 67  cations that mig
2d9a0 68 74 20 68 61 76 65 20 62 65 65 6e 20 73 61 74  ht have been sat
2d9b0 69 73 66 69 65 64 20 62 79 20 6c 6f 6f 6b 61 73  isfied by lookas
2d9c0 69 64 65 20 61 72 65 20 6e 6f 74 0a 2a 2a 20 70  ide are not.** p
2d9d0 61 73 73 65 64 20 62 61 63 6b 20 74 6f 20 6e 6f  assed back to no
2d9e0 6e 2d 6c 6f 6f 6b 61 73 69 64 65 20 66 72 65 65  n-lookaside free
2d9f0 28 29 20 72 6f 75 74 69 6e 65 73 2e 20 20 41 73  () routines.  As
2da00 73 65 72 74 73 20 73 75 63 68 20 61 73 20 74 68  serts such as th
2da10 65 0a 2a 2a 20 65 78 61 6d 70 6c 65 20 61 62 6f  e.** example abo
2da20 76 65 20 61 72 65 20 70 6c 61 63 65 64 20 6f 6e  ve are placed on
2da30 20 74 68 65 20 6e 6f 6e 2d 6c 6f 6f 6b 61 73 69   the non-lookasi
2da40 64 65 20 66 72 65 65 28 29 20 72 6f 75 74 69 6e  de free() routin
2da50 65 73 20 74 6f 20 76 65 72 69 66 79 0a 2a 2a 20  es to verify.** 
2da60 74 68 69 73 20 63 6f 6e 73 74 72 61 69 6e 74 2e  this constraint.
2da70 0a 2a 2a 0a 2a 2a 20 41 6c 6c 20 6f 66 20 74 68  .**.** All of th
2da80 69 73 20 69 73 20 6e 6f 2d 6f 70 20 66 6f 72 20  is is no-op for 
2da90 61 20 70 72 6f 64 75 63 74 69 6f 6e 20 62 75 69  a production bui
2daa0 6c 64 2e 20 20 49 74 20 6f 6e 6c 79 20 63 6f 6d  ld.  It only com
2dab0 65 73 20 69 6e 74 6f 0a 2a 2a 20 70 6c 61 79 20  es into.** play 
2dac0 77 68 65 6e 20 74 68 65 20 53 51 4c 49 54 45 5f  when the SQLITE_
2dad0 4d 45 4d 44 45 42 55 47 20 63 6f 6d 70 69 6c 65  MEMDEBUG compile
2dae0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20  -time option is 
2daf0 75 73 65 64 2e 0a 2a 2f 0a 23 69 66 64 65 66 20  used..*/.#ifdef 
2db00 53 51 4c 49 54 45 5f 4d 45 4d 44 45 42 55 47 0a  SQLITE_MEMDEBUG.
2db10 20 20 76 6f 69 64 20 73 71 6c 69 74 65 33 4d 65    void sqlite3Me
2db20 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 76 6f  mdebugSetType(vo
2db30 69 64 2a 2c 75 38 29 3b 0a 20 20 69 6e 74 20 73  id*,u8);.  int s
2db40 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67 48 61  qlite3MemdebugHa
2db50 73 54 79 70 65 28 76 6f 69 64 2a 2c 75 38 29 3b  sType(void*,u8);
2db60 0a 20 20 69 6e 74 20 73 71 6c 69 74 65 33 4d 65  .  int sqlite3Me
2db70 6d 64 65 62 75 67 4e 6f 54 79 70 65 28 76 6f 69  mdebugNoType(voi
2db80 64 2a 2c 75 38 29 3b 0a 23 65 6c 73 65 0a 23 20  d*,u8);.#else.# 
2db90 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33 4d 65  define sqlite3Me
2dba0 6d 64 65 62 75 67 53 65 74 54 79 70 65 28 58 2c  mdebugSetType(X,
2dbb0 59 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a  Y)  /* no-op */.
2dbc0 23 20 64 65 66 69 6e 65 20 73 71 6c 69 74 65 33  # define sqlite3
2dbd0 4d 65 6d 64 65 62 75 67 48 61 73 54 79 70 65 28  MemdebugHasType(
2dbe0 58 2c 59 29 20 20 31 0a 23 20 64 65 66 69 6e 65  X,Y)  1.# define
2dbf0 20 73 71 6c 69 74 65 33 4d 65 6d 64 65 62 75 67   sqlite3Memdebug
2dc00 4e 6f 54 79 70 65 28 58 2c 59 29 20 20 20 31 0a  NoType(X,Y)   1.
2dc10 23 65 6e 64 69 66 0a 23 64 65 66 69 6e 65 20 4d  #endif.#define M
2dc20 45 4d 54 59 50 45 5f 48 45 41 50 20 20 20 20 20  EMTYPE_HEAP     
2dc30 20 20 30 78 30 31 20 20 2f 2a 20 47 65 6e 65 72    0x01  /* Gener
2dc40 61 6c 20 68 65 61 70 20 61 6c 6c 6f 63 61 74 69  al heap allocati
2dc50 6f 6e 73 20 2a 2f 0a 23 64 65 66 69 6e 65 20 4d  ons */.#define M
2dc60 45 4d 54 59 50 45 5f 4c 4f 4f 4b 41 53 49 44 45  EMTYPE_LOOKASIDE
2dc70 20 20 30 78 30 32 20 20 2f 2a 20 48 65 61 70 20    0x02  /* Heap 
2dc80 74 68 61 74 20 6d 69 67 68 74 20 68 61 76 65 20  that might have 
2dc90 62 65 65 6e 20 6c 6f 6f 6b 61 73 69 64 65 20 2a  been lookaside *
2dca0 2f 0a 23 64 65 66 69 6e 65 20 4d 45 4d 54 59 50  /.#define MEMTYP
2dcb0 45 5f 53 43 52 41 54 43 48 20 20 20 20 30 78 30  E_SCRATCH    0x0
2dcc0 34 20 20 2f 2a 20 53 63 72 61 74 63 68 20 61 6c  4  /* Scratch al
2dcd0 6c 6f 63 61 74 69 6f 6e 73 20 2a 2f 0a 23 64 65  locations */.#de
2dce0 66 69 6e 65 20 4d 45 4d 54 59 50 45 5f 50 43 41  fine MEMTYPE_PCA
2dcf0 43 48 45 20 20 20 20 20 30 78 30 38 20 20 2f 2a  CHE     0x08  /*
2dd00 20 50 61 67 65 20 63 61 63 68 65 20 61 6c 6c 6f   Page cache allo
2dd10 63 61 74 69 6f 6e 73 20 2a 2f 0a 0a 2f 2a 0a 2a  cations */../*.*
2dd20 2a 20 54 68 72 65 61 64 69 6e 67 20 69 6e 74 65  * Threading inte
2dd30 72 66 61 63 65 0a 2a 2f 0a 23 69 66 20 53 51 4c  rface.*/.#if SQL
2dd40 49 54 45 5f 4d 41 58 5f 57 4f 52 4b 45 52 5f 54  ITE_MAX_WORKER_T
2dd50 48 52 45 41 44 53 3e 30 0a 69 6e 74 20 73 71 6c  HREADS>0.int sql
2dd60 69 74 65 33 54 68 72 65 61 64 43 72 65 61 74 65  ite3ThreadCreate
2dd70 28 53 51 4c 69 74 65 54 68 72 65 61 64 2a 2a 2c  (SQLiteThread**,
2dd80 76 6f 69 64 2a 28 2a 29 28 76 6f 69 64 2a 29 2c  void*(*)(void*),
2dd90 76 6f 69 64 2a 29 3b 0a 69 6e 74 20 73 71 6c 69  void*);.int sqli
2dda0 74 65 33 54 68 72 65 61 64 4a 6f 69 6e 28 53 51  te3ThreadJoin(SQ
2ddb0 4c 69 74 65 54 68 72 65 61 64 2a 2c 20 76 6f 69  LiteThread*, voi
2ddc0 64 2a 2a 29 3b 0a 23 65 6e 64 69 66 0a 0a 23 69  d**);.#endif..#i
2ddd0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2dde0 5f 45 4e 41 42 4c 45 5f 44 42 53 54 41 54 5f 56  _ENABLE_DBSTAT_V
2ddf0 54 41 42 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  TAB) || defined(
2de00 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 69 6e 74  SQLITE_TEST).int
2de10 20 73 71 6c 69 74 65 33 44 62 73 74 61 74 52 65   sqlite3DbstatRe
2de20 67 69 73 74 65 72 28 73 71 6c 69 74 65 33 2a 29  gister(sqlite3*)
2de30 3b 0a 23 65 6e 64 69 66 0a 0a 69 6e 74 20 73 71  ;.#endif..int sq
2de40 6c 69 74 65 33 45 78 70 72 56 65 63 74 6f 72 53  lite3ExprVectorS
2de50 69 7a 65 28 45 78 70 72 20 2a 70 45 78 70 72 29  ize(Expr *pExpr)
2de60 3b 0a 69 6e 74 20 73 71 6c 69 74 65 33 45 78 70  ;.int sqlite3Exp
2de70 72 49 73 56 65 63 74 6f 72 28 45 78 70 72 20 2a  rIsVector(Expr *
2de80 70 45 78 70 72 29 3b 0a 45 78 70 72 20 2a 73 71  pExpr);.Expr *sq
2de90 6c 69 74 65 33 56 65 63 74 6f 72 46 69 65 6c 64  lite3VectorField
2dea0 53 75 62 65 78 70 72 28 45 78 70 72 2a 2c 20 69  Subexpr(Expr*, i
2deb0 6e 74 29 3b 0a 45 78 70 72 20 2a 73 71 6c 69 74  nt);.Expr *sqlit
2dec0 65 33 45 78 70 72 46 6f 72 56 65 63 74 6f 72 46  e3ExprForVectorF
2ded0 69 65 6c 64 28 50 61 72 73 65 2a 2c 45 78 70 72  ield(Parse*,Expr
2dee0 2a 2c 69 6e 74 29 3b 0a 76 6f 69 64 20 73 71 6c  *,int);.void sql
2def0 69 74 65 33 56 65 63 74 6f 72 45 72 72 6f 72 4d  ite3VectorErrorM
2df00 73 67 28 50 61 72 73 65 2a 2c 20 45 78 70 72 2a  sg(Parse*, Expr*
2df10 29 3b 0a 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  );..const char *
2df20 2a 73 71 6c 69 74 65 33 43 6f 6d 70 69 6c 65 4f  *sqlite3CompileO
2df30 70 74 69 6f 6e 73 28 69 6e 74 20 2a 70 6e 4f 70  ptions(int *pnOp
2df40 74 29 3b 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  t);..#endif /* S
2df50 51 4c 49 54 45 49 4e 54 5f 48 20 2a 2f 0a        QLITEINT_H */.